Activity 生命周期 :onCreate onstart onResume onPause onStop onDestroy
onSaveInstanceState onRestoreInstanceState 异常被回收,进行重 建
onNewIntent restart
后台activity 销毁重建的过程:
横竖屏输入法弹出生命周期 activity 销毁与重建的过程。
第一、onCreate 已创建状态 ,里面 做 视图的初始化,ViewModel 和View 的绑定,实例化作用域。可以接收bundle 值 进行数据的恢复。 执行顺序 bundle 里面获取数据,setContentView , 为view 绑定。
第二、onStart 已开始状态 和 onStop对应,onStart是很快的完成,不能做太多的耗时操作。 此状态回调 对用户可见,为进入前台支持互动做准备 。初始化 维护界面的代码。
onStop 调用时不对用户可见。应该释放掉 或者调整对用户不可见的无用资源。比如:可以暂停动画,可以切换精准位置 为 粗略位置。确保与界面相关的工作继续运行。多窗口模式下查看Activity。 执行CPU相对密集的关闭操作。 可以进行保存。
第三 、 onResume 和 onPause 对应。
onResume 是 已恢复状态。可以与用户交互。多窗口模式下。可以重新初始化 onPause 释放掉的组件。
onPause 释放系统资源,传感器。onPause 方法并不意味Activity 离开已暂停状态。相反会保持这个状态。 是进入stop 还是进入 onReusme .
第四 、 onDesotry的 调用场景, 调用finish, back 键盘,配置发生改变(暂时销毁并且重建)。释放所有的资源。通过isFinish 来判断 是生命周期的最后一步。还是因为配置改变 引起的销毁重建 isFinish () 是false 的。
第五、 super.onCreate() ,可以 在第一行写。调用父类的。
第七、onSavedInstanceState ()来保存简单轻量的界面状态。系统进入后台。
在Android P 也就是android 9 以及之后, 调用是在 onStop 之后。
在Android 9 之前,这个是在 onStop 调用之前,但是 和onPause 没有必然的联系。
onSaveInstanceState 调用场景比较多。除了点击返回键 或者 调用finish 正常销毁之外,其他有可能恢复的场景对会调用。
onRestoreInstance 调用时机。是在 onStart 之后,用于恢复 onStart 需要初始化完成之后,恢复的数据比较方便,当然恢复数据也可以在 onCreate 里面进行。但是区分一下比较好。 需要对bundle 进行非空判断,可以判断isFinish()
第八、 打印 Activity 生命周期的时候,可以 在 baseActivity 的 tag重新赋值为 this.getClass().getSimpleName() 方法。
第九、Activity 的启动模式 和任务堆栈。
任务是Activity 的集合, activity 的容器就是 返回堆栈。
系统按窗口来管理 任务和任务组
返回堆栈按照后进先出的对象结构运作。
定义启动模式。
SingleTask ,系统会创建新的任务,并实例化根Activity。 但是如果另外的任务已经有该Actiivyt 的实例,则会调用onNewIntent() 方法 把该实例 推向栈顶,并把 之前的acitity 推出栈外。
SingleInstance 栈里面只有一个Activity。
如果启动模式 是 ClearTop And NewTask , xml 里面配置的standard ,会移除原来的创建新的, 说明java 启动的优先级 高于 xml 的优先级。
Binder事务缓冲区的大小固定有限,目前为1M,由进程中正在处理的事务共享。我们保存的数据建议在 50k以下。
2 Fragment 生命周期:onCreate onCreateView onActivityCreate
onstart onResume onPause onStop onDestory
onDesoryView onDestroyActivity
Fragment 回退栈机制的处理 数据的传递。回调
Fragment 允许将界面划分为离散的区块,从而将模块化和可重用性引入到Activity 的界面。用户可以处于started 以及更高级别的状态,动态的对Fragment进行操作。可以动态的根据屏幕尺寸来添加和删除区块。
Fragment 就是在宿主界面获取的Fragment 管理子Fragment, 获取的ParentFragmentManager 管理的是自己, 获取的childFragmentManager 是其他类的。
3 String StringBuilder 线程不安全的。 StringBuffer 线程安全带Syntronize 关键字
存储是以char[] 的形式来存储数据,所以不会频繁的创建对象。
String 每次 操作 对会 使用 newString 来创建对象。
4 静态内部类 和 反射的使用? ???
5 Activity 启动模式和用途
6 Android 垃圾回收算法
7 自定义View的原理和流程。
8 设计模式以及用户