此系列文章为知识点回顾所用,所以,跟网上的一些内容有重复,不过,这里都只记录要点。—– 安卓知识回顾
Activity生命周期
- 完整生命周期见图
- 各生命周期有以下特点
- onCreate-onDestory,分别是创建和销毁,在其中可以做一些初始化及耗时的资源回收等操作。
- onStart-onStop,分别从是否可见来判断
- onResum-onPause,分别从是否位于前台来判断,例如app被遮住或者按了home键都会走onPause。
- onRestart,只有从不可见到可见才会调用,例如Activity被切到后台又唤起的过程:onPause->onStop->onRestart->onStart->onResum.
Activity数据存储和恢复
- 异常情况下会需要保存Activity数据,主要有:按了home键,锁屏,屏幕旋转等。
- 异常情况生命周期:onSaveInstanceState->onDestory。重建过程生命周期:onCreate->onRestoreInstanceState。
- 那我们能够存取些什么类型的数据呢?见下图(基本数据类型,可序列化对象,集合等):
- 存储数据我们在onSaveInstanceState中保存,在onCreate或者onRestoreInstanceState中恢复,需要注意的是onCreate中恢复数据需要做判空处理。
- 并不是所有的Activity的数据都能恢复,比如说笔者公司的应用只有一个Activity,页面使用xml动态解析生成,这样的化就没办法去做数据的恢复。
Activity启动模式
- standrd:每启动一次就创建一个Activity的实例,不管存在与否,使用appliactionContext启动会报错,因为appliactionContext不在默认任务栈中需要,指定FLAG_ACTIVITY_NEW_TASK启动即可;
- singleTop:如果该Activity在栈顶存在,那么再次启动直接复用栈顶的实例,不再创建,onNewIntent方法会被调用,onStart和onCreate不会调用。如果不在栈顶,那么会重新产生一个实例;
- singleTask:这是一个单实例模式,也就是只要栈中存在该实例就不会重新创建,不论在栈顶还是栈中,如果在栈中时会把其上面的部分实例都出栈,同样会调用onVewIntent方法。
- singleInstance:这也是一个单实例模式,只不过与singleTask不同的是,他位于一个单独的任务栈中。
- 启动模式可以在清单文件中配置或者启动Activity的时候添加Flags标识。
IntentFilter匹配规则
- action,制定了action后,启动时必须匹配才可启动,一个组件可以配置多个action作为多个用途。
- category,如果组件中定义了category,必须匹配才可启动,同时必须配置:android.intent.category.DEFAULT,否则找不到该组件。
data,这个未真正用过,只是做匹配用,例子如下
<activity android:name=".SecondActivity"> <intent-filter> <action android:name="com.example.second.action"/> <category android:name="com.example.second.category"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="text/plain" android:scheme="http" /> </intent-filter> </activity> 启动时如下配置即可启动。 Intent intent = new Intent(); intent.setAction("com.example.second.action"); intent.addCategory("com.example.second.category"); intent.setDataAndType(Uri.parse("http://abc"),"text/plain"); startActivity(intent);