Android Activity的生命週期
轉載地址:http://testerhome.com/topics/2475
今天 閒著沒事,研究了下 Android 中 Activity 的生命週期,目前有所領悟,本次內容主要是以實踐為主,圖文結合哈~
一、android 中的 Activity的活動狀態,主要分為 4中狀態:
1、執行
2、暫停
3、停止
4、銷燬
二、活動的宣告週期
Android 中的Activity 類中共定義了 7個回撥方法
1、onCreate()
2、onStart()
3、onResume()
4、onPause()
5、onStop()
6、onDestroy()
7、onRestart()
三、3中生存週期
以上的7個方法中,除了onRestart()方法,其他的都是兩兩相對應的;
1、完整生命週期
活動在onCreate() 和 onDestroy();
2、可見生存週期
活動在onStart() 和 onStop()
3、前臺生存週期
活動在 onResume() 和 onPause()
四、活動週期示意圖:
五:身臨其境
接下來我麼來實戰一下,需求如下:
需求:
實現一個應用中的從主介面分別跳轉到其他的2個介面
步驟:
1、新建一個專案,命名為ActivityLifeCyle
2、分別建立2個 xml 檔案;normal_activity.xml 、dialog_activity.xml
3、分別建立2個類,NormalActivity.java 、DialogActivity.java
4、在main_activity.xml 檔案新增2個 button
5、在MainActivity 中寫如介面跳轉動作意圖 --》 Intent
6、在AndroidManifest.xml 檔案中 註冊 NormalActivity.java 、DialogActivity.java
主要程式碼如下:
1、MainActivity.java
public class MainActivity extends Activity {
public static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate");
requestWindowFeature (Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
Button startNormalActivity = (Button)findViewById(R.id.bt1);
Button startDialogActivity = (Button)findViewById(R.id.bt2);
startNormalActivity.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO 自動生成的方法存根
Intent intent = new Intent(MainActivity.this,NormalActivity.class);
startActivity(intent);
}
});
startDialogActivity.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO 自動生成的方法存根
Intent intent = new Intent(MainActivity.this,DialogActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onStart() {
// TODO 自動生成的方法存根
super.onStart();
Log.d(TAG, "onStart");
}
@Override
protected void onRestart() {
// TODO 自動生成的方法存根
super.onRestart();
Log.d(TAG, "onRestart");
}
@Override
protected void onResume() {
// TODO 自動生成的方法存根
super.onResume();
Log.d(TAG, "onResume");
}
@Override
protected void onPause() {
// TODO 自動生成的方法存根
super.onPause();
Log.d(TAG, "onPause");
}
@Override
protected void onStop() {
// TODO 自動生成的方法存根
super.onStop();
Log.d(TAG, "onStop");
}
@Override
protected void onDestroy() {
// TODO 自動生成的方法存根
super.onDestroy();
Log.d(TAG, "onDestroy");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
接下來,我們就開始把應用程式部署到我們真機或模擬器上,
我一開是 部署的時候,我們中Logcat 中可以看到如下資訊:
彙總圖:
六:總結
以上就是一個程式的執行週期,每一個動作需要用到的那些方法,當然具體的什麼是 執行、停止、暫停啊,這些原理性的東東,度娘、Google 都可以搜尋的到的,這裡面就沒有詳細的說明,不懂的或者不理解的,自行查詢哈,
本例中,還有個動作沒有演示,就是在MainActivity 介面按Home鍵,此時MainActivity 處於什麼狀態呢?又會呼叫什麼方法~~~~~哈哈,看懂上面的,我就不解釋啦;
大家,可以自己寫寫,或者下載上面的程式碼玩一玩,印象很深刻的哈~~~~~