1.Activity 生命周期
- onCreate:创建,初始化
- onStart:Activity正在启动,此时已处于可见状态,但是没有在前台显示;即Activity已显示,但是无法看见
- onResume:Activity已在前台可见,可与用户交互
- onPause:Activity正在停止;onPause方法执行完成后,新Activity的onResume方法才会被执行
- onStop:Activity不可见,再后台
- onRestart:Activity由不可见变为可见时,调用
- onDestroy:销毁Activity
2.Activity A 启动Activity B 各自生命周期(A被B完全覆盖)
- 1.A onCreate
- 2.A onStart
- 3.A onResume
- 4.A onPause
- 5.B onCreate
- 6.B onStart
- 7.B onResume
- 8.A onStop
此时点击返回,各自生命周期:
- B onPause
- A onRestart
- A onStart
- A onResume
- B onStop
- B onDestroy
3.Activity A 启动Activity B 各自生命周期(A没有被B完全覆盖)
- A onPause
- B onCreate
- B onStart
- B onResume
点击返回:
- B onPause
- A onResume
- B onStop
- B onDestroy
4.Fragment 生命周期
- onAttach :fragment关联到activity,这个时候activity已经传进来,可以获得Activity传来的值
- onCreate :创建fragment
- onCreateView :加载Fragment布局,尽量不要写耗时操作,越快越好
- onActivityCreated :当Activity中的onCreate方法执行完后调用,在onActivityCreate()调用之前,activity的onCreate还没有完成,所以不能在onCreateView中进行与Activity有交互的UI操作,UI交互操作可以放在onActivityCreated里进行
- onStart :Fragment可见
- onResume :Fragment进入前台,可获取焦点时激活
- onPause :用户离开这个Fragment
- onStop :Fragment不可见
- onDestroyView :Fragment中布局被移除,销毁相关联的UI布局,清除所有和视图相关的资源
- onDestroy :销毁Fragment对象
- onDetach :Fragment 和Activity解除关联
5.Fragment add 和replace 的区别
Fragment展示的两种方法:
- replace :会调用Fragment的生命周期,也就是说它会销毁视图,重新加载
- add hide :就是显示隐藏Fragment,会走onHiddenChanged 方法
6.Activity启动模式
- standard:默认启动模式,即标准模式;每次启动一个Activity都会重写创建一个新的实例;
- singleTop:栈顶复用模式;如果新的Activity已经位于栈顶,那么这个Activity不会被重新创建,同时它的onNewIntent方法调用;standard和singleTop启动模式都是在原任务栈中新建Activity实例,不会启动新的task
- singleTask:栈内复用模式;如果栈中存在这个Activity的实例就会复用这个Activity,不管它是否位于栈顶,复用时会将它上面的Activity全部出栈,并且会回调该实例的onNewIntent
- singleInstance:全局唯一模式;该模式具备singleTask所有特性,区别是,这种模式下Activity会单独占用一个Task栈,具有全局唯一性
7.强引用、软引用、弱引用
- 强引用:内存不足,也不会回收
- 软引用(SoftReference):如果内存不足,会回收
- 弱引用(WeakReference):JVM进行垃圾回收时,不管是否内存不足,都会回收
- 虚引用(PhantoReference):必须和引用队列关联使用
8.Service 启动方式
- startService():
- 生命周期:onCreate-->onStartCommand-->onDestory
- 如果服务已启动,则不会重复执行onCreate,而是会调用onStart和onStartCommand
- 一旦服务开启,和开启者就没有任何关系;开启者不能调用服务里的方法
- bindService():
- 生命周期:onCreate-->onBind-->onUnBind-->onDestroy
- 绑定服务不会调用onStart或者onStartCommand
- bind方式开启服务,绑定服务,如果绑定者挂掉,服务也会跟着挂掉;绑定者可以调用服务里面的方法
9.View绘制流程
- measure:从顶层父view向子view递归调用view.measure
- layout
- draw
10.Touch事件传递机制
- dispatchTouchEvent:分发event
- onInterceptTouchEvent:拦截event;返回true表示拦截,事件将终止向下传递
- onTouchEvent:处理event;返回true表示处理该事件,事件将终止向上传递
11.几种动画
- FrameAnimation:逐帧动画;将多张图片组合起来播放
- TweenAnimation:补间动画;对某个view进行一系列动画,如淡入淡出(Alpha),缩放(Scale),平移(Translate),旋转(Rotate)
- PropertyAnimation:属性动画;对目标对象进行赋值并修改其属性来实现动画
12.Handler,Looper,Message
http://blog.csdn.net/lmj623565791/article/details/38377229
- Looper.prepare()在本线程中保存一个Looper实例,然后该实例中保存一个MessageQueue对象;Looper.prepare()在一个线程中只能调用一次,所以MessageQueue在一个线程中只会存在一个;
- Looper.loop()会让当前线程进入一个无线循环,不断从MessageQueue的实例中读取消息,然后回调msg.target.dispatchMessage(msg)方法;
- Handler的构造方法,会首先得到当前线程中保存的Looper实例,然后与Looper实例中的MessageQueue相关联;
- Handler的SendMessage方法,会给msg的target赋值为handler自身,然后加入MessageQueue;
- 在构造Handler实例时,我们会重写handlerMessage方法,也就是msg.target.dispatchMessage(msg)最终调用的方法;
- Activity启动时,会在当前UI线程调用Looper.prepare()和Looper.loop().