42

Android のドキュメントによると、システムは、ユーザーによって放棄されたと見なされるタスクをクリアします (タスクを開始したアクティビティより上のすべてのアクティビティを終了します)。

https://developer.android.com/guide/components/tasks-and-back-stack.html#Clearing

ユーザーが長時間タスクを離れた場合、システムはルート アクティビティを除くすべてのアクティビティのタスクをクリアします。ユーザーが再びタスクに戻ると、ルート アクティビティのみが復元されます。システムがこのように動作するのは、長い時間が経過した後、ユーザーが前に行っていたことを放棄し、新しいことを始めるためにタスクに戻る可能性が高いためです。

https://developer.android.com/guide/topics/manifest/activity-element.html#always

通常、ユーザーがホーム画面からそのタスクを再選択すると、システムは特定の状況でタスクをクリアします (ルート アクティビティの上のスタックからすべてのアクティビティを削除します)。通常、これは、ユーザーが一定時間 (30 分間など) タスクにアクセスしていない場合に行われます。

この動作は、Gingerbread 以前を実行しているデバイスで簡単に再現できます。アプリを起動して過去の履歴を作成したら、ホーム ボタンを押して 30 分待ちます。ホーム画面からアプリを再起動すると、あたかも新しいタスクを開始したかのように状態がクリアされました。完全。

ただし、ICS 以降を実行しているデバイスでは、タスクが何時間または何日も非アクティブになった後でも、この動作をまったく再現できないようです。ホーム画面からアプリを再起動すると、タスクは常に残した状態になります。

ドキュメントが正しいと仮定すると、最新バージョンの Android (API 14+) はどのような条件下で自動的にタスクをクリアしますか?

動作が変更され、ドキュメントが古くなっている場合、alwaysRetainTaskState属性の目的は何<activity/>ですか? デフォルト値が に変更されましたか、"true"またはこの属性は非推奨になりましたか?

注: ここでは、デバイス リソースに依存する Android のプロセス ライフサイクル管理について話しているわけではありません。とにかく、プロセスの強制終了はユーザーに対して透過的である必要があり、タスクの状態には影響しません。

4

1 に答える 1