23

単一の .xml から構成される Android アプリケーションがありますActivity。アプリケーション (== ) のインスタンスが特定の時間内に 1 つだけ存在することをどのように保証できますActivityか? アプリのアイコンを複数回クリックして、アプリの複数のインスタンスを開くことに成功した状況になりました (これは常に再現されるわけではありません)。

4

3 に答える 3

15

受け入れられた回答はその目的を果たしますが、これを行うための最良の方法ではありません。

代わりに、次AtomicIntegerのように各アクティビティ内でstatic を使用することをお勧めします。

//create a counter to count the number of instances of this activity
public static AtomicInteger activitiesLaunched = new AtomicInteger(0);

@Override
protected void onCreate(Bundle pSavedInstanceState) {

        //if launching will create more than one 
        //instance of this activity, bail out
        if (activitiesLaunched.incrementAndGet() > 1) { finish(); }

        super.onCreate(pSavedInstanceState);

}

@Override
protected void onDestroy() {

        //remove this activity from the counter
        activitiesLaunched.getAndDecrement();

        super.onDestroy();

}



それで、受け入れられた答えの何が問題なのですか?

モードを使用してアクティビティを起動する必要があると宣言すると、singleInstanceアクティビティとタスクのデフォルトの動作が混乱し始め、望ましくない影響が生じる可能性があります。

Androidのドキュメントでは、必要な場合にのみこの動作を中断することを推奨しています (この場合はそうではありません)。

注意: ほとんどのアプリケーションは、>アクティビティとタスクの既定の動作を中断するべきではありません。アクティビティで既定の動作を変更する必要があると判断した場合は、起動中、および [戻る] ボタンを使用して他のアクティビティやタスクからアクティビティに戻るときに、アクティビティの使いやすさを慎重にテストしてください。ユーザーの予想される動作と競合する可能性のあるナビゲーション動作を必ずテストしてください。

于 2015-06-13T16:40:54.890 に答える