4

休暇中に忙しくするために、Android開発について学ぶことにしました。

だから私はアクティビティのライフサイクルについてのチュートリアルに従っています。リンクされた記事では、次のように述べています。

通常のアプリの使用中、前景のアクティビティは、アクティビティを一時停止させる他の視覚的なコンポーネントによって妨げられることがあります。たとえば、半透明のアクティビティ(ダイアログのスタイルのアクティビティなど)が開くと、前のアクティビティは一時停止します。アクティビティがまだ部分的に表示されているが、現在フォーカスされているアクティビティがない限り、一時停止されたままになります。

ただし、アクティビティが完全に遮られて表示されなくなると、アクティビティは停止します(これについては次のレッスンで説明します)。

サンプルアプリをダウンロードしました。サンプルアプリには3つのアクティビティがあり、それぞれにから他のアクティビティを起動するボタンがありますIntent。「スタートB」をクリックすると、のレイアウトActivity Aで完全に遮られているので、の状態は「停止」になるはずだと思っていました。Activity Bただし、「一時停止」に設定されていました。

の状態が停止に変わるのは、レイアウトActivity Aから[開始C]をクリックしたときだけです。Activity B

なぜこうなった?新しいAndroidバージョンに存在する最適化が原因ですか、それとも記事を誤解していますか?

スクリーンショット

4

1 に答える 1

8

これが私が苦労して学んだことです-GoogleのAndroidドキュメントはすべてについて正確ではありません!

時々、システムはドキュメントから逸脱しているように見える特定の動作を最適化します。何かがどのように機能するかを正確に知る唯一の方法は、難しい方法、つまりソースを掘り下げることです。

アプリが停止や一時停止などの特定のシステムレベルの動作に依存して、宣伝されている特定の順序で正確に動作する場合は、苦労します。この動作はシステムによって制御され、保証はありません。

これに対処するために私が見つけた最善の方法は、Googleが開発者に約束している契約を見つけてそれを守ることです。たとえば、この場合、契約では、ルールに従い、必要なときに必要なライフサイクルコールバックを実装すると、それが機能し、どのような状況で、、、などが呼び出されるかを正確に知る必要がないことが規定されています。onStop()onSaveInstanceState()onPause()onDestroy()

つまり、を実装してアプリが一時停止されたときに実行するonPause()必要があることを実行する場合、アクティビティがいつ一時停止されるかを正確に知る必要はありません。一時停止/再開はシステムによって制御され、バージョンごとに(または、この動作をカスタマイズすることを選択した場合はメーカーごとに)変更される可能性があります。

私が始めたときに誰かが私にこれを言ってくれたらいいのに。それは私に多くの時間と欲求不満を節約したでしょう。お役に立てれば。

于 2012-12-29T18:57:39.867 に答える