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获取不到任何焦点

Action A Activity B Activity
Open A onCreate()=>onStart()=>onResume() -
Open B onPause()=>B=>onStop() onCreate()=>onStart()=>onResume()
Return A onRestart()=>onStart()=>onResume() onPause()=>A=>onStop()=>onDestroy()

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

Action A Activity B Activity
Open A onCreate()=>onStart()=>onResume() -
Open B onPause()=>B onCreate()=>onStart()=>onResume()
Return A onResume() 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:此方法慎用)

猜你喜欢

转载自blog.csdn.net/hello_12413/article/details/51760327
今日推荐