いつ何をすべきか:
1. アプリがアクティビティとフラグメントの複雑な構造を使用している
2. 途中で (部分的またはそうでなくても) 破棄されたバックグラウンドのアプリケーション
に戻る 3. 奥深くにある最後の画面に戻るワークフローで
4. 物事を再初期化するために最初の画面に戻る必要があります (複雑でユーザーの操作が必要
な
ため)この状況。
- 実行するアクション: インテントを起動しますか? 終了するだけですか?保持されている下部構造に何かをしてから終了しますか?
- いつ実行するか - Activity.onCreateとActivity.onCreate の両方ですぐにフラグメントの空のコンストラクタ? それとも活動で十分ですか?
- それを検出する最良の方法: これまでに思いついたのは、必要なデータ/接続を保持する Service にバインドし、初期化されているかどうかを確認することだけです。しかし、バインドは onResume 後に終了します。
UI関連については何も尋ねていません。
特定の 1 つのアプリケーションでのみ機能するソリューションを求めているわけではないので、コードを求めないでください。
この質問が漠然としていると思われる場合は、「スタックを閉じて最初の画面に戻るにはどうすればよいですか?」という 1 文のバージョンを次に示し
ます。 .com/questions/14650342 .
3 に答える
アプリがバックグラウンドにあり、OSがメモリを解放したい場合。PID全体が強制終了され、すべてのアクティビティが強制終了されます。ドキュメントは、この動作について誤解を招く可能性があります。この投稿を見る
Androidアプリのメモリ不足の問題-すべてを試しましたが、まだ途方に暮れています
hackbod(Androidプラットフォーム開発者)がそれを確認するところです。
複数のアクティビティA、B、Cがあり、アプリが強制終了されて、アプリを元に戻したい場合。ほとんどの上位アクティビティのonCreate(nullではない)が呼び出されます。このシナリオが発生し、次のようなことを行うと、注目に値します
onCreate(not null){
startActivity(new intent)
finish;
2つのことが起こります:
- startActivityは新しいアクティビティを開始します
- finishは現在のアクティビティを閉じますが、前のアクティビティ(killされたpidから)をonCreate(nullではない)で戻します。これは単にアクティビティスタックの次のアクティビティでした。
これにより、複数のアクティビティインスタンスの問題が発生する可能性があります。
私はしばらく前に同様の問題を抱えていて、醜いハックに終わったが、それはうまくいった:
アプリ全体を再開するために、次のようなものを追加しました
onCreate(not null){
if(launcher activity == null){
finish();
return;
すべての活動で。他の人が提案しているように、何を達成したいかに応じてフラグを使用します。それがあなたにいくつかのヒントを与えることを願っています。
アプリケーションが一貫性のない状態にあり、最初からやり直す必要があることに気付いた場合、最も簡単な方法は、次のようにルートアクティビティを再起動することです。
Intent intent = new Intent(this, MyRootActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
これにより、タスクからすべてのアクティビティがクリアされ、ルートアクティビティが再開されます。
活動の中でこれを行うことをお勧めしonCreate()
ます。
あなたの目標がすべての活動を却下し、あなたの家/主な活動に戻ることであるならば、あなたは単に使うことができます:
Intent intent = new Intent(getApplicationContext(), Home.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
これにより、ホーム上のすべてのアクティビティがクリアされ、ホーム画面に戻ります。