概述
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等等
最后
以上就是喜悦小兔子为你收集整理的Activity生命周期启动流程启动模式的全部内容,希望文章能够帮你解决Activity生命周期启动流程启动模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复