首页 > 学院 > 开发设计 > 正文

第一行代码学习2(5)

2019-11-07 23:30:02
字体:
来源:转载
供稿:网友

Activity的启动模式


Activity的启动模式由四种:standardsingleTopsingleTasksingleInstance。可以在AndroidManifest.xml中给activity标签指定android:launcherMode属性来选择启动模式。

standard是默认的启动方式,所有的启动的activity都只存在一个栈当中,并且遵循先进后出的原则。

<activity android:launcherMode:"standard">//默认存在,可加可不加</activity>

singleTop:当活动的启动模式指定为singleTop,在启动活动时如果发现返回栈顶已经是该活动,则可以直接使用,不会创建新的活动实例。

<activity android:launcherMode:"singleTop"></activity>

但是如果有B活动进入了同一个栈,而B活动又可以重新建立之前的A活动的话,这时候A活动会被新建一个实例,这样也会影响用户的体验。也就是说singleTop可以很好的解决重复创建栈顶活动的问题,但是活动没有处于栈顶的位置还是可能创建多个活动实例。

singleTask:每次启动A活动时系统先会在返回栈中检查是否存在A活动的实例,如果没有发现已经存在则直接使用该实例,并把这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的A活动实例。

<activity android:launcherMode: "singleTask"></activity>

singleInstance:设置了该模式的activity会在每次启动的时候会启用一个新的返回栈来管理该活动,可以实现共享活动实例的问题:

<activity android:launcherMode:"singleInstance"></activity>

知晓当前启动那个活动

主要方法:

getClass().getSimpleName();

实现过程代码: 先创建一个新的BaseActivity,并继承Activity,在onCreate()中写入以下代码:

log.i("TAG", getClass().getSimpleName());

然后把各个activity的的继承关系改为BaseActivity,这样就相当于每个activity在启动的时候走先走父类的onCreate方法,执行打印语句,打印出当前的活动名称。


通过指定方式退出活动


创建一个新的类:

public class ActivityCollection{ public static void addActivity(Activity activity){ activities.add(activity); } public static void removeActivity(Activity activity){ activities.remove(activity); } public static void finishActivity(){ for(Activity activity : activities){ if(!activity.isFinishing()){ activity.finish(); } } }}

在BaseActivity的onCreate、onDestroy方法中调用addActivity、removeActivity的方法,就是在每次启动子活动的时候都可以在List添加Activity元素或者杀死一个Activity,若要在某个特定的活动中通过某个特定的方式杀死一个活动则调用finishActivity方法:

ActivityCollection.finishActivity();

启动活动的小技巧


当一个活动中需要用到一些重要的参数,需要启动活动的时候必须传递进来,那我们最好在需要启动的活动中添加如下代码,方便后来者或自己知道要传入什么类型的参数:

public static void actionActivity(Context context, String data1, String data2){//这里参数不一定是String,根据具体情况而定。 Intent intent = new Intent(context, SecondActivity.class) intent.putExtra("param1", data1); intent.putExtra("param2", data2); context.startActivity(intent);}

在启动需要参数的活动的时候只要调用相应的方法并传入参数即可:

SecondActivity.actionActivity(FristActivity.this, "data1", "data2");
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表