fix: viewModel hold activity may cause memory leak

This commit is contained in:
Xwite 2023-03-09 13:59:05 +08:00
parent 1b6ec86984
commit 34083b6765
3 changed files with 11 additions and 15 deletions

View File

@ -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) }

View File

@ -34,8 +34,7 @@ import java.net.URLDecoder
/**
* rss阅读界面
*/
class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>(false),
ReadRssViewModel.CallBack {
class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>(false) {
override val binding by viewBinding(ActivityRssReadBinding::inflate)
override val viewModel by viewModels<ReadRssViewModel>()
@ -50,7 +49,8 @@ class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>
}
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<ActivityRssReadBinding, ReadRssViewModel>
}
}
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<ActivityRssReadBinding, ReadRssViewModel>
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)

View File

@ -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<String>()
val urlLiveData = MutableLiveData<AnalyzeUrl>()
var rssStar: RssStar? = null
val upTtsMenuData = MutableLiveData<Boolean>()
val upStarMenuData = MutableLiveData<Boolean>()
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)
}
}