2

私の質問のキャプションが非常に曖昧に聞こえたに違いないことはわかっています。しかし、ここではっきりさせてください。

ミドルウェア スタック上に Android アプリケーションがあるとします。アクティビティの onCreate() で、ミドルウェア モジュールを初期化します。

その onDestroy() で、ミドルウェアを初期化解除する必要があります。現在、ミドルウェア呼び出しの処理にはかなりの時間がかかる場合があります。だから私は onDestroy() 関数がどれくらいの時間を持っているかを知り、その時間内に私の初期化解除が行われるかどうかを見たい.

de-init を onDestroy() に保持するのは合理的ですか?

また、アクティビティ A1 の onCreate() でミドルウェアを初期化するとします。ボタンをクリックすると、アクティビティ A1 がアクティビティ A2 に切り替わります。メモリ不足の状況では、LMK はしばらく使用されていないアクティビティを強制終了します。このような場合、アクティビティ A1 は殺されませんか? アクティビティ A1 が強制終了されると、A1 で作成したすべてのインスタンスも破棄されますか?

よろしく、キキ

4

2 に答える 2

5

この質問をするのはかなり混乱していると思います。

何が起こっているのかをよく理解するには、developer.android.com にあるライフサイクル グラフを参照してください。

Activity.onDestroy()アクティビティの制御されたシャットダウンの場合にのみ呼び出されることがわかります。これは、Android OS がonDestroy()メソッドを呼び出さずにさまざまな状態でプロセスを強制終了できるため、非常にまれにしか発生しません。

何を、なぜ初期化解除する必要があるのですか?

  • リソースの解放が心配な場合は、プロセスが強制終了された場合でも、リソースのほとんどが解放されます。
  • ユーザーのデータ (アプリケーションの状態) を保存することが心配な場合は、オーバーライドonSaveInstanceState()して、onRestoreInstanceState()

質問に対する回答が本当に必要な場合は、次のとおりです。

  • それが実行されている間onDestroy()、あなたのアプリには(おそらく)好きなだけの時間があり、それが実行されているという事実はonDestroy()、OSがそれを強制終了するように選択しなかったことを意味します。しかし、ほとんどの場合問題にはなりません: 1 つはonDestroy、ほとんどのアプリで実行されることはなく、OS が考えを変えてアプリを停止する必要があると判断した場合、実行中であってもアプリを強制終了しますonDestroy
于 2010-10-21T11:33:24.263 に答える
3

http://developer.android.com/guide/practices/design/responsiveness.html :

Android では、システムは、アプリケーションが応答しない (ANR) ダイアログと呼ばれるダイアログをユーザーに表示することで、一定期間応答が不十分なアプリケーションから保護します。

アプリケーションが 5 秒間応答しない場合、通常、ANR ダイアログがポップアップします。jhominal が指摘したように、このonDestroy()方法はおそらく、クリーンアップ/設定の保存などを行いたい場所ではありません。

これを行う場所に関係なく、それが であろうと でonDestroy()あろonSaveInstanceState()onPause()と、一般的な 5 秒ルールが適用されると思います。処理に 5 秒以上かかる場合、ANR ダイアログが表示され、ユーザーはアプリを強制終了することを選択できます。

編集: アプリケーションがバックグラウンドにある場合、5 秒ルールに違反すると、ANR ダイアログが表示されずにアプリケーションが直接強制終了される可能性があります (おそらく?)。しかし、私はこれを確実に知りません。仮定だけです。

于 2010-10-21T13:04:41.950 に答える