【问题标题】:What is the best way to clear up resources in Android?在 Android 中清理资源的最佳方法是什么?
【发布时间】:2019-10-28 19:25:38
【问题描述】:

我正在使用 ExoPlayer 构建一个类似于 Spotify 的应用程序。当歌曲开始播放时,我正在启动播放器通知,即使将应用程序置于后台也应该播放它。因此,当用户故意从 Ram 中清除应用程序但 onDestory() 不像 stated here 那样可靠时,我需要释放播放器并保存最后播放的歌曲。所以,我想在自定义 Application 中的 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")
            }

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

【问题讨论】:

    标签: android kotlin exoplayer2.x


    【解决方案1】:

    你应该释放onStop()中的资源,当activity进入后台时,它会停止但不会被销毁(除非系统杀死activity的宿主进程)。如果你释放onDestroy()中的资源,默认不调用当 Activity 进入后台时,Activity 将在停止状态下持有这些资源,从而导致您的应用在后台状态下消耗更多的资源。

    【讨论】:

    • 释放onStop 中的资源意味着停止播放器和音乐,但必须在应用程序进入后台时播放音乐。
    • @neer17 在应用程序处于后台时执行某些操作,您应该使用 Service 组件而不是 Activity
    • PlayerNotificationManager 负责前台服务。无论如何,我关心的是释放播放器并在应用程序被销毁时将最后播放的歌曲插入数据库。
    猜你喜欢
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多