Activity
1、activity啟動流程:
————》點選App的icon
————》在Laucher的onClick方法中,調用startActivitySafely方法(Laucher繼承于Activity)
————》startActivitySafely方法中攜帶一個intent,intent中包含着我們在AndroidManifest.xml注冊的
action ="android.intent.action.Main",category="android.intent.category.Launcher",該方法中intent添加FLAG,
Intent.FLAG_ACTIVITY_NEW_TASK表示要在一個新的Task中啟動這個Activity
————》 Activity.startActivity
————》Activity.startActivityForResult(intent, -1),傳-1表示不需要傳回
public void startActivityForResult(Intent intent, int requestCode) {
if (mParent == null) {
Instrumentation.ActivityResult ar =
mInstrumentation.execStartActivity(
this, mMainThread.getApplicationThread(), mToken, this,
intent, requestCode);
......
} else {
......
}
}
Intrumentation是Activity的一個成員變量,它用來監控應用程式和系統的互動;
mMainThread是ActivityThread類型的成員變量,它是一個Binder對象,ActivityManagerService會使用它來和ActivityThread來進
行程序間通信;
mToken也是Activity類的成員變量,它是一個Binder對象的遠端接口。
————》Instrumentation.execStartActivity
public ActivityResult execStartActivity(
Context who, IBinder contextThread, IBinder token, Activity target,
Intent intent, int requestCode) {
IApplicationThread whoThread = (IApplicationThread) contextThread;
if (mActivityMonitors != null) {
......
}
try {
int result = ActivityManagerNative.getDefault()
.startActivity(whoThread, intent,
intent.resolveTypeIfNeeded(who.getContentResolver()),
null, 0, token, target != null ? target.mEmbeddedID : null,
requestCode, false, false);
......
} catch (RemoteException e) {
}
return null;
}
ActivityManagerNative.getDefault傳回ActivityManagerService(Binder機制的核心)的遠端接口ActivityManagerProxy。
————》 ActivityManagerProxy.startActivity
————》ActivityManagerService.startActivity
2、生命周期
生命周期方法:
oncreate()——>onstart()——>onResume()——>onRestart()——>onPause()——>onStop()——>onDestory()
四種狀态:
————》running:目前顯示在螢幕的activity(位于任務棧的頂部),使用者可見狀态;
starting——>running執行方法:oncreate()——>onstart()——>onResume()
————》paused:依舊在使用者可見狀态,但是界面焦點已經失去,此Activity無法與使用者進行互動;
running——>paused執行方法:onPause()
Paused ——>Running執行方法:onResume()
————》stopped:使用者看不到目前界面,也無法與使用者進行互動 完全被覆寫;
paused——>stopped執行方法:onStop()
————》killed:目前界面被銷毀,等待這系統被回收。
stopped——>killed執行的方法:onDestroy()
A Activity跳轉B Activity之後finish():
A執行生命周期:onCreate()——>onStart()——>onResume()——>onPouse()
B執行生命周期:onCreate()——>onStart()——>onResume()
A執行生命周期:onStop()——>onDestory()
A Activity彈出B Activity(dialog形式)
A執行生命周期:onCreate()——>onStart()——>onResume()
B執行生命周期:onCreate()——>onStart()——>onResume()
3、啟動模式
Actiivty啟動四大模式:
standard:标準預設模式,需要一個建立一個,正常啟動;
SingleTop:棧頂複用模式,需要的Activity在棧頂直接複用,如果不存在或者不在棧頂,建立一個。使用場景:登入,通知欄等;
SingleTask:棧内複用模式,需要的Activiy在棧記憶體在銷毀其棧頂activity,自己稱為棧頂複用,調用其onNewIntent方法。使用場景:程式主入口MainActivity,Webview頁面等;
SingleInstance:全局單例模式,此模式的Activity單獨位于一個任務棧中。使用場景:系統應用如來電提醒、系統Laucher等等