博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓系列六(Activity的启动模式以及生命周期)
阅读量:6214 次
发布时间:2019-06-21

本文共 1218 字,大约阅读时间需要 4 分钟。

hot3.png

一、什么是Activity?

    简单的说:Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面。在一个应用程序中通常由多个Activity构成,都会在Manifest.xml中指定一个主的Activity,如下设置

<actionandroid:name="android.intent.action.MAIN" />

当程序第一次运行时用户就会看这个Activity,这个Activity可以通过启动其他的Activity进行相关操作。当启动其他的Activity时这个当前的这个Activity将会停止,新的Activity将会压入栈中,同时获取用户焦点,这时就可在这个Activity上操作了。都知道栈是先进后出的原则,那么当用户按Back键时,当前的这个Activity销毁,前一个Activity重新恢复。

二、Activity生命周期

看下图:

三、启动模式

Android为我们定义了四种加载模式,分别是:standard、singleTop、singleTask和singleInstance。

 

standard加载模式下,当一个Task请求加载一个Activity时,该Task直接实例化这个Activity,并把它放到栈顶,不管之前栈中是否存在该Activity的实例。

 

当activity被设置为singleTop的加载模式时,当一个Task请求加载一个Activity时,如果该Task对应的栈的栈顶就是一个Activity的实例,那么,它便不会重新创建,而是调用onNewIntent。如果该Task对应的栈中Activity的实例存在,但不是在顶部,那么该Activity依然要重新创建。简单的说就是获得焦点的Activity(当前的Activity)不能再激活一个自己的实例呗。singleTop模式下的Activity可以被实例化多次,但是不可以多个相同的Activity的实例重叠。

 

singleTask加载模式时,当一个Task请求加载一个Activity时,如果该Task对应的栈中有一个Activity的实例,那么它便不会重新创建。如果已经实例化,会将Task中其上的Activity实例销毁后,调用onNewIntent。一句话,singleTask模式下的Activity,在自己的Task里只有一个实例,并且启动时不允许其他Activity凌驾于自己之上

 

在singleInstance这个模式下,当一个Task请求加载一个Activity时,如果所有Task的栈中有一个Activity的实例,那么,它便不会重新创建。如果所有Task的栈中没有一个Activity的实例,那么该Activity的实例被创建,并独占一个新的task,其它activity不能存在这个task里。

转载于:https://my.oschina.net/zhengweishan/blog/375942

你可能感兴趣的文章
她真的被伤得很深
查看>>
怎么直接下载niconico的视频文件 (伪)(利用curllib)
查看>>
Myeclipse代码提示及如何设置自动提示
查看>>
[置顶] Hibernate4实战 之第五部分:Hibernate的事务和并发
查看>>
Python实现经典查找算法
查看>>
Linux学习---Day04
查看>>
PHP 利用fsockopen抓取页面后对内容做解析
查看>>
人之所以幸福,是因为相信幸福。
查看>>
Web前端研发工程师编程能力飞升之路
查看>>
C语言的谜题
查看>>
ubuntu server sudo出现sudo:must be setuid root 完美解决办法
查看>>
我的友情链接
查看>>
Cocos2d-html5循序渐进(1)-开发环境配置
查看>>
CP大于指定大小的文件到指定位置
查看>>
.net mvc Html.DropDownListFor 设置默认值无效
查看>>
部署RODC和RODNS加强分支办公处的信息和网络安全
查看>>
《Thinking in Java》笔记
查看>>
django开发环境部署(四)——uwsgi,nginx
查看>>
斯坦福NLP笔记3 —— Word tokenization
查看>>
leetcode----Longest Substring Without Repeating Characters
查看>>