0

我遇到了一个问题,每当我调用此 ViewModel 方法时,我都会阻止 UI 并且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 调用更快的方法,在这种情况下问题不会发生

4

2 回答 2

1

我建议从 UI 线程中获取长时间运行的任务。您可以添加使用可运行或异步任务。

例如:

    Runnable runnable = new Runnable() {
         @Override
         public void run() {
             sendRegistrationViewModel.sendRegistration();
         }
    };

    AsyncTask.execute(runnable);
于 2019-04-05T18:27:37.203 回答
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"
}
于 2019-04-05T18:50:45.347 回答