安卓技术总结

一 Activity总结

2018-01-25  本文已影响15人  落水木木

1.1 是什么

安卓应用程序的主要组件之一,用于与用户交互并完成某些任务。app的主要功能模块往往由几个松耦合的activity组成。

1.2 使用姿势

  1. 继承Activity或其子类,实现需要的生命周期的回调方法;
  2. manifest文件中声明:
<activity
            android:name=".activity.ExtraToolActivity"
            android:launchMode="singleTop"
            android:screenOrientation="portrait"/>

1.2.1 启动与回收

1.2.1.1 launcher启动

 <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>

1.2.1.2 显式调用

调用startActivity(params)方法。

1.2.1.3 隐式调用

IntentFilter匹配

IntentFilter中的过滤信息有actioncategorydata三种匹配信息。三类同时匹配成功才能启动Activity。
action匹配:匹配任意一个,区分大小写。
category匹配:Intent中所有category都必须在过滤列表中找到匹配。没写category就是默认的android.intent.category.DEFAULT
data匹配:data中有schemehostportpathpathPatternpathPreffixmimeType等属性。匹配规则是必须有data数据且在过滤列表中完全匹配。且必须有scheme属性(image/*text/*类型默认为content和file)。

任何启动方式都需要先在manifest文件声明activity

1.2.2 模块间通信

Intent通信。包括startActivityForResult(params)
EventBus通信。

1.3 生命周期

activity_life.png
activity_life2.png

状态的变更和保存

状态变更的时机:

onCreate(Bundle)onSaveInstanceState(Bundle)取得的是相同的参数。
onSaveInstanceState一定在onStop之前调用,但是不确定是否在onPause之前。

ui状态的保存

onSaveInstanceStateonRestoreInstanceState分别用于保存、恢复组件状态。

onSaveInstanceState的默认实现会自动为有android:id的ui组件保存状态,底层用ParcerableBundle
存在不需要保存状态的情况(比如用户主动点击返回键),onSaveInstanceState不保证一定被调用。

持久性数据的保存

onSaveInstanceState不稳定,可以在onPause()中将有必要的数据保存到数据库等。

使用Fragment保存数据

Bundle并非设计来携带大型对象(比如位图),而且其中数据必须先序列化再反序列化会消耗大量系统资源。因此可以用Fragment保存数据,减轻Activity的负担。
因设备配置改变,造成activity被销毁的情况下(比如旋转屏幕),设置了setRetainInstance(true)的Fragment会被保留下来

restore_instance.png

android:configChanges

android:configChanges="xxx"属性,常用的主要有下面三个选项:
local:设备的本地位置发生了变化,一般指切换了系统语言;
keyboardHidden:键盘的可访问性发生了变化,比如用户调出了键盘;
orientation:屏幕方向发生了变化,比如旋转了手机屏幕。

配置了android:configChanges="xxx"属性之后,Activity就不会在对应变化发生时重新创建,而是调用Activity的onConfigurationChanged方法。

1.4 启动模式

ActivityInfotaskAffinity属性
1.标识一个Activity的任务栈名,默认所有任务栈名为应用包名;
2.任务的affinity取决于其root activity的taskAffinity
3.可以在manifest为Activity单独指定taskAffinity,相同的为同一任务栈,为空则不属于任何任务栈。

1.5 场景用例

singleTop适用于展示消息通知等。
singleTask适用于程序主页等,也可以用于搜索页。
singleInstance适用于完全独立的页面。

1.6 启动流程源码分析


参考文章

activity状态
泽毛-Activity 知识梳理(3) - Activity状态保存和恢复
一大三千-Android学习之保存 Activity 的状态
暗暗笑-Activity : 状态保存与恢复
jxq1994-Activity状态的几种保存方法
Hujiawei-Art of Android Development Reading Notes 1

启动模式
猴子搬来的救兵Castiel-彻底弄懂Activity四大启动模式

上一篇下一篇

猜你喜欢

热点阅读