Application面试Android开发

不要在Android的Application对象中缓存数据

2016-11-03  本文已影响1686人  android_cyw

但是

这个Application对象并不是始终在内存中的,它有可能会由于系统内存不足而被回收。但Android在你重新打开这个应用时并不是重新开始启动这个应用,它会创建一个新的Application对象并且启动上次用户离开时的activity以造成这个app从来没有被kill掉的假象。

怎么测试

1.在android studio上,你可以通过Terminate Application来回收当前应用:

Terminate Application.png

2.也可以通过切换系统语言来达到"重启"Application的目的

发现

测试过程也发现,应用被系统回收后,再次进入应用时,会尝试恢复本来的界面,比如:原来界面有一个EditText,系统在回收应用时会保存里面的文字,在恢复的时候重置设置给EditText。

方案

为了避免应用被系统回收后再次回到应用恢复应用时出现的一系列问题(如Fragment未add无法使用getString等方法、重新恢复EditText触发焦点变化等),通常在自定义的Application类中实现Thread.UncaughtExceptionHandler接口,在它的uncaughtException方法中进行界面的跳转(由于是在Application类中,所以这里的跳转是打开一个界面而已,通常是应用的主界面),并kill掉之前的程序,这样所有的资源都会随着用户的构造而重新生成。

上一篇下一篇

猜你喜欢

热点阅读