Looper 架构
 {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewModel = new ViewModelProvider(this).get(MainViewModel.class);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewModel.onButtonClick();
}
});
viewModel.getTextLiveData().observe(this, new Observer<String>() {
@Override
public void onChanged(String text) {
TextView textView = findViewById(R.id.text_view);
textView.setText(text);
}
});
}
}
ViewModel
ViewModel 是 View 和 Model 之间的桥梁,它负责处理业务逻辑,并将处理结果发送给 View 进行展示。ViewModel 不持有 View 的引用,而是通过 LiveData 或者 RxJava 等机制向 View 发送消息。
ViewModel 通常会监听 Model 的变化,并对数据进行处理。当数据发生变化时,ViewModel 将数据发送给 View 进行展示。同时,ViewModel 还接收来自 View 的用户操作,并将操作转发给 Model 进行处理。
// ViewModel
public class MainViewModel extends ViewModel {
private MutableLiveData<String> textLiveData = new MutableLiveData<>();
public void onButtonClick() {
String text = "Hello, World!";
textLiveData.setValue(text);
}
public LiveData<String> getTextLiveData() {
return textLiveData;
}
}
Model
Model 负责处理数据和业务逻辑,它可以是一个数据库、网络请求或者其他的数据源。Model 不直接与 View 交互,只与 ViewModel 进行通信。
Model 可以是一个单独的类,也可以是一个 Repository 或者 Data Source。它负责获取数据并对数据进行操作,同时还可以对数据进行缓存或者持久化存储。
// Model
public class MainModel {
public String fetchData() {
// Fetch data from network or database
return "Hello, World!";
}
}
通信
Looper 架构中的通信是通过消息传递实现的。当 View 接收到用户操作时,它将操作转发给 ViewModel 并将数据传递给 ViewModel 进行处理。ViewModel 对数据进行处理后,将结果发送给 View 进行展示。
journey
title Looper Architecture Communication
section User Action
View -->> ViewModel: onButtonClick()
section ViewModel Processing
ViewModel -->> Model: fetchData()
ViewModel -->> View: setText(text)
section View Update
View -->> ViewModel: getTextLiveData().observe()
优势
解耦
Looper 架构通过将业务逻辑从 View 中分离出来,实现了 View 和 Model 的解耦。这样,我们可以更容易地进行单元测试,并且可以更灵活地对 View 和 Model 进行修改,而不会影响到其他组件。
可测试性
由于业务逻辑被 ViewModel 所独立管理,我们可以通过编写单元测试来验证 ViewModel 的行为。这样,我们可以快速地定位和修复问题,同时也能够确保应用程序的稳定性和质量。
















