Android开发艺术探索第一章笔记
来源:互联网 发布:厦门三套网络电视台 编辑:程序博客网 时间:2024/05/23 11:32
Android开发艺术探索第一章笔记
1.1 Activity的生命周期
1.1.1 Activity的调用流程
对于一个ActivityA调用到ActivityB的正常流程,ActivityB的onResume会等待ActivityA的oPause执行后才会继续。这也意味着,尽量把操作放到onStop而不是onPause中执行
1.1.2 Activity的数据存储与恢复
对于Activity异常终止的情况,会调用onSaveInstanceState与onRestoreInstanceState方法。其中onSaveInstanceState方法会在onStop之前调用,可能在onPause之前,也可能在onPause之后。而onRestoreInstanceState则是在onStart之后调用
正常情况下,是不会调用这两个方法的。而异常情况也包括系统配置发生改变的时候(如旋转屏幕的时候)。
若想要在系统配置未改变的情况下不重启Activity,则需要在AndroidMenifest中为Activity加android:configChanges的属性,如
android:configChanges="orientation|keyboardHidden"
该选项会导致发生屏幕旋转或者键盘的可访问性发生了改变(如用户调出了键盘)时,系统不重启Activity,而是去调用Activity里的onConfigurationChanged方法。
1.2 Activity的启动模式
1.2.1 LaunchMode
有四种launchmode:standard、singleTop、singleTask、singleInstance
若Activity不会被重新创建,则都会调用到onNewIntent之后,再调用onResume
singleTask自带clearTop的效果,singleInstance相当于在singleTask的基础上,新增了该activity只单独存在于一个栈中
TaskAffinity属性,也是在Androidmanifest中的activity声明的,用于标识了一个Activity所需的任务栈的名字,默认情况下为自己的包名
allowTaskReparenting属性,用于表示该activity是否可以变换任务栈,如应用A启动到应用B中的ActivityC,且应用B的ActivityC中声明了allowTaskReparenting为true。启动了ActivityC后,此时它们会在同一个任务栈中。此时按Home键回到首页之后,再进入应用B,此时应该会有一个新的任务栈,C从应用A的栈中移到了应用B的栈中
有两种方式声明launchMode,分别是在AndroidMenifest中声明(无法设置clearTop),和在intent中addFlags(无法设置成singleInstance),两种同时存在时,intent的方法会优先级高于AndroidMenifest
1.2.2 Activity的Flags
- FLAG_ACTIVITY_NEW_TASK对应singleTASK
- FLAG_ACTIVITY_SINGLE_TOP对应singleTop
- FLAG_ACTIVITY_CLEAR_TOP 注意连同Activity自己也会出栈,并重新创建自己,因此加上singleTop属性就可以不会让自己也出栈
- FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 在xml中也有同样的属性android:excludeFromRecents=”true”,不会出现在历史的Activity列表中(暂时没有碰到过)
1.3 IntentFilter的匹配规则
在隐式调用中设置的过滤信息,Intent调用时,需要同时匹配其中的action、category、data才能够启动该activity
同时一个Activity可以同时有多个IntentFilter,只需要匹配上一个IntentFilter即可
其中action只需要匹配上一种即可,category则是需要Intent中的所有category都在IntentFilter中存在才可以,且startActivity或者startActivityForResult调用时,默认Intent都会有android.intent.category.DEFAULT这个category
而data的匹配方式则与action类似
data由mimeType和URI组成,mimeType是媒体类型,如“video/*”或者”image/jpeg”
而URI结构如下:
content://com.example.project:200/folder/subfolder/etc
SCHEME:URI的模式,如content,默认为content和file,即若Intent没有指定URI,则Intent中的URI部分需要为content或者file才可以匹配
HOST:如com.example.project,主机名
PORT:如200,端口号
PATH、pathPattern、pathPrefix表示路径信息
注意Intent中的setData和setType方法均会导致另一个方法设下去的值为null,所以一般都用setDataAndType来设置
intent.setDataAndType(Uri.parse("file://abs"),"image/png");
最后是隐式调用的tips,为了防止没有对应的activity导致程序崩溃,可以在startActivity之前调用PackageManager的relolveActivity方法或者intent的resolveActivity方法,若不为null,则表示识别到了匹配过滤的优先级最高的Activity
- Android开发艺术探索学习笔记 第一章
- Android开发艺术探索笔记 第一章
- android开发艺术探索第一章笔记
- 《Android开发艺术探索》第一章笔记
- android开发艺术探索 第一章笔记
- Android开发艺术探索笔记 第一章Activity
- Android开发艺术探索第一章笔记
- Android 开发艺术探索 第一章
- android开发艺术探索 第一章
- Android学习笔记 - 《Android开发艺术探索》第一章
- 安卓开发艺术探索笔记第一章
- Android开发艺术探索读书笔记(第一章)
- Android开发艺术探索读书笔记:第一章
- 《Android开发艺术探索》笔记
- 《Android开发艺术探索》笔记
- 《Android 开发艺术探索》随手笔记——第一章Activity生命周期和启动模式
- Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式
- 《Android开发艺术探索》读书笔记----第一章:Activity的启动模式
- 机器学习-python通过序列最小优化算法(SMO)方法编写支持向量机(SVM)
- 装饰模式
- word embedding
- Java学习心得
- html5动画
- Android开发艺术探索第一章笔记
- SGM(semi-global matching)算法原理
- VS2010控制台程序运行一闪而过的完美解决办法
- MVP
- css的动画
- SharedPreferences 分析 --- 之二
- MVP模式请求网络数据
- 【数据库事务】--事务死锁与检测
- Fresco简介