ホームページ >バックエンド開発 >PHPチュートリアル >Android_PHP チュートリアルでのアクティビティのライフサイクルの詳細な説明

Android_PHP チュートリアルでのアクティビティのライフサイクルの詳細な説明

WBOY
WBOYオリジナル
2016-07-12 09:03:531383ブラウズ

Androidのアクティビティライフサイクルの詳しい説明

ソフトウェアとハ​​ードウェア環境

  • Macbook Pro MGX 72
  • Android Studio 1.3.2
  • Genymotionエミュレータ

はじめに

Androidには、4つの主要な開発コンポーネントがあります, これらは Android プログラミングの基礎であり、Activity は最優先事項です。今日は、Activity のライフサイクルについて学びます。

アクティビティとは何ですか?

アクティビティは Android 開発で最も重要なコンポーネントであり、ほとんどすべての対話型操作はアクティビティで実行され、このウィンドウでは setContentView 関数を呼び出すことで必要な UI コントロールを表示できます。まず、Android API によって提供されるアクティビティ ライフ サイクル図を見てみましょう。最初は理解できなかった場合は、ブログ投稿全体を読んでから、戻って理解を深めてください。

Android_PHP チュートリアルでのアクティビティのライフサイクルの詳細な説明

いくつかの重要なコールバック関数

次のアクティビティ メソッドは、アクティビティのステータスが変化したときに、これらのメソッドをオーバーライドすることで特定の関数を実装できます。

<code class="language-none" style="-webkit-print-color-adjust:exact;margin:0px;padding:0px;border:none;border-radius:3px;background-color:transparent;"> 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();}</code>

onCreate

アクティビティが初めて作成されるときに呼び出されます。ビューの作成とデータの初期化はすべてここで実行されます。鋭い観察力を持つ方は、onCreate メソッドに Bundle SavedInstanceState パラメーターがあることに気づいたかもしれません。これは、アクティビティの以前の状態を保存するもので、非常に便利です。

onStart

はonCreateメソッド

の後に呼び出されます

onResume

会在onStart方法后调用。activity是使用栈结构来管理的,此时activity处于栈顶。

onRestart

被stop的activity重新启动时调用此函数,后面会紧跟onResume。

onPause

当有新的activity进入栈顶,即当前activity被迫到后台运行,onPause就会被调用。

onStop

会在onPause方法后调用,此时activity对于用户来讲,已经是不可见的了(Invisible)。从栈的角度来说,就是有新的activity压栈,或者已经存在的activity回到了栈顶。

onDestroy

这是生命周期中的最后一个函数。一般情况下activity已经完成(调用finish函数)或者系统为了回收资源主动销毁activity时,onDestroy才会被调用,可以通过isFinishing()方法来区分这2种情况。

综上,从onCreate开始到onDestroy结束,称为activity的一个完整生命周期。这里还有2个概念需要区别一下。

<code class="language-none" style="-webkit-print-color-adjust:exact;margin:0px;padding:0px;border:none;border-radius:3px;background-color:transparent;">1. 可见的(Visible,从onStart到onStop,这里的可见,不仅仅是在屏幕上可见)2. 前台运行(Foreground,从onResume到onPause)</code>

为了弄明白这些回调函数在各种情况下的调用顺序,我们新建个工程,名叫ActivityLifecycle,在这些回调函数中加些打印,如下

<code class="language-none" style="-webkit-print-color-adjust:exact;margin:0px;padding:0px;border:none;border-radius:3px;background-color:transparent;">@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    editText = (EditText)findViewById(R.id.edittext);    Log.d(TAG,"=== onCreate ===");}@Overrideprotected void onStart() {    super.onStart();    Log.d(TAG,"=== onStart ===");}@Overrideprotected void onResume() {    super.onResume();    Log.d(TAG, "=== onResume ===");}@Overrideprotected void onPause() {    super.onPause();    Log.d(TAG, "=== onPause ===");}@Overrideprotected void onRestart() {    super.onRestart();    Log.d(TAG, "=== onRestart ===");}@Overrideprotected void onStop() {    super.onStop();    Log.d(TAG, "=== onStop ===");}@Overrideprotected void onDestroy() {    super.onDestroy();    Log.d(TAG, "=== onDestroy ===");}</code>

