Activity活动的使用和生命周期

Activity是安卓的四大组件之一,Activity的生命周期也同样重要,这里我就自己总结了一下,学习用的,第一次写,肯定会有不足。

首先是两个界面,一个MainActivity,另一个SecondActivity,现在让第一个Activity跳到第二个,再返回到第一个,看一下生命周期:

onResume可见有交互。

说一下onPause和onStop的区别:
onPause可见无交互。
当系统即将恢复另一个activity的时候,此方法通常用于提交一些未保存的持久性数据,停止动画和一些可能会消耗CPU的东西,它应该尽一切可能快的完成,因为接下来的Activity在onPause()返回之前不会被恢复。
接下来要么运行onResume()方法(如果Activity返回到前台),要么运行onStop()方法(如果Activity变得对用户不可见)。
onStop不可见无交互。
当activity不再对用户可见时调用此方法,这方法可能被调用,因为它即将被销毁,或者因为另外一个Activity(可能是一个已经存在的Activity或者一个新的Activity)已经被恢复然后覆盖了这个activity。
接下来如果这个activity 即将再次与用户交互(我觉得是再次对用户可见的意思),就会调用onRestart()方法,如果这个Activity即将死亡的话,就会调用onDestroy()方法。

首先,onCreate创建第一个Activity——onStart开始第一个Activity——onResume获取第一个界面的用户焦点——开始第二个Avtivity,第一个活动onPause失去焦点——onCreate第二个Activity启动——onStart第二个Activity开始——onResume第二个界面获取焦点——第一个Activity的界面停止onStop——第二个界面暂停onPause——第一个界面重新启动onRestart——第一个界面开始onStart——第一个界面恢复焦点onResume——第二个界面停止onStop——第二个界面被销毁onDestroy。


Activity的启动模式:

Activity一共有四种启动模式:standard、singleTask、singleTop、singleInstance。

standard:这是Activity默认的启动模式,原则很简单,就是每创建一个新的Activity时,都会讲这个Activity放到Task栈的栈顶。

singleTask:前台Task中存在:如果它在位于前台的Task中存在,并且位于这个Task的栈顶,那么就调用onNewIntent()通知一下,而不用重新创建--这一点与singleTop模式类似;

如果存在,但是不在Task的栈顶,就将这个Activity上面别的Activity全部弹出、销毁,把这个Activity的实例放到最上面,再用onNewIntent()通知它一次。

后台Task中存在:如果它在位于后台的Task中存在,就把后台Task放到前台来,然后把它上面存在的别的Activity弹出、销毁。

singleTop:这个启动模式的原则是,当启动这个类型的Activity时,如果这个Acticity有实例在当前的这个Task中存在,并且位于栈顶的时候,那么,就触发Activity的onNewIntent()方法通知一下,而不用重新创建。否则,即使这个Task中有这个实例,如果它不在栈顶,就会重新创建。

使用场景:一个新闻客户端会接收新闻推送,在statusbar上显示已经收到10条推送了。当我们点击第一条的时候,启动一个显示新闻内容的Activity-ContentActivity,当我们点击statusbar上的第二条新闻时,再次启动ContentActivity。如果ContentActivity是standard模式,可以想见,在之前的新闻内容上,又回弹出一个Activity,10条推送点击十次,就会有10个Activity叠在一起。麻烦的是返回时得按10次,而且会占用很多系统资源。如果将ContentActivity指定为singleTop,那么点击后面9条推送时,ContentActivity只会通过onNewIntent()知道有新的调用请求,不必重新创建9个Activity实例过份消耗资源。

singleInstance:总是在新的任务中开启,并且这个新的任务中有且只有这一个实例,也就是说被该实例启动的其他activity会自动运行于另一个任务中。当再次启动该activity的实例时,会重用已存在的任务和实例。并且会调用这个实例的onNewIntent()方法,将Intent实例传递到该实例中。和singleTask相同,同一时刻在系统中只会存在一个这样的Activity实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值