Android Activity 详解

生命周期

这里写图片描述
如上图所示,Activity生命周期很简单共七个生命周期函数,oncreate(),onrestart(),onstart(),onresume(),onpause(),onstop(),ondestroy();
下面举两个例子来说明Activity生命周期函数调用关系。A Activity 打开 B Activity ,B占满屏幕,返回A。A Activity 打开 C Activity,C未占满屏幕,返回A。
(1)、B占满屏幕,A获取不到任何焦点

ActionA ActivityB Activity
Open AonCreate()=>onStart()=>onResume()-
Open BonPause()=>B=>onStop()onCreate()=>onStart()=>onResume()
Return AonRestart()=>onStart()=>onResume()onPause()=>A=>onStop()=>onDestroy()

(2)、B未占满屏幕,A还能获取到焦点

ActionA ActivityB Activity
Open AonCreate()=>onStart()=>onResume()-
Open BonPause()=>BonCreate()=>onStart()=>onResume()
Return AonResume()onPause()=>A=>onStop()=>onDestroy()

启动模式

Activity有四种启动模式,分别是standard,singleTop,singleTask,singleInstance。这四种启动模式将决定启动一系列Activity后,后退栈内的Activity的结构。
1、standard (默认启动模式)
这种启动模式,每启动一个Activity,便将这个Activity实例压入栈位于栈的顶端。
这里写图片描述
2、singleTop
这种模式,如果要启动的Activity实例已经存在于栈的顶端,系统会调用onNewIntent()方法,而不是在实例化一个Activity对象。如果要启动的Activity不在栈顶,则要重新创建。
这里写图片描述
3、singleTask
这种模式,若要启动的Activity在当前栈内,系统会调用onNewIntent()方法,而不是重新创建实例,此Activity上的其他实例都弹出栈,此Activity将位于栈顶。
这里写图片描述
4、singleInstance
这种模式,如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例。
这里写图片描述

关闭多个Activity

一、将Activity启动模式修改为singleTask
将某个Activity启动模式设置为singleTask模式,返回这个页面时,系统会关闭这个Activity之上的所有Activity。
二、程序维护Activity集合
使用ListView或者Stack等,每次打开新的Activity时,将引用存入到这个集合中,需要关闭的时候依次关闭Activity。
三、使用onActivityResult()递归关闭
在onActivityResult中接收上一个Activity的数据,关闭自身,再将数据传递下去。
四、通过BroadcastReceiver,关闭Activity
每个Activity中注册广播接收者,需要关闭应用的时候,发送广播,接收到广播关闭自身。(PS:此方法慎用)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值