Android Service示例未调用super.onDestroy的原因及onDestroy作用咨询
Android Service中onDestroy()相关疑问解答
一、Service的onDestroy()方法作用
onDestroy()是Service生命周期的最终回调,系统会在Service确定要被销毁时触发它,核心作用是让开发者完成资源清理工作:
- 关闭后台运行的线程、Handler
- 注销动态注册的广播接收器、ContentObserver
- 释放数据库连接、文件IO资源
- 清空持有Service引用的静态变量或回调
从Android框架源码来看,Service基类的onDestroy()是一个空实现,没有内置的系统级逻辑需要执行。
二、官方示例未调用super.onDestroy()的原因
正因为基类的onDestroy()是空实现,调用它不会产生任何实际效果,所以官方示例省略了这个调用。只要你在重写的方法里完成了自己的资源清理,就不需要额外调用父类方法。
三、为何测试中无论是否调用super,Service都未被释放
Service对象的GC回收和onDestroy()的调用没有直接绑定关系:
onDestroy()只是系统通知你可以清理资源的时机,但如果你的代码中还存在对Service对象的强引用(比如全局静态变量持有引用、未终止的线程持有Service的this引用、未取消的第三方库回调等),GC就无法回收这个对象。- 要让Service被正常释放,除了在
onDestroy()里清理资源,还必须确保所有持有Service引用的地方都被解除,比如停止线程并置空引用、移除所有注册的监听器、清空相关静态变量等。
内容的提问来源于stack exchange,提问作者Hanlien
相关产品推荐
相关产品推荐

