一、activity的生命周期
onCreate(),新建一个活动时调用该方法,并把当前活动放入返回栈的栈顶。
onStart(),活动从不可见到可见,出现页面。
onResume(),活动准备好进行交互了。
onPause(),表示当前不能进行交互,系统准备去启动活着恢复另一个活动时,总是先pause当前活动,再去看其他命令。(例如果出现dialog请求,也就是当前页面前悬浮一个小页面的对话框请求,当前页面暂停,不能进行交互,恢复后要回到onResume()方法)
onStop(),当前活动跳转别的活动,当前活动stop,恢复后回到onRestart()方法,再onStart向后推进。
onDestroy(),退出本活动时,活动销毁,出栈。
例:
MainActivity、NormalActivity、DialogActivity(对话型活动)
<activity
android:name=".P2_DialogActivity"
android:theme="@style/Theme.AppCompat.Dialog" />
1.点开主活动MainActivity
MainActivity:onCreate();onStart();onResume();
2.MainActivity跳转NormalActivity
MainActivity:onPause();onStop();
NormalActivity:onCreate();onStart();onResume();
3.NormalActivity返回MainActivity
NormalActivity:onPause();onStop();onDestroy();
MainActivity:onRestart();onStart();onResume();//back不用新建,沿着返回栈返回即可
4.MainActivity对话DialogActivity
MainActivity:onPause();
DialogActivity:onCreate();onStart();onResume();
5.DialogActivity退回MainActivity
DialogActivity:onPause();onStop();onDestroy();
MainActivity:onResume();
6.退出MainActivity
MainActivity:onPause();onStop();onDestroy();
二、activity活动启动模式
standard、singleTop、singleTask、singleInstance
属性在AndroidManifest.xml里修改
<activity
android:name=".P2_LaunchTypeActivity"
android:launchMode="singleTask"
></activity>
1.standard:
默认启动方式,离开本活动创建新活动时本活动入栈顶,新建时不会管栈里有没有本活动,都会新建活动。
例:
Button button_standard=(Button)findViewById(R.id.button_standard); button_standard.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent standrad=new Intent(P2_LaunchTypeActivity.this,P2_LaunchTypeActivity.class);<!--访问当前活动--> startActivity(standrad); } });
点击按钮三四下,还是一样的界面,还是这个活动,但要返回三四下才能彻底退出此活动,说明这里已经不是当时的页面了,而是新建了两三个界面。
注:这里与back跳到另一个会话再返回本活动不一样,intent与back机制不一样,back是直接沿用返回栈,栈顶活动出栈,下一个活动变当前活动,intent根据活动启动模式而看是新建还是去找栈里的某个活动。
2.singleTop:
如果返回栈的栈顶已经是该活动,则可以直接使用它,不用新建。
例:activity1请求activity1,不会新建,因为当前activity1已在栈顶;但如果activity1请求activity2,activity2再请求activity1,因为activity2在栈顶,所以会新建activity1。
3.singleTask:(最常用)
只要栈里任意位置有该活动,则直接使用,并且把它之上的所有其他活动都移出栈外。
例:activity1请求activity2,activity2再请求activity1,回到已有的activity1界面,activity2被destroyed。
4.singleInstance:
可以给该活动单独有一个返回栈,可以多个程序共享该返回栈,共同管理该活动。
不如此的话,本来是每个程序都有自己的返回栈,如果启动该活动,每个都要新建实例。
可通过getTaskId()来看所在栈是否为同一个。