首页 > 解决方案 > 在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")
            }

只有第一个日志在这里被执行。在这种情况下,释放资源的最佳方法是什么?

标签: androidkotlinexoplayer2.x

解决方案


您应该在 中释放资源onStop(),当活动进入后台时,它会停止但不会被销毁(除非系统杀死活动的托管进程)。如果您在 中释放资源onDestroy(),当活动进入后台时默认情况下不会调用,活动将在停止状态下保留这些资源,从而导致您的应用在后台状态下消耗更多的资源。


推荐阅读