31

現在、リクエストコードに乱数を使用しています。そのため、startActivityForResult に新しいアクティビティを追加するたびに、衝突を避けるために他のすべてのアクティビティをチェックする必要があります。設計上衝突しないように、値を定義するための慣行があるのでしょうか? どう思いますか?

4

3 に答える 3

9

数値をインクリメントすると、衝突が発生しないことが保証されます (ラップするまで)。大量に使用しない限り、実際には発生しないはずです。

番号を与えるクラスをプロジェクトに追加できます。例えば

public class GlobalStuff {
    private static final AtomicInteger seed = new AtomicInteger();
    public static int getFreshInt() {
        return seed.incrementAndGet();
    }
}

コードで、代わりに数値を使用する必要があるときはいつでも

public void doSomething() {
    startActivityForResult(intentA, 342);
}

好きにする

private static final int REQUEST_CODE = GlobalStuff.getFreshInt();
public void doSomething() {
    startActivityForResult(intentA, REQUEST_CODE);
}

同じ番号を 2 回使用しないので安全です。少なくともコードが同じプロセスで実行されている間。

唯一の問題は、 switch にはコンパイル時に既知の番号が必要なためswitch、( のように) ステートメントでこれらの番号を使用できないことです。case REQUEST_CODE:

于 2012-11-01T15:11:10.350 に答える