什麼是Activity,簡單的說:Activity就是佈滿整個窗口或者懸浮於其他窗口上的交互界面。在一個應用程序中通常由多個Activity構成,都會在Manifest.xml中制定一個主Activity,如
下設置
<activity
android:name=".ActionViewTest"
android:label="@string/title_activity_action_view_test">
<!-- android:name=".ActionViewTest表示整個應用程序的主程序的名稱
<intent-filter>意圖過濾器:用於過濾用戶的一些動作和操作
"android.intent.action.MAIN"表示當前程序是否在程序是整個工程的入口程序
category android:name表示決定應用程序是否在程序列表中顯示-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
當程序第一次運行時用戶就會看這個Activity,這個Activity可以通過啓動其他的Activity進行相關的操作。
當啓動其他的Activity時這個當前的這個Activity將會停止,新的Activity將會停止,新的Activity將會壓入棧中,同時獲取 用戶焦點,這是就可在這個Activity上操作了。
我們都知道棧是先進後出的原則,那麼當用戶按Back鍵時,當前的這個Activity銷燬,前一個Activity重新恢復。
我們來看看Activity生命週期的7個方法和3個階段
7個方法如下:
void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onPause()
void onStop()
void onDestroy()
Activity的三個階段:
開始Activity:在這個階段依次執行3個生命週期的方法,分別是onCreare,onStart,onResume方法。
Activity重新獲得焦點:如果Activity重新獲得焦點,會依次執行3個生命週期,分別是onRestart,onStart,onResume
關閉Activity,當Activity被關閉是系統會依次執行3個生命週期,分別是onPause,onStoo,onDestroy
從上圖可以看出有兩層循環,第一層是焦點的獲得與失去循環,onResume()->onPause->onResume()。
第二層是可視與不可視的循環,onStart->onResume->onPause->onStop->onRestart。
具體週期如下:
整個生命週期:onCreat->onDestroy
焦點生命週期:onResume->onPause
可視生命週期:onStart->onStop()
示例源代碼如下:
package com.example.lifedemo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends Activity {
private final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "onCreate is execute");
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.i(TAG, "onStart is execute");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.i(TAG, "onResume is execute");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.i(TAG, "onPause is execute");
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.i(TAG, "onStop is execute");
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.i(TAG, "onDestroy is execute");
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
Log.i(TAG, "onRestart is execute");
}
}
首先運行程序
運行onCreat->onStart->onResume獲得焦點
然後模擬打電話onPause->onStop失去焦點//在兩個步驟之間執行第二個Avtivity的onCreate onStart onResume
同時注意只有第一個Activity被全部遮蓋纔會調用onStop,如果只是調用了一個對話框是不會沒有全部遮蓋就不會調用onStop了。
然後推出打電話狀態onRestart->onStart->onResume重新獲得焦點//開始第二個Activity先執行onPause,在最後會執行第二個Activity的onStop onDestory
最後back鍵onPause->onStop->onDestroy程序結束
onDestory在執行了finish()或系統資源不夠用是會被調用。