Activity的官方API解释
An activity is a single, focused thing that the user can do. Almost all activities interact with the user, so the Activity class takes care of creating a window for you in which you can place your UI with [setContentView(View)]
详细信息参考官方API
![](https://img.haomeiwen.com/i5914881/f421018e88025984.png)
Activity生命周期
onCreate-----------当Activity第一次创建的时候执行
onStart-----------当Activity对用户可见的时候执行
onResume--------当用户获取焦点Activity可以和用户交互的时候执行
onPause---------当用户失去焦点Activity不能喝用户交互的时候执行
onStop-----------当Activity对用户不可见的时候执行
onDestroy--------当Activity销毁的时候执行
![](https://img.haomeiwen.com/i5914881/9f40106a0206b4b0.png)
Activity四种启动模式
在这金三银四的时间里一个哥们忽然一本正经的问我Activity的启动模式和具体的应用模式;我也一想是啊,平是不太注意结果到了 关键的时刻卡壳了,感觉未雨绸缪一下,做个记录:
(一)、基本描述
标准模式:如果在mainfest中不设置就默认standard;standard就是新建一个Activity就在栈中新建一个activity实例;
:栈顶复用模式:与standard相比栈顶复用可以有效减少activity重复创建对资源的消耗,但是这要根据具体情况而定,不能一概而论;
栈内单例模式,栈内只有一个activity实例,栈内已存activity实例,在其他activity中start这个activity,Android直接把这个实例上面其他activity实例踢出栈GC掉;
堆内单例:整个手机操作系统里面只有一个实例存在就是内存单例;
- 在singleTop、singleTask、singleInstance 中如果在应用内存在Activity实例,并且再次发生startActivity(Intent intent)回到Activity后,由于并不是重新创建Activity而是复用栈中的实例,因此Activity再获取焦点后并没调用onCreate、onStart,而是直接调用了
函数;
(二)、Activity四种启动模式常见使用场景
![](https://img.haomeiwen.com/i5914881/2a7ac3d08edaccee.png)
(三)、Intent中标志位设置启动模式
在上文中的四种模式都是在mainfest的xml文件中进行配置的,GoogleAndroid团队同时提供另种级别更高的设置方式,即通过Intent.setFlags(int flags)设置启动模式;
- FLAG_ACTIVITY_CLEAR_TOP : 等同于mainfest中配置的singleTask,没啥好讲的;
- FLAG_ACTIVITY_SINGLE_TOP: 同样等同于mainfest中配置singleTop;
- FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS: 其对应在AndroidManifest中的属性为android:excludeFromRecents=“true”,当用户按了“最近任务列表”时候,该Task不会出现在最近任务列表中,可达到隐藏应用的目的。
- FLAG_ACTIVITY_NO_HISTORY: 对应在AndroidManifest中的属性为:android:noHistory=“true”,这个FLAG启动的Activity,一旦退出,它不会存在于栈中。
- FLAG_ACTIVITY_NEW_TASK: 这个属性需要在被start的目标Activity在AndroidManifest.xml文件配置taskAffinity的值【必须和startActivity发其者Activity的包名不一样,如果是跳转另一个App的话可以taskAffinity可以省略】,则会在新标记的Affinity所存在的taskAffinity中压入这个Activity。
- 个人认为在上述Flag中FLAG_ACTIVITY_NEW_TASK是最为重要的一个flag,同时也需要注意的是网上有很多是瞎说的;而且也是个人唯一一个在实际开发中应用过的属性;先说说个人应用示例:
- 1.在Service中启动Activity;
- 2.App为系统Launcher时,跳转到微信无法退出时用到;
Activity开启页面后,当被开启的页面关闭后,把数据返回给调用者
1,跳转页面时,用这个方法
![](https://img.haomeiwen.com/i5914881/cd78a8bd71c6eb05.png)
2,在被开启的页面上把数据返回给调用者的方法
![](https://img.haomeiwen.com/i5914881/d2b74efb2fd01e29.png)
3,当被开启的页面关闭后,调用者的onActivityResul方法立马执行
调用者获取关闭的页面返回的数据的方法
![](https://img.haomeiwen.com/i5914881/a77847ff57286626.png)
网友评论