Activity的启动模式

来源:互联网 发布:java文件阅读器下载 编辑:程序博客网 时间:2024/06/05 10:52
  • 启动模式介绍、任务栈
    • 1.1 启动模式介绍
    • 1.2 任务栈
  • 四种启动模式
    • 2.1 standard模式
    • 2.1 singleTop模式
    • 2.1 singleTask模式
    • 2.1 singleInstance模式

1.1启动模式介绍

启动模式就是Activity的启动策略,由AndroidManifest.xmlactivity 节点的android:launchMode="singleTask"标签指定。

    <activity            android:name=".Activity"            android:label="@string/app_name"            android:launchMode="singleTask"    </activity>

Activity总共有四种启动模式:

standardsingleTopsingleTasksingleInstance


1.2任务栈

每个应用都有一个任务栈,是用来存放Activity的,Activity启动的先后顺序代表了Activity的出现顺序;比如依次启动:Activity1–>Activity2–>Activity3,则任务栈Activity的存放顺序为:

任务栈 Activity3@1 Activity2@1 Activity1@1

最先启动的Activity被放到任务栈的最底部,Activity1@1表示Activity1这个类序号为1的实例,后面的Activity1@2表示Activity1这个类序号为2的实例,Activity2@1表示Activity2这个类序号为1的实例


2.1 standard模式

每次激活ActivitystartActivity(),都创建Activity实例,并放入任务栈。

依次启动:Activity1–>Activity2–>Activity1,则任务栈Activity的存放顺序为:

任务栈 Activity1@2 Activity2@1 Activity1@1

依次启动:Activity1–>Activity1–>Activity1,则任务栈Activity的存放顺序为:

任务栈 Activity1@3 Activity1@2 Activity1@1


2.2 singleTop模式

如果Activity自己启动自己,即任务栈栈顶就是该Activity,此时则不需要创建新的实例,其余情况都要创建Activity实例。

依次启动:Activity2–>Activity1–>Activity1,则任务栈Activity的存放顺序为:

任务栈 Activity1@2 Activity2@1

依次启动:Activity1–>Activity2–>Activity1,则任务栈Activity的存放顺序为:

任务栈 Activity1@2 Activity2@1 Activity1@1


2.3 singleTask模式

如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity以上的OtherActivity实例都从任务栈里面pop出去。

依次启动:Activity1–>Activity2–>Activity1,则任务栈Activity的存放顺序为:

启动:Activity1–>Activity2

任务栈 Activity2@1 Activity1@1

启动:Activity1–>Activity2–>Activity1,任务栈中已存在Activity1的实例,则popActivity1@1上面的Activity2@1实例

任务栈 Activity1@1

SingTask的应用:

   可以用来退出整个应用。   将主Activity设为SingTask模式,然后在要退出的Activity中转到主Activity,然后重写主Activity的onNewIntent()函数,并在函数中加上一句finish。


2.4 singleInstance模式

如果应用1的任务栈中创建了Activity1实例,如果应用2也要激活Activity1,则不需要创建,两应用共享该Activity实例;

应用1启动:Activity1–>Activity2应用2启动Activity2,则应用2不会创建新的实例,而是直接引用应用1中的实例Activity2@1

应用1 任务栈 应用2 任务栈 Activity2@1 Activity1@1 Activity2@1


退出Activity的方法:

1.SingleTask的方法

上文已经提到,将主Activity设为SingTask模式,然后在要退出的Activity中转到主Activity,然后重写主Activity的onNewIntent()函数,并在函数中加上一句finish。

2.单个Activity结束

1.调用finish()
2.杀死该进程:killprocess(Process.mId)
3.终止正在运行的虚拟机:system.exit()

3.退出整个应用

1.制造抛异常导致整个程序退出
2.将所有的activity放入到一个list中,然后在需要退出的时候,将所有的activity,finish掉
3.通过广播来完成退出功能
通过广播来完成退出功能,具体实现过程是这样的:在每个Activity创建时,在onCreate()方法中给Activity注册一个广播接收器,当要退出app时,发送该广播即可

//在onCreate()方法中注册BroadcastReceiverIntentFilter filter = new IntentFilter();filter.addAction("finish");registerReceiver(mFinishReceiver, filter);
private BroadcastReceiver mFinishReceiver = new BroadcastReceiver() {    @Override    public void onReceive(Context context, Intent intent) {           if("finish".equals(intent.getAction())) {              Log.e("tag", "finishing...");              finish();       }    }};

把上面的代码写在一个基类里面,在需要退出的地方发送广播,每个Activity接收到广播后,就会将自己finish掉。

感谢meizixiong的文章:
http://www.cnblogs.com/meizixiong/archive/2013/07/03/3170591.html

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 快递电话打不通怎么办 淘宝id被监控怎么办 快递扫描漏掉了怎么办 千牛空间不足怎么办 iphone储存将满怎么办 微销通老是请求拒绝怎么办 联璧金融的钱怎么办 店家不给退货怎么办 京东换货不成功怎么办 京东审核关闭怎么办 服装店盘货衣服不对怎么办 盘点衣服少了怎么办 超市盘点少东西怎么办 货到付款买家不收怎么办 快递员忘记收钱怎么办 发货了买家退款怎么办 买家一直不退款怎么办 京东商家退货怎么办 发货后退货邮费怎么办 淘宝货到退款怎么办 淘宝收不到货怎么办 淘宝不处理投诉怎么办 实体店不能退货怎么办 顾客无理由退货怎么办 京东衣服质量问题怎么办 买家退货要运费怎么办 卖家不给退运费怎么办 淘宝申请退款卖家不退怎么办 网购商家报复怎么办 淘宝退货店家不同意怎么办 淘宝退货不同意退款怎么办 运费险没收到怎么办 地税逾期未申报怎么办 转转买家发到付怎么办 捡到苹果手机打不开怎么办 捡到指纹手机打不开怎么办 捡到手机密码打不开怎么办 遇到假苹果售后怎么办 做微商被骗囤货怎么办 代理如果不做了怎么办 微商加盟费不退怎么办