Android -- Activity的生命周期,状态保存与恢复,Activity四种启动模式 Standard, SingleTop,SingleTask,SingleInstance


1. 示例图


一个activity状态保存, onSaveInstanceState  --> onCreate , 状态保存与恢复


这七个方法定义了Activity的完整生命周期。实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环:

 Activity 完整生命周期 自第一次调用 onCreate() 开始,直至调用 onDestroy() 为止。 Activity onCreate() 中设置所有“全局”状态以完成初始化,而在 onDestroy() 中释放所有系统资源。例如,如果 Activity 有一个线程在后台运行从网络下载数据,它会在+ onCreate() 创建线程,而在 onDestroy() 销毁线程。
 Activity 可视生命周期 onStart() 调用开始直到相应的 onStop() 调用结束。在此期间,用户可以在屏幕上看到 Activity ,尽管它也许并不是位于前台或者也不与用户进行交互。在这两个方法之间,我们可以保留用来向用户显示这个 Activity 所需的资源。例如,当用户不再看见我们显示的内容时,我们可以在 onStart() 中注册一个 BroadcastReceiver 来监控会影响 UI 的变化,而在 onStop() 中来注消。 onStart() onStop() 方法可以随着应用程序是否为用户可见而被多次调用。
 Activity 前台生命周期 onResume() 调用起,至相应的 onPause() 调用为止。在此期间, Activity 位于前台最上面并与用户进行交互。 Activity 会经常在暂停和恢复之间进行状态转换 —— 例如当设备转入休眠状态或者有新的 Activity 启动时,将调用 onPause() 方法。当 Activity 获得结果或者接收到新的 Intent 时会调用 onResume() 方法。关于前台生命周期循环的例子请见P PT 下方备注栏。
 

2. 四种启动模式

http://www.2cto.com/kf/201309/246498.html

一:Standard的启动模式

 Standard是默认的模式每开始一个activity,就会在栈中加一个activity,相同的也会加,所以加多少个,就要按多少次返回键才能回到最初的界面

 

二:singleTop的启动模式

1.清单配置:

       <activity 

            android:name="com.itcode.taskstack.SecondActivity" 

            android:label="@string/_second" 

            android:launchMode="singleTop"> 

</activity> 

    Singletop:如果任务栈的栈顶已经存在这个activity的实例, 不会创建新的activity,而是利用旧的activity实例 调用 旧的activity的onNewIntent()方法

2.作用:

避免一个糟糕的用户体验,如果这个界面已经被打开且在任务栈的栈顶,就不会重复开启了

 

三:Singletask的启动模式:

1.Androidfest配置:

        <activity  

            android:name="com.itcode.taskstack.SecondActivity"

            android:label="@string/_second"

            android:launchMode="singleTask">

     </activity>

2.作用:

singletask的启动模式:在任务栈里面只允许一个实例存在,假如02是singletask,栈里是:01 02 01 03 若此时开启02,则会复用这个已经存在的activity,并且把当前activity上面其他的activity从任务栈里清空!


3.应用场景:

浏览器:底层使用的是webkit c 内核,初始化一次需要申请很多的内存资源,占用cpu时间所以使用singletask,保证在任务栈里只会有一个实例存在

 

四:singleInstance的启动模式(相当于单例):

 1.Androidfest的配置:

 <activity 

            android:name="com.itcode.taskstack.SecondActivity" 

            android:label="@string/_second" 

            android:launchMode="singleInstance"> 

        </activity> 

2.特点:

singleInstance的启动模式更加极端, 开启新的activity,会给自己创建一个单独的任务栈 

离站的时候先退当前的Task , 再退另外的Task.

 3.应用场景:

在整个手机操作系统里面只会有一个该activity的实例存在, 所以多个应用程序共享这个activity的实例,有线程安全问题!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值