Каков наилучший способ очистить ресурсы в Android? - PullRequest
0 голосов
/ 28 октября 2019

Я создаю приложение точно так же, как Spotify, используя ExoPlayer. Я запускаю уведомление плеера, когда начинается воспроизведение песни, и она должна воспроизводиться, даже если приложение находится в фоновом режиме. Поэтому мне нужно выпустить проигрыватель и сохранить последнюю проигранную песню, когда пользователь намеренно удаляет приложение из плеера, но 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")
            }

Здесь выполняется только первый журнал. Каков наилучший способ высвобождения ресурсов в этом случае?

1 Ответ

0 голосов
/ 28 октября 2019

Вы должны освободить свой ресурс в onStop(), когда активность переходит в фоновый режим, она останавливается, но не уничтожается (если только система не убивает процесс размещения активности). Если вы освобождаете ресурсы в onDestroy(), который не вызывается по умолчаниюкогда активность переходит в фоновый режим, она будет удерживаться на этих ресурсах, находясь в состоянии остановки, в результате чего ваше приложение будет использовать больше ресурсов в фоновом режиме.

...