Android开发拾遗:对onTerminate的误解

创建于:发布于:文集:Android开发拾遗

昨天收到一个需求需要在Android应用一个完整的生命周期——启动到退出——内,将Log信息收集到文件中。通过继承Timber的Tree类可以实现将日志保存到文件的功能,Application类有onCreate方法,可以在这里开始调用Timber.plant,以及创建以时间命名的日志文件等。那么要怎么检测应用退出?

单纯的清理操作如Timber.uproot其实没必要做,但有时会有在应用退出前保存一些状态的需求。

Application类内输入override fun on,自动补全会跳出onTerminate,看名字,这就是需要用到的生命周期方法了。但是当将写好的代码编译打包到实机上运行时,却发现这个方法没有被调用。

查了下文档,发现这个方法仅适用于模拟器环境,在真机上根本就不会被调。

那如果真的有在应用退出前保存临时数据,并在再次启动时恢复的需求要怎么做?

一个方法是使用Activity上的onSaveInstanceState。注意到onCreate方法实际上有个Bundle?类型的参数savedInstanceState。可以在onSaveInstanceState中保存临时状态,在onCreate时恢复。另外还有onRestoreInstanceState可用于恢复,它仅当Activity被重建时,在onStartonPostCreate之间被调用。

EOF
Githubmastodonrss-box
Copyright © 2020-2024 Elliot