android - 在Android中清理资源的最佳方法是什么?
问题描述
我正在使用 ExoPlayer 构建一个类似于 Spotify 的应用程序。当歌曲开始播放时,我正在启动播放器通知,即使将应用程序置于后台也应该播放它。因此,当用户故意将应用程序从 Ram 中清除但不可靠时,我需要释放播放器并保存最后播放的歌曲,如此处所述。所以,我想在自定义应用程序中进行资源清理,但也失败了。 onDestory()
onActivityDestroyed()
override fun onActivityDestroyed(activity: Activity?) {
val activityName = activity!!.localClassName
Log.d(TAG, "onActivityDestroyed: activity name ==> $activityName")
val musicPlayerDAO =
MusicPlayerDatabase.getDatabase(applicationContext).musicPlayerDao()
val repository = Repository(musicPlayerDAO)
val job = Job()
CoroutineScope(Dispatchers.IO + job).launch {
repository.insertLastPlayedSong(LastPlayedSongEntity("Dummy title", 3000))
}
Log.d(TAG, "onActivityDestroyed: Just after the co-routine")
}
只有第一个日志在这里被执行。在这种情况下,释放资源的最佳方法是什么?
解决方案
您应该在 中释放资源onStop()
,当活动进入后台时,它会停止但不会被销毁(除非系统杀死活动的托管进程)。如果您在 中释放资源onDestroy()
,当活动进入后台时默认情况下不会调用,活动将在停止状态下保留这些资源,从而导致您的应用在后台状态下消耗更多的资源。
推荐阅读
- java - 如何使用 postgresql 在 jFormattedTextField 中显示日期
- javascript - 如何在不更改选择框值的情况下选择选择框时更改html中的输入框值
- javascript - 如何在单页登录页面中创建滑动效果到可滚动登录页面?
- docker-compose - Docker-compose 如何创建从 Yaml 文件创建 anconda 环境并激活 Enviroment 的服务
- c# - 如何延长 Hangfire 作业的超时时间?
- reactjs - React — 这是对 useCallback 钩子的好用吗?
- sharepoint - 查询有关在 SharePoint 2013 上创建新项目网站的不同方法
- reactjs - 如何在映射所有元素之前显示 ActivityIndicator
- java - 执行查询时 MongoDB Reactive Streams 挂起
- python - 使用掩蔽层进行 LSTM 训练时出错