公式解読Activityの1つ

4099 ワード

Activityは、ユーザーがフォーカスするコンポーネントであり、ほとんどのactivitiesがユーザーと対話できるため、Activityクラスはウィンドウの作成に注目し、setContentView(View)という関数を使用して作成したウィンドウに独自のUIを配置することができます.activitiesは常にフルスクリーンでユーザーに表示されますが、1つのフローティングウィンドウで表示するか(WindowsIsFloatingというトピックを設定することによって)、他のactivityを埋め込む(Activity Groupを使用することによって)ほとんどのActivityのサブクラスで2つの方法を実現することもできます.
onCreate(Bundle):この方法は通常activityを初期化するために使用されます.最も重要なのは、setContentView(int)メソッドを呼び出し、レイアウトリソースを通じて自分のUIを定義し、findView(int)という方法でUIのコンポーネントを取得することです.プログラミングで操作するのに便利です.
onPause():この方法は、ユーザーがこのactivityを離れたときに取る動作を定義するために使用されます.最も重要なのは、ユーザがここで行った変更はすべてコミットされる必要がある(通常はプログラムデータを保存するContentProviderにコミットされる).
通常、activityを起動するには2つの方法があります.1つの方法は、アプリケーションのアイコンをクリックすると、プログラム定義の起動activityを起動し、具体的にはエンジニアリングのAndroid Manifestを見てみましょう.xmlファイルでわかります.もう1つの方法は、1つのactivityで別のactivityを起動することによって、ほとんどのアプリケーションが複数のactivityから構成されているため、アプリケーションの1つのインタフェースから別のインタフェースに入るのはこのような方法に属していると信じています.私たちはactivityでContentを呼び出します.startActivity()は指定されたactivityを起動できますが、Contentを使用する場合は注意してください.startActivity()このメソッドが別のactivityを起動する場合、すべてのactivityはAndroidManifestにある必要があります.xmlファイルに対応するラベルを宣言します.そうでなければ、アプリケーションは起動するactivityが見つかりません.
私たちが議論するテーマは次のとおりです.
1、Fragments
2、Activityのライフサイクル
3、配置変更
4、Activitiesを起動して結果を得る
5、持続的な状態を保存する
6、権限
7、プロセスのライフサイクル
開発者ガイド:
Activityはアプリケーションのライフサイクル全体の重要な部分であり、activitiesの起動と組織はプラットフォームアプリケーションモデルの基礎部分である.アプリケーション構造とactivitiesの実行方法については、Application FundamentalsとTasks and BackStack開発者ガイドを参照してください.Activities開発者ガイドでは、activitiesの作成方法についての詳細な説明を参照できます.
Fragments:
蜂の巣バージョンから、ActivityはFragmentクラスのより良いモジュール化された独自のコードを利用して、より大きなスクリーンのためにより複雑なユーザーインタフェースを作成し、アプリケーションがサイズスクリーンに適応するのを助けることができます.
Activityのライフサイクル
システム内のactivitiesはactivity stackとして管理されています.新しいactivityが起動すると、スタックの上部に配置され、現在実行されているactivityになります.以前のactivityはスタックに保存され、新しく起動したactivityが終了するまで画面の先端には表示されません.
各activityには4つのステータスがあります.
1、activityが画面の最上位(つまりスタックトップ)にある場合、activityがアクティブになり、すなわち実行状態となる.
2、activityがフォーカスを失ったが、依然として表示されている(このactivityの上に非全画面または透明なacticityがある)場合、一時停止状態となる.一時停止状態のactivityはまだアクティブですが、システムメモリが低すぎる場合、一時停止したactivityはシステムによって殺されます.
3、一つのactivityがもう一つのactivityによって完全に遮蔽された場合、このとき停止状態となる.このとき、すべてのステータスと情報は保持されますが、表示されず、システムがメモリを必要とするときにactivityを殺すことができます.
4、activityが一時停止または停止状態にある場合、システムはこのactivityを閉じるか、このプロセスを殺すだけでよい.このactivityが再びユーザーの前に現れると、彼は完全に再起動され、元の状態に戻らなければなりません.
次の図はactivityの重要な状態変換を示している.四角形の矩形に現れるのは,activityを2つの状態間で変換するために呼び出す方法である.シェーディングされた楕円にはactivityが存在できるいくつかの状態が表示されます.
ここには3つの重要なループがあり、自分のactivityを監視するときに注目するかもしれません.
1、activityのentire lifetime(グローバルライフサイクル)は、onCreate(Bundle)が最後にonDestroy()を呼び出すまで最初に呼び出されます.1つのactivityはonCreate()でグローバルな状態を設定し、onDestroy()ですべてのリソースを解放します.たとえば、スレッドがバックグラウンドで実行され、ネットワークからデータがダウンロードされると、onCreate()メソッドでこのスレッドを作成し、onDestroy()でこのスレッドを停止する可能性があります.
2、activityのvisible lifetime(可視ライフサイクル)は、onStart()を呼び出して対応するonStop()までの呼び出しで発生します.この間、ユーザは、画面の最前端にあるわけではないか、ユーザと対話できない可能性があるが、画面上にこのactivityを表示することができる.たとえば、onStart()メソッドにBroadcastReceiverを登録してUIの変更をリスニングし、onStop()でログアウトすることができます.onStart()とonStop()は複数回呼び出すことができ、activityは表示または消去されます.
3、1つのactivityのforeground lifetime(フロントサイクル)は、onResume()と対応するonPause()の間で発生する.この間、activityは常に画面の最先端にあり、ユーザと対話し、1つのactivityはresumedとpausedの2つの状態の前に頻繁に切り替えることができる.例えば、デバイスがスリープ状態に入ると、activityの結果が送信され、新しいintentが送信されるので、この方法のコードはかなり簡潔でなければならない.
activityのグローバルライフサイクルは、次の方法で定義されます.これらの方法はすべて自分のコードで上書きすることができ、状態間切替時に適切な作業を完了することができ、すべてのactivityはonCreate(BUndle)を実現して初期化を実現しなければならない.多くの場合、onPause()コミットがデータに変更されるほか、ユーザーとのインタラクションを停止する準備もできています.これらの方法を実現するときは、スーパークラスを考えなければなりません.
    public class Activity extends ApplicationContext {
     protected void onCreate(Bundle savedInstanceState);


     protected void onStart();
     
     protected void onRestart();


     protected void onResume();


     protected void onPause();


     protected void onStop();


     protected void onDestroy();
 }

1つのactivityは常にシステムによって殺すことができるわけではありません.例えば、activityがonPause()とonResume()の中にある場合、システムはいくつかの原因(メモリ不足など)で殺すことができます.
さあ、今日は先にこんなにたくさん書いて、明日続けます!