安卓开发艺术探索笔记第一章
来源:互联网 发布:换手机登陆淘宝账号 编辑:程序博客网 时间:2024/05/16 19:25
1 Activity的生命周期全面分析
onPause必须先执行完,新Activity的onResume才会执行,所以onPause不能执行耗时操作。
如果新Activity采用了透明主题,那么当前Activity不会回调onStop;
onSaveInstanceState只会在Activity被异常终止的情况下才会调用,时间是在onStop之前,可能在onPause之前,也可能之后。
onRestoreInstanceState在onStart之后,
指定configChanges可以阻止系统匹配改变导致Activity重建;常用的locale,oretion,keybordhidden,screenSize(API>13);
2 Activity的LaunchMode
standard:标准模式,谁启动就在谁的栈中,Application,Context无法启动该模式,因为没有所谓的任务栈,解决方式为FLAG_ACTIVITY_NEW_TASK标志位。
singleTop:栈顶复用模式,如果位于栈顶,就不创建新实例,onNewIntemt被调用。
应用场景:推送消息,如果当前位于消息详情界面,从通知点击进入,只会创建一个实例。
登录场景,点击按钮登录,可能网络延迟,重复点击,就会显示两个登录界面。
singleTask: 栈内复用模式,此任务栈中只有一个实例,如果Activity A不在栈顶,且存在A的实例,会销毁A上面所有的
Activity,暴露出Activity A。
应用场景:
作用:程序的入口
做浏览器,微博之类的应用:
比如其他App需要打开我们的浏览器页面,
就可以设置 浏览器页面启动模式为singleTask模式,保证它只有一个实例,
节约内存同时按下返回键后的感官也更顺畅。
但是需要注意:
提供给人调用的页面最好是栈底元素,因为如果自己的客户端正在运行状态,按下home键后台挂起,此时如果其他应用(QQ)调自己的客户端的主页面,那么按下回退键
,页面都会停留在自己的客户端,(因为自己的Activity不为空),这明显不符合逻辑的。。。
singleInstance:单实例模式,只有一个实例,并且这个实例独立运行在activity任务栈中,这个task中只有这个实例,不允许有别的activity存在。
应用场景:拨打电话界面,我们app要调用拨打电话,发现系统应用已启动并单独存在,此时app就不需要重新创建,而是直接复用电话界面。
3 横竖屏切换生命周期
1 不设置Activity的android:configChanges时,切横屏会调用一次,切竖屏会执行两次。
2 设置Activity的android:configChanges="oriention"时,切屏还是会调用,切横竖只会执行一次。
3 设置Activity的android:configChanges="oriention"|keybordHidden,切屏不会调用各个生命周期,只会执行onConfiguartionChanges方法。
但是自从安卓3.2也就是api 13开始。还是会调用生命周期,这是因为screenSize也跟着屏幕的横竖切换而改变,所以在清单文件下,
MiniSdkVersion和TargetVersion属性大于13的情况下,如果你还想阻止程序在运行是重新加载Activity,还必须加一个属性ScreenSize。
4 安卓弹出dialog时activity的生命周期处于什么状态?
如果是当前activity弹出dialog,则不会执行activity任何方法,只有其他activity弹出了dialog或者挡住了当前的activity才会执行onPause方法。
5 Activity之间跳转的生命周期
A 到B onPause onCreate onStart onResume onStop
在B界面点击back键回到A onPause onRestart onResume onStop onDestory
在A界面按Home键回到桌面 onPause onStop
再次点击进入A界面 onRestart onStart onResume 。
6 简述Activity启动流程。
Activity启动源码相当复杂,涉及Instrumention,ActivityThread和ActivityManagerService(简称AMS).简单理解,启动Activity的请求会由
Instrumention来处理,然后它通过Binder向AMS发出请求,AMS内部维护着一个ActivityStack并负责栈内的Activity的状态同步,
AMS通过ActivityThread去同步Activity的状态从而完成生命周期的方法的调用。
- 安卓开发艺术探索笔记第一章
- 安卓开发艺术探索笔记知识点
- 安卓开发艺术探索 笔记1
- Android开发艺术探索学习笔记 第一章
- Android开发艺术探索笔记 第一章
- android开发艺术探索第一章笔记
- 《Android开发艺术探索》第一章笔记
- android开发艺术探索 第一章笔记
- Android开发艺术探索笔记 第一章Activity
- Android开发艺术探索第一章笔记
- 安卓开发艺术探索
- Android 开发艺术探索 第一章
- android开发艺术探索 第一章
- Android学习笔记 - 《Android开发艺术探索》第一章
- 【安卓开发艺术探索】第11章 线程线程池 笔记
- 【安卓开发艺术探索】第15章 性能优化、内存泄漏 笔记
- 【安卓开发艺术探索】第10章 消息机制Handler 笔记
- 【安卓开发艺术探索】第2章 进程线程通信与同步 笔记
- POJ 2777 Count Color(线段树)
- 面试题3
- 基于Linux系统的TCP协议的即时通信系统
- AIM Tech Round 4 (Div. 2) C
- matlab2c使用c++实现matlab函数系列教程-flipud函数
- 安卓开发艺术探索笔记第一章
- 区块链3.0(二):超越货币、经济和市场的效率和协作应用
- Neo4J CQL -(19)- 字符串函数
- JQuery自定义命名空间
- hdoj 2588 GCD
- React-Native学习总结
- Android攻城狮的第二门课(第1季)第8章 Fragment基础概述
- 区块链2.0(二):区块链在金融服务领域的运用案例
- C和C++中struct和typedef struct的分析