运行一下程序,从Logcat中可以看到

Android_PHP チュートリアルでのアクティビティのライフサイクルの詳細な説明

说明了一个Activity从创建到显示出来需要执行onCreate-->onStart-->onResume三个方法。

アプリの実行中に他のアプリを開きたい場合、通常はホームボタンを押して終了します。このときのコールバックは何ですか?下の図を見てください

Android_PHP チュートリアルでのアクティビティのライフサイクルの詳細な説明

onPause-->onStop が実行されます。これは、アクティビティが破棄されていないが、他のアクティビティによって上書きされ、バックグラウンドで実行されていることを示しています。この状況は緊急事態に関連しています。 (着信がある場合やアプリがインストールされている場合) は同じで、緊急事態が終了すると、アクティビティは onRestart-->onStart-->onResume で実行され、以下に示すようにプロセス全体が出力されます。

Android_PHP チュートリアルでのアクティビティのライフサイクルの詳細な説明

アプリを実行中、現在のアクティビティが最後のアクティビティの場合、戻るキーを押すとプログラムは終了します。このとき、以下に示すように、onPause-->onStop-->onDestroy の 3 つのメソッドが次々に実行されます

Android_PHP チュートリアルでのアクティビティのライフサイクルの詳細な説明

次に、プロジェクトを少し変更し、クリックして SecondActivity という 2 番目のアクティビティを追加します。 MainActivity 上のボタン SecondActivity を入力すると、以下に示すように、SecondActivity は onPause-->onStop-->onDestroy を実行し、MainActivity は onRestart-->onStart-->onResume を実行します。

Android_PHP チュートリアルでのアクティビティのライフサイクルの詳細な説明

onSaveInstanceState と onRestoreInstanceState

ここには、上で説明されていない概念があります。 onPause メソッドと onStop メソッドが呼び出された後は、アクティビティ プロセスがいつでも強制終了される可能性があるため、データの損失を避けるために、onPause メソッドでデータ保存操作を実行する必要があります。 onSaveInstanceState メソッドも同様の機能を実行し、データは指定されたバンドルに保存されます。 onSaveInstanceState はアクティビティのライフサイクル関数ではないため、Android API では onPause メソッドでデータを保存することをお勧めします。

水平画面と垂直画面を切り替えます

処理は行われません。水平画面と垂直画面を切り替えて印刷を見ると、アクティビティが最初に破棄されてから再作成されていることがわかります

Android_PHP チュートリアルでのアクティビティのライフサイクルの詳細な説明

上記の問題には、一般的にいくつかの方法があります

  • 禁止 横画面と縦画面の切り替え(横画面または縦画面に限定されます。これは少し不正で推奨されません)
  • 横画面と縦画面の独立したレイアウト(2つのフォルダーレイアウトを作成します) land とlayout-port、対応する xml ファイルは変更されません)
  • アクティビティの重複を防止します ダウンロード (AndroidManifest.xml に android:configChanges="keyboardHidden|orientation" を追加し、onConfigurationChanged メソッドをオーバーライドします)

ソース コードのダウンロード

http: //download.csdn.net/detail/djstavav/9147793

1. http://developer.android.com/intl/zh-cn/reference/android/app/Activity.html

2. //developer.android.com/guide/topics/manifest/activity-element.html

3、http://developer.android.com/guide/topics/resources/runtime-changes.html

http://www.bkjia.com/PHPjc/1077807.html

tru​​ehttp://www.bkjia.com/PHPjc/1077807.html技術記事 Android におけるアクティビティ ライフ サイクルの詳細な説明 ソフトウェアとハ​​ードウェア環境 Macbook Pro MGX 72 Android Studio 1.3.2 Genymotion エミュレータ はじめに Android には 4 つの主要な開発コンポーネントがあり、それらは Android プログラミングです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。