この記事では、Android プログラミングにおけるアクティビティの完全なライフサイクルを例とともに分析します。参考のために皆さんと共有してください。詳細は次のとおりです:
Android のアクティビティには独自のライフサイクルがあります。この知識を学ぶことは、将来プログラムを作成するときに遭遇するいくつかのエラーをより深く理解するのに役立ちます。この記事は非常に長いので、時間を無駄にしないことを願っています~
今日はアクティビティスタックについてはあまり説明しません
いくつかの概念を区別してください
。1 アクティビティは公式には次のように説明されています。「アクティビティとは、電話をかけたり、写真を撮ったり、メールを送信したり、地図を表示したりするなど、ユーザーが何かを行うために操作できる画面を提供するアプリケーション コンポーネントです。ユーザー インターフェイスを描画するためのウィンドウ、つまり、ユーザーが対話するために使用する各ウィンドウ、およびユーザーが現在実行している操作が与えられます。
2 バックスタック プログラムをタッチすると、ユーザーはアプリケーション ランチャーを通じてアクティビティ A を開始し、現在のアクティビティ A が新しいアクティビティ B を開始すると、開始されたアクティビティ A がスタックの先頭にプッシュされます。この時点で onStop 関数を呼び出すと、システムはこのアクティビティ情報を維持します。ユーザーが戻るキーを押すと、バック スタックはポップ操作を実行し、スタックのポップとポップの詳細を呼び出します。後ほど詳しく紹介します。
3 タスク ユーザーがアクティビティにいるとき: アクティビティ A は「TaskOne アプリケーション」という名前で、HOME キーを押すとユーザーはランチャーに戻ります。このとき、ユーザーが新しいアプリケーションを再度タッチすると、新しいタスクが実行されます。バック スタックはタスクを表します。異なるプログラムのアクティビティを同じスタックにプッシュできます。つまり、プログラムがシステムに付属のテキスト メッセージング アクティビティを開始すると、次のような結果が得られます。ユーザーがテキストメッセージを送信する感覚です。
注: 上記の動作はシステムのデフォルト設定です。追加 A を開始するには 2 つの方法があります。 B. 1 つは、B. 動作のマニフェスト設定を変更することです。もう 1 つは、アクティビティによって開始されるインテントで開始されるアクティビティ設定を指定することです。ここで、インテントの優先順位は、manifest.xml ファイルよりも高く、ライフサイクルには、onCreate onStart onRestart onResume onStop onDestroy が同時に存在しません。アクティビティは、さまざまな状態に対応する操作を実行するために上記のメソッドを呼び出します。各メソッドの呼び出し時間
onCreate() 以下の状態ではアクティビティを終了できません
アクティビティが最初に作成されたときに呼び出されます ここで、通常の静的設定のすべてを行う必要があります: ビューの作成、データのリストへのバインド。このメソッドは、アクティビティが以前に凍結された状態を含むバンドルも提供します (存在する場合)。
常に onStart() が続きます。
onRestart() が呼び出されます。アクティビティを終了することはできません。
常に onStart() が続きます
//アクティビティは終了できません。再起動する前に
onResume() が呼び出されます。
常に onPause() が続きます。 .
//アクティビティが開始されると、ユーザーとの対話時間が呼び出されます。現時点では、アクティビティはアクティビティ スタックの最上位にあり、ユーザー入力に使用されます。これは常に onPause
onPause() の後に呼び出されます。Android HoneyComb システムを除き、アクティビティはいくつかの状態では終了できません。
アクティビティが前面に戻る場合は onResume() が続き、ユーザーに表示されなくなる場合は onStop() が続きます。
//システムが再起動しようとしているときに呼び出されます。前のアクティビティ (理解できません。理解しているのは、現在のアクティビティが新しいアクティビティを開始したいときに呼び出されるということです)。一般的なアプリケーションは、保存されていないデータを現在のデータに送信するために使用されます (データの更新を保存することを意味します)。アニメーションやその他の CPU 動作を停止します。このメソッドが返されるまで次のアクティビティは再開されないため、このメソッドの実装は高速である必要があります。
アクティビティがバック(翻訳の背景が適切ではない)からフロント(ユーザーと対話している状態)に変化すると、onPauseメソッドの後にonResumeメソッドが呼び出されます
アクティビティが非表示になると、onPause の後に onStop メソッドが呼び出されます
onStop() アクティビティはいくつかの状態で終了できます
別のアクティビティが再開されてカバーされているため、アクティビティがユーザーに表示されなくなったときに呼び出されますこれは、新しいアクティビティが開始されているか、既存のアクティビティがこのアクティビティの前に持ち込まれているか、このアクティビティが破棄されているために発生する可能性があります。
このアクティビティが対話するために戻ってくる場合は、その後に onRestart() が続きます。ユーザー、またはこのアクティビティが終了する場合は onDestroy()
//別のアクティビティが再起動され、現在のアクティビティ (スタック内) が上書きされたため、アクティビティがユーザーに表示されなくなったときに呼び出されます。新しいアクティビティが開始されたとき、既存のアクティビティがフォアグラウンドに戻ったとき、または現在のアクティビティが破棄されたとき。アクティビティがフォアグラウンドに戻ってユーザーと対話したい場合は、このメソッドの後に onReatart メソッドが呼び出されます。現在のアクティビティが終了する場合は、このメソッドの後に onDestroy メソッドが呼び出されます
onDestroy() アクティビティいくつかの状態で終了できます
アクティビティが破棄される前に受信する最後の呼び出し。これは、アクティビティが終了している (誰かがそのアクティビティに対してfinish() を呼び出した) か、システムが保存するためにアクティビティのこのインスタンスを一時的に破棄しているために発生する可能性があります。 isFinishing() メソッドを使用すると、これら 2 つのシナリオを区別できます。
これは、アクティビティが強制終了されたときに受け取られる最後のメソッドです。このメソッドを呼び出すときは 2 つの状況があります。1 つはアクティビティが完了しようとしている場合です。これは、finish メソッドを呼び出すことで実現できますが、システムはアクティビティを破棄してスペースを解放します。このメソッドは、アクティビティが終了しているかどうかを判断するために、onPause メソッドでよく使用されます。次のデモでは、この関数のデモを行います
それでは、私が作成したデモの例、
MainFest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="uni.activity" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="7" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".ActivityDemoActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Activity01" android:label="@string/app_name"> </activity> </application> </manifest>
Layout ファイル main を見てみましょう。
Activity01.java<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:id="@+id/Button_A" android:text="GO to activity 2" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
を開始し、ボタンをクリックしてActivity01に入ります
(アクティビティは最初に一時停止され、解放されません。実際には、新しいアクティビティをスタックにプッシュするプロセスであり、その後、新しいアクティビティが開始されます。これは、onCreate、次に onStart である必要があります。 print ステートメントの記述を間違えました。古いアクティビティが表示されていないときに、その onStop メソッドが呼び出されることを友人は知っているはずです)もう一度リターンキーを押して、ActivityDemoActivity に戻ります
(戻った後、スタックの一番上の activity01 がスタックポップ操作を実行します。ディスプレイが破壊されます)
もう一度Returnキーを押してデスクトップに戻ります
実際には複雑ではありません。Dongxieの文章は少し長いですが、基本的にアクティビティの完全なライフサイクルを示しています。
この記事が Android プログラミングに携わるすべての人に役立つことを願っています。
Android が水平画面と垂直画面を切り替えるときのアクティビティ ライフ サイクルに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。