我遇到一个问题,即无论何时我调用此ViewModel方法,都会阻塞UI,即使debbuger显示正常调用行ui_registration_done_progressBar.visibility = View.VISIBLE
也不执行
sendRegistration
方法处理很多事情,并且需要花费一些时间来完成,一旦完成,UI就会被解锁并执行ui_registration_done_progressBar.visibility = View.VISIBLE
override fun onClick(v: View?) {
when(v?.id){
R.id.ui_registration_done_next ->{
ui_registration_done_progressBar.visibility = View.VISIBLE
sendRegistrationViewModel.sendRegistration()
}
}
}
我试图从ViewModel调用更快的方法,在这种情况下不会发生问题
答案 0 :(得分:1)
我建议将长时间运行的任务从UI线程中删除。您可以添加使用可运行任务或异步任务。
例如:
Runnable runnable = new Runnable() {
@Override
public void run() {
sendRegistrationViewModel.sendRegistration();
}
};
AsyncTask.execute(runnable);
答案 1 :(得分:0)
您可以使用doAsync在后台线程中运行任务
import org.jetbrains.anko.doAsync
...
...
override fun onClick(v: View?) {
when(v?.id){
R.id.ui_registration_done_next ->{
doAsync {
ui_registration_done_progressBar.visibility = View.VISIBLE
sendRegistrationViewModel.sendRegistration()
}
}
}
}
将依赖项添加到您的build.gradle
文件中:
dependencies {
...
...
//* To use doAsync instead of AsyncTask
implementation "org.jetbrains.anko:anko-commons:0.10.4"
}