1.android的四种启动模式分别是:standard,singleTop,SingleTask,singleInstance. 我们可以在AndroidMainfest.xml中通过Activity标签指定其启动模式:android:lanunchMode。
2.standard模式
是活动默认的启动模式,该模式,每启动一次都活创建一个活动的实例。
由Activity1跳转到Activity2,Activity2跳转到Activity3,activity3再跳转到activity1.打印出activity1的标示:每一次都是重新创建一个活动实例。这时我们启动了4个活动 实例,我们需要点击四次back键才能退出程序。
3.SingleTop模式:当当前返回栈顶就是该活动时,则不会再重新创建活动实例。
设置启动模式:
<activity android:name=".MainActivity"
android:launchMode="singleTop">
在activity1中点击事件中加入代码:
Intent intent=new Intent(MainActivity.this,MainActivity.class);
startActivity(intent);
我们在OnGeate中的打印的标示,只会打印出一次,再点击跳转后,并没有启动创建activity1的实例。
4.SIngleTask模式:
每次活动启动时,都会在返回栈中检测该活动是否已存在实例,如果存在则会把该实例对象上面所有的活动统统出栈。否则则创建实例对象。
5.SingleInstance模式:
指定为SingleInstance的活动,会启用一个新的返回栈来管理该活动。其解决的主要问题是:当一个活动,允许其他的程序调用时,而每一个应用程序都会有自己的返回栈,同一个活动则会在不同的返回栈中创建新的实例。如果我们设置为singleInstance模式,则会再同一个返回栈中管理该活动,不论那一个程序访问该活动,都会公用一个返回栈,从而解决了共享活动实例的问题。
设置activity2模式为SingleInstance,点击activity1,跳转到activity2,点击activity2,跳转到activity3.
在每一个活动中打印 getTaskId Log.i(TAG, "onCreate:MainActivity1TaskID: "+getTaskId());输出结果为:
02-16 21:45:49.686 28520-28520/myapplication.com.mylunchmode I/MainActivity: onCreate:MainActivity1TaskID: 13 02-16 21:45:51.326 28520-28520/myapplication.com.mylunchmode I/Main2Activity: onCreate:Main2Activity1TaskID: 14 02-16 21:45:55.216 28520-28520/myapplication.com.mylunchmode I/Main3Activity: onCreate:Main3Activity1TaskID: 13
可以看出,SingleInstance模式的activity2和1,3并不在一个返回栈中。
跳转到activity3时,点击back键,这时并不会回到activity2了,而是直接回到了activity1.
6.活动的知晓:
如何判断当前是哪一个活动?
我们可以写一个BaseActivity,继承于AppcompatActivity。并重写onGreate方法,在方法中加入:Logi(“当前activity:”,getClass.getSimpleName).
然后所有的activity继承BaseActivity,那么就可以打印出当前activity的名称了。
7.活动的管理:
我们可以创建一个活动管理器:
class ActivityCollector{
public static List<actiVity>activitys=new ArrayList<>();
public static void addActivity(Activity activity){
activitys.add(activity);
}
public static void removeActivity(Activity activity){
activitys.remove(activity);
}
public static void finishAll(){
for(Activity activity:activitys){
if(!activity.isFinishing){
activity.finish();
}
}
}
}
然后我们在BaseActivity中的OnGreate中加入:ActivityCollector.addActivity(this);在onDestroy中加入ActivityCollector.reomveActivity(this);
所有的活动继承BaseActivity即可,当需要在某处退出程序时,可以使用ActivityCollector.finishAll();
8:启动一个活动最佳的写法
如果需要启动activity2:则可以在mianactivity2中加入方法:
参数为:Context,传入参数1,传入参数2
public static void actionStart(Context context, String data1, String data2){
Intent intent=new Intent(context,Main2Activity.class);
intent.putExtra("param1",data1);
intent.putExtra("param2",data2);
context.startActivity(intent);
}
在activity1中只需要写:Main2Activity.actionStart(MainActivity.this,"数据1","数据2");即可跳转到mainacitivity2,写法简单,便于理解。
原文:http://www.cnblogs.com/galibujianbusana/p/6407681.html