Androidには、4つの主要な開発コンポーネントがあります, これらは Android プログラミングの基礎であり、Activity は最優先事項です。今日は、Activity のライフサイクルについて学びます。
アクティビティは Android 開発で最も重要なコンポーネントであり、ほとんどすべての対話型操作はアクティビティで実行され、このウィンドウでは setContentView 関数を呼び出すことで必要な UI コントロールを表示できます。まず、Android API によって提供されるアクティビティ ライフ サイクル図を見てみましょう。最初は理解できなかった場合は、ブログ投稿全体を読んでから、戻って理解を深めてください。
次のアクティビティ メソッドは、アクティビティのステータスが変化したときに、これらのメソッドをオーバーライドすることで特定の関数を実装できます。
<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 メソッドに Bundle SavedInstanceState パラメーターがあることに気づいたかもしれません。これは、アクティビティの以前の状態を保存するもので、非常に便利です。
はonCreateメソッド
の後に呼び出されます会在onStart方法后调用。activity是使用栈结构来管理的,此时activity处于栈顶。
被stop的activity重新启动时调用此函数,后面会紧跟onResume。
当有新的activity进入栈顶,即当前activity被迫到后台运行,onPause就会被调用。
会在onPause方法后调用,此时activity对于用户来讲,已经是不可见的了(Invisible)。从栈的角度来说,就是有新的activity压栈,或者已经存在的activity回到了栈顶。
这是生命周期中的最后一个函数。一般情况下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中可以看到
说明了一个Activity从创建到显示出来需要执行onCreate-->onStart-->onResume三个方法。
アプリの実行中に他のアプリを開きたい場合、通常はホームボタンを押して終了します。このときのコールバックは何ですか?下の図を見てください
onPause-->onStop が実行されます。これは、アクティビティが破棄されていないが、他のアクティビティによって上書きされ、バックグラウンドで実行されていることを示しています。この状況は緊急事態に関連しています。 (着信がある場合やアプリがインストールされている場合) は同じで、緊急事態が終了すると、アクティビティは onRestart-->onStart-->onResume で実行され、以下に示すようにプロセス全体が出力されます。
アプリを実行中、現在のアクティビティが最後のアクティビティの場合、戻るキーを押すとプログラムは終了します。このとき、以下に示すように、onPause-->onStop-->onDestroy の 3 つのメソッドが次々に実行されます
次に、プロジェクトを少し変更し、クリックして SecondActivity という 2 番目のアクティビティを追加します。 MainActivity 上のボタン SecondActivity を入力すると、以下に示すように、SecondActivity は onPause-->onStop-->onDestroy を実行し、MainActivity は onRestart-->onStart-->onResume を実行します。
onSaveInstanceState と onRestoreInstanceState ここには、上で説明されていない概念があります。 onPause メソッドと onStop メソッドが呼び出された後は、アクティビティ プロセスがいつでも強制終了される可能性があるため、データの損失を避けるために、onPause メソッドでデータ保存操作を実行する必要があります。 onSaveInstanceState メソッドも同様の機能を実行し、データは指定されたバンドルに保存されます。 onSaveInstanceState はアクティビティのライフサイクル関数ではないため、Android API では onPause メソッドでデータを保存することをお勧めします。
処理は行われません。水平画面と垂直画面を切り替えて印刷を見ると、アクティビティが最初に破棄されてから再作成されていることがわかります
上記の問題には、一般的にいくつかの方法があります
http: //download.csdn.net/detail/djstavav/9147793
3、http://developer.android.com/guide/topics/resources/runtime-changes.html
http://www.bkjia.com/PHPjc/1077807.html