调用viewmodel方法时,UI被阻止

时间:2019-04-05 18:22:51

标签: android kotlin

我遇到一个问题,即无论何时我调用此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调用更快的方法,在这种情况下不会发生问题

2 个答案:

答案 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"
}