小编Ima*_*ian的帖子

在android中的服务中访问viewModel

我们如何在服务中初始化viewModel。在片段中,我们使用 Kotlin 委托“ by ActivityViewModels ”来完成此操作。或者我们可以使用ViewModelProvider().get来完成。但据我发现,我们无法在服务中执行此操作,因为我们需要一个“ ViewModelStoreOwner ”之类的活动或片段。

那么这是否是在服务中初始化 ViewModel 的最佳实践呢?

我的项目在这里

service android mvvm repository-pattern viewmodel

19
推荐指数
2
解决办法
2万
查看次数

使用不在 Android 中的构造函数或工厂中的函数成员将上下文传递给 ViewModel

我知道将上下文传递给 ViewModel 不是最佳实践。但我想知道将上下文实例作为 ViewModel 中函数的局部参数是否可以?

因为在这种情况下,函数使用上下文并在函数结束时释放该上下文引用。

请假设我们不想使用 AndroidViewModel 来获取应用程序上下文。

例如:

class MyViewModel : ViewModel(){

     initColors(context:Context){

             //do something with context like getting colors from resourcse
      }

}
Run Code Online (Sandbox Code Playgroud)

并在片段中:

class Myfrgament:Fragment(){
private val viewModel: LessonFragmentViewModel by viewModels{}
   override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {

   viewModel.initColors(requireContext())
}
Run Code Online (Sandbox Code Playgroud)

}

resources android mvvm viewmodel

6
推荐指数
0
解决办法
184
查看次数

使用 setupWithNavController:2.5.0-alpha01 导致每次调用 OnViewCreated

我使用导航组件和底部导航栏,并为了处理选项卡栏导航,请调用以下代码

绑定.bottomNavigationView.setupWithNavController(navController)

在上一个版本之前,我在使用 setupWithNavController() 时保存每个片段的状态时遇到了一个大问题,但是由于最新版本的导航 API(>=:2.4.0),它支持多个返回堆栈,我可以轻松在选项卡之间导航,无需担心再次加载所有数据。

但我发现每次导航每个选项卡时,都会调用 OnViewCreated 函数!这给我带来了一些问题。

例如,OnViewCreated是一个使用repeatOnLifeCycle来收集流量的地方,而OnViewCreated的这种重复调用导致了很多流量的订阅者!

甚至在文件中说:

最佳实践是在生命周期初始化时调用此函数。例如,Activity 中的 onCreate 或 Fragment 中的 onViewCreated。否则,可能会创建多个重复执行相同操作的协程并同时执行。

它假定 OnViewCreated 是一个被调用一次的地方!

明显的问题是,首先,这种行为是一个问题还是预期的?如果是预期的话,我们可以在哪里收集流量?请详细说明为什么会发生这种情况?

android android-navigation android-bottomnav android-navigation-graph

5
推荐指数
1
解决办法
624
查看次数