Android:LaunchMode= Singletaskの問題
-
14-11-2019 - |
質問
主な活動の周りに丸いアプリを持っています(メインメニュー)。互いのアプリでは、このアクティビティに指示するオプションメニュー項目があります。
最初に、この項目が選択されたときに常に新しい主な活動を開始しました。インテントバンドルを使用して、私は新たなスタートで私がするいくつかの初期化が必要ではないという主な活動を伝えました。
しかし、私は全体的な振る舞いが好きではありませんでした。 android:launchMode="SingleTask"
につまずく、これはヘルプになっていました:今、私はいつも私のメインメニューアクティビティを再作成しません。また、「戻る」ボタンを押すと、ホーム画面に直接戻ってきます。これは適切な「メイン」メニューのように非常にうまくいっています。
私の問題これです:私が私のアプリの別のアクティビティを実行した場合は、ホームボタンを押してから、私のアプリを押してから(最後のアプリ」を使用してください)、そして私は最後の活動に戻りませんが、メインワン。他の活動は破壊されます。
任意のアイデア任意のアクティビティにしか戻されずにSingleTask
の動作を実装する方法は?
解決
他の活動がAndroidの活動のデフォルトで通常宣言されている場合は、あなたのアプリに戻ってあなたが中断した同じアクティビティにあなたを連れて行ってください(ハードウェアのホームボタンを使って)
しかし、Androidシステムはシステムリソースが必要なときにアプリケーションをキル化していることを忘れないでください。それであなたのアプリは他のアプリケーションに行ったときにあなたのアプリが殺されたかもしれません。その後、アプリに戻ると、デフォルトのランチャーのアクティビティが再起動されます。これはあなたのメニューアクティビティです。
任意の活動から主な活動に戻るには、これを行います。
public static void goHome(Context context) {
final Intent intent = new Intent(context, HomeActivity.class); //give name of your main activity class here
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
}
.
それは活動スタックをクリアしてあなたの主な活動に戻ります。あなたがシングルトップを宣言したとき、それは既存の主な活動を前景にもたらします。 Flag Intent.flag_activity_clear_topは、主要な活動の上にあるスタック内のすべてのアクティビティを削除します。 (私はあなたが同じアプリケーション内にあると仮定しています)。
今、他のすべてのアクティビティには、クリックリスナーがメソッドgoHome();
を呼び出すボタンを含める必要があります。
あなたの主な活動から、ハードウェアバックボタンを押すと、アプリが終了するはずです。
他のヒント
主な活動によって作成された活動についてFinish()を呼び出しないのですか?このようにあなたは新しいものを作成せずに主な活動に戻ります...
あなたが別の活動を始める前にあなたの活動の状態を保存してからあなたが最後の活動に戻ってくるときにあなたの活動を再開するべきだと思います。 Androidからの活動ライフサイクルを参照してください http://developer.android.com/guide/topics/fundamentals/activities.html.