在ViewModel
课程中命名方法的最佳方法是什么?基于其行为/行为或活动/片段的生命周期?
例如:
override fun onResume() {
super.onResume()
viewModel.connect()
}
override fun onPause() {
super.onPause()
viewModel.disconnect()
}
override fun onItemCheckedChanged(task: Task, value: Boolean) =
viewModel.updateTaskStatus(task, value)
override fun onResume() {
super.onResume()
viewModel.onResume()
}
override fun onPause() {
super.onPause()
viewModel.onPause()
}
override fun onItemCheckedChanged(task: Task, value: Boolean) =
viewModel.onItemCheckedChanged(task, value)
互联网上有几个例子,使用了两种方法。
在我看来,这些方法应该与生命周期相关,这样View不需要知道ViewModel背后的逻辑,只需要知道需要调用生命周期方法。
最好的方法是什么?
答案 0 :(得分:3)
只要代码干净且易于阅读/理解,就没有正确的方法。但是如果你看一下examples Android give,它们就会显示与你发布的方法类似的方法。
1)其中一种方法是使用Android生命周期命名的方法(您提到过)。
class MyLocationListener {
public MyLocationListener(Context context, Callback callback) {
// ...
}
void start() {
// connect to system location service
}
void stop() {
// disconnect from system location service
}
}
在生命周期所有者中手动调用每个函数,如下所示:
@Override
public void onStart() {
super.onStart();
myLocationListener.start();
// manage other components that need to respond
// to the activity lifecycle
}
@Override
public void onStop() {
super.onStop();
myLocationListener.stop();
// manage other components that need to respond
// to the activity lifecycle
}
2)但是,如果你想通过他们的动作来命名方法,你可以使用OnLifecycleEvent注释为他们提供方法,这是Android Jetpack令我们兴奋的!例如:
public class MyLocationListener implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void connectListener() {
...
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void disconnectListener() {
...
}
}
现在,LifecycleObserver可以自动调用这些方法,可以观察LifecycleOwner:
myLifecycleOwner.getLifecycle().addObserver(new MyLocationListener());
LifecycleOwner
通常是Activity或Fragment。取决于你选择哪一个,但我首选的是LifecycleObserver
,因为它需要更少的代码,我认为它看起来更清晰。
如果您对良好的Android实践感兴趣并且有一些技巧可以帮助您,那么我会推荐一些好的页面: