Android开发拾遗:对onTerminate的误解
昨天收到一个需求需要在Android应用一个完整的生命周期——启动到退出——内,将Log信息收集到文件中。通过继承Timber的Tree类可以实现将日志保存到文件的功能,Application
类有onCreate
方法,可以在这里开始调用Timber.plant
,以及创建以时间命名的日志文件等。那么要怎么检测应用退出?
单纯的清理操作如
Timber.uproot
其实没必要做,但有时会有在应用退出前保存一些状态的需求。
在Application
类内输入override fun on
,自动补全会跳出onTerminate
,看名字,这就是需要用到的生命周期方法了。但是当将写好的代码编译打包到实机上运行时,却发现这个方法没有被调用。
查了下文档,发现这个方法仅适用于模拟器环境,在真机上根本就不会被调。
那如果真的有在应用退出前保存临时数据,并在再次启动时恢复的需求要怎么做?
一个方法是使用Activity
上的onSaveInstanceState
。注意到onCreate
方法实际上有个Bundle?
类型的参数savedInstanceState
。可以在onSaveInstanceState
中保存临时状态,在onCreate
时恢复。另外还有onRestoreInstanceState
可用于恢复,它仅当Activity
被重建时,在onStart
和onPostCreate
之间被调用。