1

デバイスでアプリを終了すると、タスクマネージャーに表示されなくなり、アプリを再起動すると最初から再起動すると思いました。

しかし、何らかの理由で、私のアプリは前回の実行からいくつかの変数を保持しており、実際には正しく再起動しません。

これは、デバイス自体で再起動した場合にのみ発生します。Eclipse で再起動すると、すべての変数を初期化する最初からアプリが正しく起動します。

どうしてこれなの?アプリを終了すると、すべてのクラスと変数が破棄されるという私の仮定は間違っていますか?

どうもありがとう

4

1 に答える 1

1

まあ、それはそれよりも複雑です。

まず、デバッガーで実行している場合、通常の Android アプリケーションのライフサイクルは表示されません。アプリを強制終了して再起動すると、実際に最初から開始されます。ただし、通常の Android アプリのライフサイクルは、開発者にとってあまり直感的ではありません。通常、ユーザーがアプリから Android のホーム画面に「戻る」場合、アクティブなアクティビティがなくなると、アプリが強制終了されることが予想されます。これはそうではありません。Android OS は、メモリ不足によってアプリケーションが解放されるまで、アプリケーションをメモリ内に保持します。これは、ユーザーがアプリケーションを再度「開く」と、はるかに速く起動するためです。アプリケーションの onDestroy() メソッドが実際に強制終了されることは決してないことを指摘しておきます。

ただし、Activity がまだ生きていて、それらがバックグラウンドにあり、Android がメモリを必要とする場合、アクティビティは強制終了されますが、その前に onSaveInstanceState が呼び出されます。これにより、Activity がその状態を Bundle に保存する機会が与えられます。実際、これのほとんどはデフォルトの実装によって行われます。この時点で、すべてのアクティビティが強制終了された場合、アプリケーションは強制終了されますが、Android は保存された状態を保持し続け、ユーザーの観点からは、アプリケーションはまだ生きています (リストに表示されます)。アクティブなアプリケーションの数)。ユーザーがアプリケーションに戻ると、Android は最上位のアクティビティを再構築し (onCreate が呼び出されますが、onSaveInstanceState で保存されたコンテンツを含むバンドルを使用して)、ユーザーに表示します。

于 2011-12-08T17:59:09.110 に答える