开发艺术探索--Activity生命周期和启动模式

来源:互联网 发布:unity3d 机器人仿真 编辑:程序博客网 时间:2024/05/16 10:26

第一章: Activity生命周期和启动模式

本章包括: 声明周期,启动模式及IntentFilter的匹配规则.

生命周期
启动模式
IntentFilter

生命周期

典型情况下: 用户参与下,生命周期的改变
异常情况下: 被系统回收或者Configuration改变重建

  • 典型情况下
    1. onPause:保存数据,停止动画等工作,但不能太耗时.
    2. onStop: 稍微重量级的回收工作,也不能太耗时.
    3. 如果Activity采用了透明主题,那么不会回调onStop.
    4. onStart与onStop对应Activity是否可见,onResume与onPause对应Activity是否在前台(多次调用).
    5. onPause执行完后新的Activity的onResume才会执行.见ActivityStack#resumeTopActivityInnerLocked
    6. ApplicationThread#scheduleLaunchActivity回调Activity的声明周期方法.
  • 异常情况下
    1. onSavedInstanceState在onStop之前调用,和onPause没有既定时序关系.
    2. onRestoreInstanceState在onStart之后调用.需要在onCreate中进行判空处理.
    3. View状态保存和恢复采用了委托的思想.Activity->Window->ViewGroup
    4. 如果一个进程中没有四大组件执行,资源不足会很快被系统杀死,比较好的做法是将后台工作放到Service中进行
    5. "android:configChanges="orientation|screenSize":避免屏幕旋转时Activity重建,这时候只会回调onConfigurationChanged.
    6. configChanges相关含义:activity

启动模式及Flags

  1. Activity的四大启动模式,之前的总结 Activity任务栈及启动模式
  2. adb shell dumpsys activity: 获取activity堆栈信息.

IntentFliter

  1. 一个Activity可以有多个IntentFilter,只要能匹配任何一组即可成功启动对应Activity
  2. action : 有其一匹配即可,
  3. category : 可以没有(默认会加上default),有则必有其一匹配.
  4. data : 必须有一个完全匹配,
  • 如果Activity需要接受隐式调用,必须加上DEFAULT这个category.
  • 隐式调用前最好使用resolveActivity来判空(加上MATCH_DEFAULT_ONLY)
  • datamimeTypeURI组成,其中URI包括:scheme,host,port,path.
  • 如果data只有mimeType而没有指定URI,则URI默认值是content和file
  • data中的setDatasetType冲突,需使用setDataAndType
  • 系统建议使用显示的方式来启动服务.
0 0