Android基础篇——Activity

来源:互联网 发布:软件系统体系结构设计 编辑:程序博客网 时间:2024/06/07 02:52
          这是写的第一篇博客,可能是一时兴起,就突然想用文字的形式记录一下,就选择先写一篇Android开发中最常用的Activity,话不多数,进入正题......
          要说Activity就要在生命周期开始说起,这里贴一张图片图片,简单明了
从这张图我们可以看到Activity 生命周期分为onCreate()  , onStart()  , onResume()  , onPause()  , onStop() , onDestroy()  , 还有 onRestart() .
现在就来介绍一下生命周期都是在什么情况下执行
onCreate():Activity生命周期的第一个方法,执行这个方法的时候说明Activity正在被创建,onCreate()方法里可以做一些初始化的工作,例如setContentView(),
                  还有初始化Activity所需要的数据
onStart():当onStart()执行时表示Activity正在被启动,这个时候Activity的对象已经存在,但是前台还没有界面出现,还无法与用户交互
onResume():执行这个方法的时候说明Activity已经可见了,并且已经出现在前台,可以与用户进行交互
onPause();执行这个方法的时候说明Activity 正在停止,正常情况下会紧跟着执行onStop()方法,但是我们看图片发现如果在onPause() 方法执行后然后回到当前Activity
                  的时候会执行onResume()方法,这种情况属于极限情况,很难重现。我们一般在onPause()方法里面做一些停止动画等耗时的操作,以为只有在onPause()方法
                  执行完之后下一个Activity的才会启动,如果在onPause()里面做一些耗时的操作的,会影响到下一个Activity的启动
onStop():这个方法表示Activity正在停止,可以做一点稍微耗时额操作,但也别太耗时。这时我们看图片。
               图片上表示了两个状态 先说App Process killed 很明显这是说当引用Activity被杀死的时候后要在在再回到当前的Activity,
               他会从哦呢onCreate()方法可是执行,再来看User navigates to the Activity 当用户返回当前Activity时会执行onRestart()方法
onDestroy():这个方法时Activity生命周期的最后一个回调,他表示Activity真在被销毁,在这里我们可以做一些回收工作或释放最终资源
onRestart():这个方法前面有说,表示Activity真在重新启动,一般情况是当前Activity从不可见到可见状态时onRestart()会被调用
Activity生命周期方法就是这些,我们只用很好的了解生命周期才能在android开发中更好的利用他们来完成我们的需求,生命周期各种状态下的执行就不一一说明了,有兴趣可以自己去试一下,毕竟动手才是硬道理。
        说完生命周期,就不得不说Activity 的启动模式了(launchMode),Activity启动模式分为四种分别是,standard(默认模式),singleTop,singleTask,singleInsceofe
每个Activity的启动模式需要在功能清单文件中指定 如下图:

在这张图上可以看到LoginActivity设置了singleTask启动模式,如果不设置LaunchMode默认的启动模式是standard
下面说一下四种启动模式的区别跟特点吧
standard(默认模式):默认模式,可以不在功能清单设置,这种模式下的Activity,每次启动都会在栈里创建一个新的实例
singleTop:设置singleTop 模式的Activity,启动时如果栈顶是当前Activity 的实例则不创建,如果当前Activity实例不处于栈顶,则在栈顶创建一个新的实例
singleTask:设置singleTask模式的Activity,栈里只可以有一个Activity的实例存在,如果当前Activity不存在则创建,若存在,则会把栈中再其之上的的其他Activity;Destory掉并调用它的onNewIntent()方法
如果当前Activity不存在
singleInsceofe:这个启动模式就好玩了,设置了该启动的Activity,如果不存在,就会先创建一个新的栈,栈里面只能有当前Activity的实例,如果存在
则直接调用已经存在的Activity,不管是哪个应用程序来访问这个Activity,都共用的同一个,解决了共享活动实例的问题
这样说有太枯燥,也有点抽象,还是画个图吧;

standard模式:
Activity1为standard模式,通过图片我们可以看到无论Activity1在返回栈的什么那个位置,只要是启动该Activity就会创建一个新的实例,返回时也是逐个出栈


singleTop模式:
通过下图我们可以看到,是不是感觉跟standard差不多,其实他们还是有差别的
设置了singleTop模式的Activity1,当他不处于栈顶的时候,他会在栈顶创建一个新的实例,当他处于栈顶的时候则不会再创建新的实例


singleTask模式:
如下图所示:Activity2设置为singleTask模式,要启动三个Activity,当栈里面没有Activity2的实例是会创建一个Activity2的实例,如图一所示,然后依次创建Activity3,当栈中已经存在Activity2 的实例且不是处于栈顶,位于Activity2上面的Activity3会出栈 Destroy掉,Activity2处于栈顶,如图二所示

singleInsceofe模式:
Activity2设置为singleInsceofe模式
如图所示,返回栈1中的Activity1中启动Activity2,会先创建一个栈(返回栈2)来存放Activity2,这个返回栈只可以有一个实例,
所以在Activity2中创建的Activity3,还是会创建在返回栈1中,如下图所示,Activity实例出栈的时候,Activity3先返回,然后是Activity1,最后是Activity2


原创粉丝点击