0

私はまだ Android にかなり慣れていないので、Activity のライフ サイクルを、デスクトップ アプリケーション開発者として知っていて使用できるものと調整するのにまだ問題があります。数週間前に、私が作成しようとしていた非常に単純なアプリについて、ここに質問を書きました。私の努力の結果は、正確には成功ではありませんでした。電話を回転させると、現在のアクティビティが破棄されて再起動されます (調査した文献によると)。これにより、特定のオブジェクトが再初期化され、正しく動作しなくなります。だと思う。

この実験により、アクティビティを使ってプログラミングする方法についてさらに自分自身を教育する必要があることが明らかになりました。このアクティビティの問題に対処する方法について、ガイドライン、テクニック、ベスト プラクティスを探すのに時間を費やしました。残念なことに、簡潔で有用なものを見つけることができませんでした。(信じてください。現時点では、Android の本をもう 1 冊も読む気力がありません。) 現在、私が進歩できる唯一の方法は、実際にプログラミングすることです。

だから私はそれを翼にすることにしました。私が最初に考えたのは、アプリケーションの状態に関係なく、私のアクティビティが左右に殺されている場合、バックグラウンドで存続するものを作成する必要があるということでした。基本的にショーを実行し、アプリケーションの状態を維持し、タイマーを実行するコントローラークラスを作成しました。アクティビティは、静的ファクトリ メソッドを介して OnCreate で参照を取得します。これにより、必要に応じて、常に適切な基本的なシングルトン パターンが確保されます。その後、アクティビティは単にコントローラーからのデータを表示し、ユーザーの操作を渡します。

Android のメカニズムに関する私の理解が正しければ、これは機能するはずです。でも考えさせられました。リソースを解放するためにいつでもシステムによって Activity を強制終了できる場合、Activity ではないクラスはどうなるでしょうか? アプリが実行されている間ずっと生きていると期待できますか、それともいつでも強制終了できますか?

とにかく、アプリの終了はいつ発生しますか? アプリの最終画面に「終了」ボタンを配置し、「ユーザーがアプリの終了を要求したので、終了してください」と Android に伝えようとしました。これまでのところ、私は成功していません。Sygic のような特定のアプリは、指示すると終了することを知っています (または、少なくともアプリの動作に基づいてこれを想定しています)。スタック内のアプリのアクティビティの前にあるアクティビティ) を忘れてしまいます。数日間アプリを使用しなかった後、アプリに戻ってくることがあり、最後に放置した状態になっています。それはずっと不必要に実行されていましたか?どうすれば防ぐことができますか?

Android が必要に応じてアクティビティを停止することは知っていますが、アプリ全体で同じことが行われますか? アプリの終了とは何ですか? また、いつ、どのように終了しますか?

4

2 に答える 2

1

ここにはたくさんの質問があります。あなたの質問のいくつかに取り組みますが、今は包括的な回答を書くことができません.

数日間アプリを使用しなかった後、アプリに戻ってくることがあり、最後に放置した状態になっています。それはずっと不必要に実行されていましたか?どうすれば防ぐことができますか?

それ自体は実行されていません (継続的にスレッドを生成するような方法で作成していないと仮定します)。しかし、システムはアプリケーションの「スナップショット」を保存することができます。そのスナップショットがまだ残っている場合は、それを使用して、アプリケーションの状態を元の状態と同じにします。通常、アプリは、使用していないダウン タイム中に「何かを実行」することはありません (これも、アプリに指示していないことを前提としています)。

とにかく、アプリの終了はいつ発生しますか?

終了は、Android では漠然とした概念のようなものです。ユーザーが画面上でアプリを直接操作していない間、アプリは停止状態になります。「破壊」される前に「停止」したままになる時間は、多くの要因によって異なります。システムは基本的に、状態の「スナップショット」を保持しているメモリ リソースを完全に再利用する必要があるまで、可能な限りアプリをこの停止状態に保ちます。それらのリソースを回収する必要があると、アクティビティが破棄されます。次回アクティビティが起動されると、最初から作成されます。ただし、Activity がその破棄の前 (停止状態にある間) に起動された場合、システムは保存された「スナップショット」を使用します。つまり、ユーザーが最後に残した状態と同じ状態になります。

アプリの終了とは何ですか? また、いつ、どのように終了しますか?

アクティビティの終了に最も近いのは、アクティビティが破棄されたときです。そして、OS は、状態のスナップショットによって消費されているリソースを再利用する必要があるときはいつでもこれを行います。

于 2013-08-30T23:36:09.423 に答える
0

私もActivity LifeCycleについてよく読んでいますが、私の理解では、Activityやクラスなどを含むアプリ全体が殺されています。ただし、Android システムがリソースを解放するためにアプリを強制終了するのは、最も極端な状況です。この場合、onPause()、onStop()、および onDestroy() メソッドを使用してデータを保存できます。アクティビティが最小化されているか、非表示になっているか、または強制終了されているかなどに応じて、その順序で呼び出されます。 onPause() は、アクティビティが非表示、一時停止、停止、強制終了などされているときに、(私が読んだ限りでは) 常に呼び出されます。これらの関数でデータまたは基本要素を保存し、onResume() メソッドでそれらを復元します。それが役立つことを願っています。

于 2013-08-30T23:37:37.070 に答える