提要:终于有时间着手阅读这本书啦,良心之作,必须好好研究下,于是决心做起读书笔记,一些个人的见解,希望帮助到其他小白理解的同时自己也能坚持续更下去,坚持,难能可贵,一起加油啦~
第一章 - Activity生命周期和启动模式
1.1 - 生命周期的全面分析
重点 - 生命周期变化、异常结束与正常结束
1、回想这几种情况,生命周期如何?
onCreate 初始化、加载布局资源、加载所需数据
onStart 后台可见,但看不到,不可交互
onResume 前台可见
onPause 一般onStop会紧接着调用,极端情况,快速返回原本activity、,onStop就不掉用了,直接可以onResume
onStop 不可见时候调用,返回时候onRestart、onStart、onResume- 可轻度回收资源
onDestory 销毁 - 最终回收资源
2、 第一次启动然后正常结束(csr psd)、----括号里面偷懒用了简写(onCreate、onStart。。。)~
打开新的activity或者home键返回桌面(ps csr)、、
再次会到原activity(rsr psd)
3、onCreate与 onDestory配对
onStart 与onStop配对(是否位于后台的角度来调用)
onResume 与onPause配对(是否位于前台的角度来调用)
4、异常结束?
onSaveInstanceState来保存当前状态(onStop之前调用,与onPause比较就比较不确定)
onRestoreInstanceState来恢复当前状态(onStart之后调用)
5、阻止系统重新创建Activity。AndroidMenifest.xml里Activity标签加入configChanges属性(例如android:configChanges = "orientation" 防止屏幕旋转时候重新加载)
P14 有该属性各种项目和含义
另(拓展):!设置了android:configChanges 属性后,原本需要重新创建时候,会直接调用onCreate方法中的onConfigurationChanged方法,而不会重新执行onCreate方法
6、如果后台工作不在四大组件而独立运行与后台,很容易被杀死。建议将后台工作放入Service中保证进程有一定优先级
1.2 - Activity启动模式
重点 - 启动模式、标志位
1、四种启动模式(AndroidMenifest里面Activity属性可设置 lanuchMode=“singleTask”)
standard、 标准模式
①系统默认启动模式
②不论存在与否,都会重新创建一个新的实例
③多实例实现,谁启动了这个Activity、那么这个Activity就运行在启动它那个Activity所在栈
singleTop、栈顶复用模式(运用:让后台运行的Activity回到前台并传递一些数据)
①判断需要启动的Activity是否为任务栈栈顶 ,如果是,则不会重新创建,如果不是,则会重新创建
②注意、不重新创建时候,该Activity的 onNewIntent(Intent intent) 方法会被回调,通过该方法的参数,可以取出当前请求的信息;
第一次启动时候:onCreate()---->onStart()---->onResume()
再次启动时候:onNewIntent()---->onResart()------>onStart()----->onResume()
③注意、系统可能会杀死该Activity,杀死之后,启动情况与第一次启动相同,所以有必要在onCreate与onNewIntent方法中调用同一个处理数据的方法
另(拓展):!onNewIntent调用时机:
http://www.cnblogs.com/zenfly/archive/2012/02/10/2345196.html
singleTask、栈内复用模式 - 单实例模式?
①判断Activity所需任务栈内是否已经存在,如果存在,就把该Activity切换到栈顶(会导致在它之上的都会出栈)
②如果所需任务栈都不存在,就会先创建任务栈再创建该Activity
③可以理解为 顶置Activity+singleTop 的模式
第一次模式:onCreate()---->onStart()---->onResume()
再次启动时候:顶置Activity后,onNewIntent()---->onResart()------>onStart()----->onResume()
singleInstance、单实例模式 - 加强的singleTask模式
①拥有singleTask的所有特性之外,此模式Activity只能单独地位于一个新的任务栈中
②也就是,Activity启动之后,就会独自在一个新的任务栈中,下次肯定不会重新创建该Activity,除非被系统杀死
第一次模式:创建一个新栈并入栈、onCreate()---->onStart()---->onResume()
再次启动时候:onNewIntent()---->onResart()------>onStart()----->onResume()
2、Activity所需任务栈 - 与参数TaskAffinity(译为:任务相关性)
①该参数标识了一个Activity所需要的任务栈的名字(默认情况下,任务栈名字为应用的包名),当然也可以为每个Activity单独指定TaskAffinity属性。
②任务栈分为:前台任务栈、后台任务栈(该栈内Activity位于暂停状态,用户可以通过切换将其调到前台)
注意两种情况:
①TaskAffinity与singleTask启动模式配对使用
TaskAffinity是具有该模式的Activity的目前任务栈的名字,待启动的Activity会运行在名字与TaskAffinity相同的任务栈
②TaskAffinity与allowTaskReparenting结合
A应用中打开、B应用中的、Activity C ,那么C会存在于A应用的任务栈中,此时Home返回桌面,点击应用B,C会被转移到B应用的任务栈中
3、两种指定启动模式的方式
①AndroidMenifest的activity标签中 android:launchMode
②Intent中设置intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
区别:第②种方式优先级要高于第①种方式;
第①种方式无法为Activity设定FLAG_ACTIVITY_CLEAR_TOP,第②种方式无法为Activity指定singleInstance
4、标记位Flags
P27
使用标记位时候,要注意有些标记位是系统内部使用的,应用程序不需要手动去设置这些标记位。
5、IntentFilter匹配规则
显式调用:
Intent intent=new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
隐式调用:
需要添加过滤器intentfilter
Intent intent=new Intent("com.example.android.tst.SecondActivity");
startActivity(intent);
activity标签里
<intent-filter>标签可以有多个,只要完全匹配其中一个就可以
①action(至少有一个) 必须和过滤规则中的其中一个相同 区分大小写;
②category(可以没有、可以多个)intent中可以不存在category,系统会默认加上一个android.intent.category.DEAFAULT,但如果存在就必须匹配其中一个;
③data()data由两部分组成,mimeType(媒体类型)和URI,要求和action相似。如果没有指定URI,URI但默认值为content和file(schema);
本文详细解读了Android Activity的生命周期管理及四种启动模式,包括标准模式、栈顶复用模式、栈内复用模式和单实例模式,同时讨论了Activity任务栈与TaskAffinity参数的作用,以及IntentFilter匹配规则的使用。
1169

被折叠的 条评论
为什么被折叠?



