1、Android软件体系架构

1.1 Android的软件体系结构


静态视角

1.2 Tasks


Activity代码属于Application,但是Task属于Android操作系统

1.3 怎样查看Tasks


adb shell dumpsys activity activities | sed -En -e ‘/Stack #/p’ -e ‘/Running activities/,/Run #0/p’

每个Task保护哪些Actvity

2、Activity的启动方式

2.1 Task的启动方式(恢复)


2.2 Task启动方式(新建)



1、Scheme
2、第三方应用start

2.3 Laucher启动


Laucher启动
1、Task不存在
2、Task已经存在

3、Activity & Fragment的生命周期

3.1 Activity和Fragment

Fragment是Android3.0后引入的一个新的API,他出现的初衷是为了适应大屏幕的平板电脑, 当然现在他仍然是平板APP UI设计的宠儿,而且我们普通手机开发也会加入这个Fragment, 我们可以把他看成一个小型的Activity,又称Activity片段!

3.2 Activity的生命周期

3.3 相邻状态之间的区别


1.onCreate和onStart之间有什么区别?
(1)可见与不可见的区别。前者不可见,后者可见。(2)执行次数的区别。onCreate方法只在Activity创建时执行一次,而onStart方法在Activity的切换以及按Home键返回桌面再切回应用的过程中被多次调用。因此Bundle数据的恢复在onStart中进行比onCreate中执行更合适。(3)onCreate能做的事onStart其实都能做,但是onstart能做的事onCreate却未必适合做。如前文所说的,setContentView和资源初始化在两者都能做,然而想动画的初始化在onStart中做比较好。
2.onStart方法和onResume方法有什么区别?
(1)是否在前台。onStart方法中Activity可见但不在前台,不可交互,而在onResume中在前台。(2)职责不同,onStart方法中主要还是进行初始化工作,而onResume方法,根据官方的建议,可以做开启动画和独占设备的操作。
3.onPause方法和onStop方法有什么区别?
(1)是否可见。onPause时Activity可见,onStop时Activity不可见,但Activity对象还在内存中。(2)在系统内存不足的时候可能不会执行onStop方法,因此程序状态的保存、独占设备和动画的关闭、以及一些数据的保存最好在onPause中进行,但要注意不能太耗时。
4.onStop方法和onDestroy方法有什么区别?
onStop阶段Activity还没有被销毁,对象还在内存中,此时可以通过切换Activity再次回到该Activity,而onDestroy阶段Acivity被销毁

3.4 onNewIntent的生命周期

1、只对singleTop,singleTask,singleInstance有效,因为standard每次都是新建,所以不存在onNewIntent;
2、只对startActivity有效,对于从Navigation切换回来的恢复无效;

4、Standard等4种启动模式

4.1 Activity启动模式

4.2 standard启动模式

1、standard 默认模式
系统在启动 Activity 的任务中创建 Activity 的新实例并向其传送 Intent。Activity 可以多次实例化,不管这个实例是否已经存在,而每个实例均可属于不同的任务,并且一个任务可以拥有多个实例。这种模式的 Activity 被创建时它的 onCreate、onStart 都会被调用。这是一种典型的多实例实现,一个任务栈中可以有多个实例,每个实例也可以属于不同的任务栈。在这种模式下,谁启动了这个 Activity,那么这个 Activity 就运行在启动它的那个 Activity 所在的栈中。

a、当从非Activity的context启动activity时,需要带new_task的flag;
b、当启动一个带有affinity的activity,如果这个activity已经有实例存在该task,则不会重新创建;
c、如果从应用内启动的standard activity的Affinity就是App默认的Affinity,则会每次新建一个实例;

4.3 singleTop启动模式

一个singleTop Activity 的实例可以无限多,唯一的区别是如果在栈顶已经有一个相同类型的Activity实例,Intent不会再创建一个Activity,而是通过onNewIntent()被发送到现有的Activity。

4.4 singleTask模式

这是一种单实例模式,在这种模式下,只要 Activity 在一个栈中存在,那么多次启动此 Activity 都不会重新创建实例,和 singleTop一样,系统也会回调其 onNewIntent。当一个具有 singleTask 模式的Activity请求启动后,比如 Activity A,系统首先会寻找是否存在 A 想要的任务栈,如果不存在,就重新创建一个任务栈,然后创建 A 的实例后把 A 放到栈中。如果存在 A 所需的任务栈,这时要看 A 是否在栈中有实例存在,如果有实例存在,那么系统就会把 A 调到栈顶并调用它的 onNewIntent 方法,如果实例不存在,就创建 A 的实例并把 A 压入栈中 。

4.5 singleInstance模式

与 singleTask 相同,只是系统不会将任何其他 Activity 启动到包含实例的任务中。该 Activity 始终是其任务唯一仅有的成员;由此 Activity 启动的任何 Activity 均在单独的任务中打开。也就是有此种模式的 Activity 只能单独地位于一个任务栈中

4.6 Intent Activity Flag


只对standard和singleTop有效

5、启动模式应用场景

5.1 启动模式的应用场景

5.2 课程总结

更多相关文章

  1. No.11 使用firewall配置的防火墙策略的生效模式
  2. 你不应该错过的 Android(安卓)全方位面试总结
  3. Zygote家的大儿子 —— SystemServer
  4. 【笔记】Retrofit的使用以及原理
  5. Android(安卓)WebView JS不能调用Java对象的问题
  6. 联系人-选项-账户-进入已添加的账户,勾选联系人,点击选项立即同步,
  7. ConnectivityService分析
  8. Android之Button按钮点击事件的四种方式
  9. android学生管理系统,利用linerLayout,实现xml的读取和写入,以及按

随机推荐

  1. windows android apk,framework 解包,打包
  2. Android中的网络时间同步 !!!!!!!!
  3. 如何唯一的标识一台Android设备?
  4. Unity发布安卓9.0及以上版本不能访问http
  5. Android OpenGL添加纹理
  6. Android中常见的内存溢出错误
  7. Android(安卓)ListView分组布局改进
  8. Flutter的一生
  9. Android计时器Chronometer的使用
  10. 事件机制(2)--Android onTouchEvent, onCli