Android开发琐记

基础系列

Context

Activity和Service以及Application的Context是不一的,Activity继承自ContextThemeWraper.其他的继承自ContextWrapper.

每一个Activity和Service以及Application的Context是一个新的ContextImpl对象

getApplication()用来获取Application实例的,但是个方法只有在Activity和Service中才能调用的到。那也许在绝大多数情况下我们都是在Activity或者Servic中使用Application的,但是如果在一些其它的场景,比如BroadcastReceiver中也想获得Application的实例,这时就可以借助getApplicationContext()方法,getApplicationContext()比getApplication()方法的作用域会更广一些,任何一个Context的实例,只要调用getApplicationContext()方法都可以拿到我们的Application对象。

创建对话框时不可以用Application的context,只能用Activity的context。

Context的数量等于Activity的个数 + Service的个数 +1,这个1为Application

Parcelable和Serializable的区别和比较

Parcelable和Serializable都是实现序列化并且都可以用于Intent间传递数据,
Serializable是Java的实现方式,基于设备存储的持久化,可能会频繁的IO操作,所以消耗比较大,但是实现方式简单
Parcelable是Android提供的方式,基于共享内存的“持久化”,效率比较高,但是实现起来复杂一些 ,

二者的选取规则是:
内存序列化上选择Parcelable, 存储到设备或者网络传输上选择Serializable(当然Parcelable也可以但是稍显复杂)

详细原理及使用参考:
https://blog.csdn.net/justin_1107/article/details/72903006

实战技巧

onSaveInstanceState() 与onRestoreIntanceState()

Activity退出时,系统回调onSaveInstanceState() 来保存界面现场信息,
再次进入Activity时,系统回调onRestoreIntanceState() 来恢复界面现场信息。

但以下除外:
用户主动去销毁一个Activity的时候,用户按下back,不会调用 ,
代码中finish(),不会调用。

那什么情况下调用?
原则:
onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(当然你不保存那就随便你了)。

情况:
1、当用户按下HOME键时。
2、长按HOME键,选择运行其他的程序时。
3、按下电源按键(关闭屏幕显示)时。
4、从activity A中启动一个新的activity时。
(以上四种情况,其实都是Activity切换,需要等到系统回收Activity资源,强杀Activity时,才会回调onSaveInstanceState,而不是切换时回调)

5、屏幕方向切换时,导致Activity销毁时
未正确配置android:configurations时,会导致切屏,Activity销毁
https://blog.csdn.net/Hendy_Raw/article/details/82107132

在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行
(案例:笔记应用在切屏时,就需要保存草稿内容)

另外:
用户在recent任务中强杀应用,用户在设置中强杀应用,会调用吗?待验证

猜你喜欢

转载自blog.csdn.net/Hendy_Raw/article/details/82107722
今日推荐