大佬教程收集整理的这篇文章主要介绍了android-onCleared未在Fragment附加的ViewModel上调用,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
以下代码可能有什么问题?如何在此场景中实际调用viewmodel.onCleared()?
视图模型:
class viewmodelFirst(application: Application) : Androidviewmodel(application) { companion object { private const val TAG = "viewmodelFirst" } init { Log.v(tag,"Created") } override fun onCleared() { super.onCleared() Log.v(tag,"onCleared") } }
分段:
class FragmentFirst : Fragment() { companion object { private const val TAG = "FragmentFirst" } override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View? { viewmodelProviders.of(this).get(viewmodelFirst::class.java) return inflater.inflate(R.layout.fragment_first,container,falsE) } override fun onDestroy() { super.onDestroy() Log.v(tag,"onDestroy") } }
活动:
class MainActivity : AppCompatActivity() { companion object { private const val TAG = "MainActivity" } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceStatE) setContentView(R.layout.activity_main) if (savedInstanceState == null) { supportFragmentManager.begintransaction().replace(R.id.container,FragmentFirst()).commit() } } override fun onDestroy() { super.onDestroy() Log.v(tag,"onDestroy") } }
自己回答:
这是com.android.support:appcompat-v7:27.1.0的错误
如果我使用以下依赖项,我遇到此问题:
implementation 'com.android.support:appcompat-v7:27.1.0' implementation "android.arch.lifecycle:extensions:1.1.0"
如果我更改appcompat-v7 27.1.0的版本 – > 27.0.2,然后viewmodel.onCleared()按预期工作(当应用程序转到后台时我有调用).
appcompat-v7:28.0.0-alpha1也可以,看起来这只是appcompat-v7的一个问题:27.1.0
更新(2018年6月)
正如@Akshay所说,这个错误在27.1.1有点固定.但不完全不幸.
以下方案仍未修复:
>不要保持活动.
>启动应用程序.
>按下主页按钮.
在27.0.2我在logcat上有以下输出:
V/viewmodelFirst: Created V/viewmodelFirst: onCleared V/FragmentFirst: onDestroy V/MainActivity: onDestroy
哪个完全正确.
但是在27.1.1到28.0.0-alpha3我在logcat有以下输出:
V/viewmodelFirst: Created V/FragmentFirst: onDestroy V/MainActivity: onDestroy
我们可以看到活动和片段被破坏但是viewmodel没有被onCleared通知.
我怀疑,如果不停止活动将被禁用,并且Android会自然卸载应用程序(由于另一个应用程序要求提供一堆资源)某个时刻,viewmodel.onCleared()将不会被称为非常悲伤.
附:我在这里推了代码:https://github.com/allco/onClearedInvestigation
并在此向Google报告此问题:https://issuetracker.google.com/issues/110285295
更新(2018年8月)
之前在https://issuetracker.google.com/issues/74139250报告了一个错误.
有关详细信息,请参阅此链接:https://developer.android.com/topic/libraries/support-library/revisions
以上是大佬教程为你收集整理的android-onCleared未在Fragment附加的ViewModel上调用全部内容,希望文章能够帮你解决android-onCleared未在Fragment附加的ViewModel上调用所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。