From b9fe1fee58d7350072d65fa4985d86aae471d692 Mon Sep 17 00:00:00 2001 From: Xwite <1797350009@qq.com> Date: Thu, 9 Mar 2023 13:59:05 +0800 Subject: [PATCH] fix: viewModel hold activity may cause memory leak --- .../legado/app/ui/book/info/BookInfoActivity.kt | 1 - .../io/legado/app/ui/rss/read/ReadRssActivity.kt | 10 +++++----- .../io/legado/app/ui/rss/read/ReadRssViewModel.kt | 15 ++++++--------- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt index 18f2e59fb..8e6a3d188 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt @@ -107,7 +107,6 @@ class BookInfoActivity : binding.flAction.setBackgroundColor(bottomBackground) binding.tvShelf.setTextColor(getPrimaryTextColor(ColorUtils.isColorLight(bottomBackground))) binding.tvToc.text = getString(R.string.toc_s, getString(R.string.loading)) - viewModel.callBack = this viewModel.bookData.observe(this) { showBook(it) } viewModel.chapterListData.observe(this) { upLoading(false, it) } viewModel.waitDialogData.observe(this) { upWaitDialogStatus(it) } diff --git a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt index 1d409cb1d..75184a3c0 100644 --- a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt +++ b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt @@ -34,8 +34,7 @@ import java.net.URLDecoder /** * rss阅读界面 */ -class ReadRssActivity : VMBaseActivity(false), - ReadRssViewModel.CallBack { +class ReadRssActivity : VMBaseActivity(false) { override val binding by viewBinding(ActivityRssReadBinding::inflate) override val viewModel by viewModels() @@ -50,7 +49,8 @@ class ReadRssActivity : VMBaseActivity } override fun onActivityCreated(savedInstanceState: Bundle?) { - viewModel.callBack = this + viewModel.upStarMenuData.observe(this) { upStarMenu() } + viewModel.upTtsMenuData.observe(this) { upTtsMenu(it) } binding.titleBar.title = intent.getStringExtra("title") initWebView() initLiveData() @@ -223,7 +223,7 @@ class ReadRssActivity : VMBaseActivity } } - override fun upStarMenu() { + private fun upStarMenu() { starMenuItem?.isVisible = viewModel.rssArticle != null if (viewModel.rssStar != null) { starMenuItem?.setIcon(R.drawable.ic_star) @@ -235,7 +235,7 @@ class ReadRssActivity : VMBaseActivity starMenuItem?.icon?.setTintMutate(primaryTextColor) } - override fun upTtsMenu(isPlaying: Boolean) { + private fun upTtsMenu(isPlaying: Boolean) { launch { if (isPlaying) { ttsMenuItem?.setIcon(R.drawable.ic_stop_black_24dp) diff --git a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt index 193e601fa..274117165 100644 --- a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt @@ -27,13 +27,14 @@ import java.util.* class ReadRssViewModel(application: Application) : BaseViewModel(application) { - var callBack: CallBack? = null var rssSource: RssSource? = null var rssArticle: RssArticle? = null var tts: TTS? = null val contentLiveData = MutableLiveData() val urlLiveData = MutableLiveData() var rssStar: RssStar? = null + val upTtsMenuData = MutableLiveData() + val upStarMenuData = MutableLiveData() fun initData(intent: Intent) { execute { @@ -72,7 +73,7 @@ class ReadRssViewModel(application: Application) : BaseViewModel(application) { } } }.onFinally { - callBack?.upStarMenu() + upStarMenuData.postValue(true) } } @@ -126,7 +127,7 @@ class ReadRssViewModel(application: Application) : BaseViewModel(application) { rssStar = it } }.onSuccess { - callBack?.upStarMenu() + upStarMenuData.postValue(true) } } @@ -196,11 +197,11 @@ class ReadRssViewModel(application: Application) : BaseViewModel(application) { tts = TTS().apply { setSpeakStateListener(object : TTS.SpeakStateListener { override fun onStart() { - callBack?.upTtsMenu(true) + upTtsMenuData.postValue(true) } override fun onDone() { - callBack?.upTtsMenu(false) + upTtsMenuData.postValue(false) } }) } @@ -213,8 +214,4 @@ class ReadRssViewModel(application: Application) : BaseViewModel(application) { tts?.clearTts() } - interface CallBack { - fun upStarMenu() - fun upTtsMenu(isPlaying: Boolean) - } } \ No newline at end of file