activity的理解

                                                              Activity简介

activity形态:

 activity一个最大的特点就是拥有多种形态,以形态之间的切换来控制自己的生命周期。

1,Active/Running

 这时候,Activity处于任务栈的栈顶,可见,并可与用户进行交互。

2,Paused

 当Activity失去焦点,被一个新非全屏的Activity或者一个透明的Activity放置在栈顶时,Activity就转化成Paused形态。但它只 是失去了与用户交互的能力,所有状态信息,成员变量都换保存着,只有在系统内存极地的情况下,才会被系统回收掉。(注:此时的Activity是在Back返回栈中,如果点击返回键可以在onResume()方法中修改所有状态信息以及成员变量等等  )

3,stopped

如果一个Activity被另一个Activity完全覆盖,那么Activity就会进入Stopped形态,此时。它不在可见,但却依然保持了所有状态信息和成员变量。

4,KIlled

当Activity被系统回收掉或者Activity

 

activity周期:

activity的生命周期最主要的是3个状态,他们最稳定,其他状态都是过度状态,很快就会结束。

Resumed:

     这个状态就是前面说的Active/Running形态,此时,Activity处于栈顶,处理用户的交互。

Paused:

     当Activity的一部分被挡住的时候进入这个状态,这个状态Activity失去焦点,不会接受用户输入。

Stopped:

     当Activity完全被覆盖时进入这个状态,此时Activity不可见,仅在后台运行。

Activity启动与销毁过程:

     启动:oncreate(),onStart(),onResume()进入Resumed状态

     销毁:系统调用ondestory()使其进入killed状态

注:这个过程中oncreate()创建基本的UI元素,onPause()与onStop()清除Activity的资源,避免浪费。onDestory()中

因为引用会在Activity销毁的时候销毁,而线程不会,所以清除开启的线程。

Activity的暂停与恢复过程:

      当栈顶的Activity部分不可见后,就会导致Activity进入pause形态,此时就会调用onPause()方法,当结束阻塞后、就

会调用onResume()方法来恢复到Resume形态。

注:这个过程中、onPause()释放资源,如Camera、sensor、receivers,而onResume()需要重新初始化在onPause()中释放

的资源。

Activity的停止过程:

     当栈顶的Activity部分不可见的时候,实际上后续有两种可能,从部分不可见到可见是恢复过程,调用的是onResume()、

从部分可见到不可见是停止过程。系统在当前不可见的时候总会调用onPause()方法,当重新回到前台的时候就会调用onStart()

方法。

Activity的重新创建过程:

      如果你的系统长时间处于stopped形态而且此时系统需要更多内存或者系统内存极为紧张时,系统就会回收你的Activity,而此时           系统为了补偿你,会将Activity状态通过onSaveInstanceState()方法保存到bundle对象中,当然你也可以增加键值对存入Bundle对象            以保存这些状态。当你重新创建这些Activity的时候,保存的Bundle对象就会传递到Activity的onRestoreInstanceState()方法与                    Oncreate()方法中,这也就是Oncreate()方法中的参数-------Bundle savedInstanceState的来源。

AndroidMainifest启动方式

standard: 

      这种启动方式每次都会创建新的实例,每次点击standard模式创建Activity后,都会创建新的MainActivity覆盖在原Activity上。

singleTop:

      这种模式启动时,系统首先判断当前栈顶Activity是否是要启动的Activity,如果是则不创建新的Activity而直接引用;如果不是则             创建新的Activity。此模式通常适用于接收到消息后显示的界面,例如QQ接收到消息弹出Activity。

       这种启动模式虽然不回创建新的实例,但是系统任然会Activity启动时调用onNewIntent()方法。

singleTask:

      singleTask与singleTop类似。只不过这次是检测整个栈中是否有启动的Activity,如果存在则将该Activity置于栈顶,并将此                    Activity以上的Activity全部销毁。不过这里指的是在同一个App中启动这个singleTask的Activity,如果是其他程序以singleTask模式              来 启动这个Activity,那么它将创建一个新的任务栈。不过这里有一点需要注意的是,如果启动模式为singleTask的Activity已经在后            台一个任务栈中了,那么启动后后台的这个任务战将一起被切换到前台。

注:使用这个模式创建的Activity不是在新的任务栈中被打开,就是讲已打开的Activity切换到前台,所以这种模式通常可以用来退出            整个应用:将Activity设为singleTask模式,然后再要退出的Activity中转到注Activity,从而将主Activity之上的Activity都清除,然后              重写Activity的onNewIntent()方法,在方法中加上一句finish(),将最后一个Activity结束掉。

singleInstance:

     singleInstance此启动模式和使用的浏览器工作原理类似,在多个程序中访问浏览器时,如果当前浏览器没有打开,则打开浏览              器,否则会在当前打开的浏览器中访问。申明为singleInstance的Activity会出现在一个新的任务栈中,而且该任务栈中只存在这一个            Activity  。

注:如果应用中A的任务栈中创建了MainActivity实例,且启动模式是singleInstance,如果应用B也要激活MainActivity,则不需要创建,两个应用共享该Activity实例。这种模式常用与需要与程序分离的界面.eg:SetupWizard调用的紧急呼叫

           

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值