第一行代码学习2(5)

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");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值