異なるインテントでアクティビティが起動されたときに、アクティビティの複数のインスタンスを防ぐ方法 質問する

異なるインテントでアクティビティが起動されたときに、アクティビティの複数のインスタンスを防ぐ方法 質問する

アプリケーションを起動するとバグが発生しました。"開ける"Google Play ストア アプリ (旧称 Android Market) のボタン。Play ストアから起動する場合と、Intent携帯電話のアプリケーション メニューのアイコンから起動する場合とでは、起動方法が異なっているようです。このため、同じアクティビティの複数のコピーが起動され、互いに競合することになります。

例えば、アプリがアクティビティ ABC で構成されている場合、この問題により ABCA のスタックが発生する可能性があります。

この問題を解決するためにすべてのアクティビティでを使用しようとしましたandroid:launchMode="singleTask"が、HOME ボタンを押すたびにアクティビティ スタックがルートにクリアされるという望ましくない副作用がありました。

期待される動作は次のとおりです。ABC -> HOME -> アプリが復元されたら、次の操作が必要です: ABC -> HOME -> ABC

HOME ボタンを使用するときにルート アクティビティにリセットせずに、同じタイプの複数のアクティビティが起動されないようにする良い方法はありますか?

ベストアンサー1

これを onCreate に追加すれば準備完了です:

// Possible work around for market launches. See https://issuetracker.google.com/issues/36907463
// for more details. Essentially, the market launches the main activity on top of other activities.
// we never want this to happen. Instead, we check if we are the root and if not, we finish.
if (!isTaskRoot()) {
    final Intent intent = getIntent();
    if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(intent.getAction())) {
        Log.w(LOG_TAG, "Main Activity is not the root.  Finishing Main Activity instead of launching.");
        finish();
        return;       
    }
}

おすすめ記事