Android が水平画面と垂直画面を切り替えるときのアクティビティのライフサイクル

高洛峰
リリース: 2017-01-07 16:15:19
オリジナル
1728 人が閲覧しました

この記事では、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 システムを除き、アクティビティはいくつかの状態では終了できません。

システムが前のアクティビティの再開を開始しようとしているときに呼び出されます。これは通常、保存されていない変更を永続データにコミットしたり、アニメーションやその他の CPU を消費する可能性のあるものを停止したりするために使用されます。アクティビティは、このメソッドが返されるまで再開されません。

アクティビティが前面に戻る場合は onResume() が続き、ユーザーに表示されなくなる場合は onStop() が続きます。

//システムが再起動しようとしているときに呼び出されます。前のアクティビティ (理解できません。理解しているのは、現在のアクティビティが新しいアクティビティを開始したいときに呼び出されるということです)。一般的なアプリケーションは、保存されていないデータを現在のデータに送信するために使用されます (データの更新を保存することを意味します)。アニメーションやその他の CPU 動作を停止します。このメソッドが返されるまで次のアクティビティは再開されないため、このメソッドの実装は高速である必要があります。

アクティビティがバック(翻訳の背景が適切ではない)からフロント(ユーザーと対話している状態)に変化すると、onPauseメソッドの後にonResumeメソッドが呼び出されます

アクティビティが非表示になると、onPause の後に onStop メソッドが呼び出されます

onStop() アクティビティはいくつかの状態で終了できます
別のアクティビティが再開されてカバーされているため、アクティビティがユーザーに表示されなくなったときに呼び出されますこれは、新しいアクティビティが開始されているか、既存のアクティビティがこのアクティビティの前に持ち込まれているか、このアクティビティが破棄されているために発生する可能性があります。
このアクティビティが対話するために戻ってくる場合は、その後に onRestart() が続きます。ユーザー、またはこのアクティビティが終了する場合は onDestroy()

//別のアクティビティが再起動され、現在のアクティビティ (スタック内) が上書きされたため、アクティビティがユーザーに表示されなくなったときに呼び出されます。新しいアクティビティが開始されたとき、既存のアクティビティがフォアグラウンドに戻ったとき、または現在のアクティビティが破棄されたとき。アクティビティがフォアグラウンドに戻ってユーザーと対話したい場合は、このメソッドの後に onReatart メソッドが呼び出されます。現在のアクティビティが終了する場合は、このメソッドの後に onDestroy メソッドが呼び出されます

onDestroy() アクティビティいくつかの状態で終了できます
アクティビティが破棄される前に受信する最後の呼び出し。これは、アクティビティが終了している (誰かがそのアクティビティに対してfinish() を呼び出した) か、システムが保存するためにアクティビティのこのインスタンスを一時的に破棄しているために発生する可能性があります。 isFinishing() メソッドを使用すると、これら 2 つのシナリオを区別できます。

これは、アクティビティが強制終了されたときに受け取られる最後のメソッドです。このメソッドを呼び出すときは 2 つの状況があります。1 つはアクティビティが完了しようとしている場合です。これは、finish メソッドを呼び出すことで実現できますが、システムはアクティビティを破棄してスペースを解放します。このメソッドは、アクティビティが終了しているかどうかを判断するために、onPause メソッドでよく使用されます。次のデモでは、この関数のデモを行います

Android が水平画面と垂直画面を切り替えるときのアクティビティのライフサイクル それでは、私が作成したデモの例、

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>
ログイン後にコピー
以下はデモの結果です。

操作プロセスは次のとおりです: ActivityDemoActivity

を開始し、ボタンをクリックしてActivity01に入ります

(アクティビティは最初に一時停止され、解放されません。実際には、新しいアクティビティをスタックにプッシュするプロセスであり、その後、新しいアクティビティが開始されます。これは、onCreate、次に onStart である必要があります。 print ステートメントの記述を間違えました。古いアクティビティが表示されていないときに、その onStop メソッドが呼び出されることを友人は知っているはずです)

Android が水平画面と垂直画面を切り替えるときのアクティビティのライフサイクルもう一度リターンキーを押して、ActivityDemoActivity に戻ります

(戻った後、スタックの一番上の activity01 がスタックポップ操作を実行します。ディスプレイが破壊されます)

もう一度Returnキーを押してデスクトップに戻りますAndroid が水平画面と垂直画面を切り替えるときのアクティビティのライフサイクル

実際には複雑ではありません。Dongxieの文章は少し長いですが、基本的にアクティビティの完全なライフサイクルを示しています。

この記事が Android プログラミングに携わるすべての人に役立つことを願っています。

Android が水平画面と垂直画面を切り替えるときのアクティビティ ライフ サイクルに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

Android が水平画面と垂直画面を切り替えるときのアクティビティのライフサイクル

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!