次のようにアクティビティを開始するサービスがあります(たとえばActivity A
):
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
getApplicationContext().startActivity(intent);
アプリを起動すると、Activity A
代わりにアプリの最初のアクティビティの前に表示されます。
これを回避するには2つの解決策がありました:
1)
上記のコードを次のように変更します。
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY
| Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent);
問題:
アクティビティを起動してホームキーを押した後も、履歴スタック (= recent tasks
) にアクティビティが表示されます。どうして?
アプリを起動すると、2 つのタスクが 1 つに統合され、アプリの最初のアクティビティが一番上に表示されます。しかし、それ以外のアプリでは、新しいタスクを作成し、Activity A
残りのタスクを作成します。どうして?
2) 上記のコードを次のように変更します。
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY
| Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent);
マニフェストに次を追加します。
<activity
android:name="org.achartengine.GraphicalActivity"
android:taskAffinity="org.achartengine"
>
ここでActivity A
= android:name="org.achartengine.GraphicalActivity"
問題: 不要なタスク スタックが保持されます。
サービスからその活動を始める人は少ないと思います。それでも、彼らはそれを一度だけ行います。つまり、ユーザーがホーム/戻るキーをクリックしたときに、履歴スタックからアクティビティを消去する方が適切です。
どのオプションが優先されますか? (または別のもの?)