Android 如何使用MVVM体系结构正确处理ProgressDialog

Android 如何使用MVVM体系结构正确处理ProgressDialog,android,mvvm,android-asynctask,progressdialog,Android,Mvvm,Android Asynctask,Progressdialog,我正在做一个项目,我们决定实现MVVM而不是传统的MVC。我正在寻找在这种情况下设置ProgressDialog的正确方法 通常情况下,您在自己的异步任务上有一个ProgressDialog,在doInBackground()调用期间,您将获取需要获取的任何数据。但是,因为我们正在运行MVVM,所以我正在等待VM返回数据以更新视图 也许我只是拙劣地实现了我最初认为是正确的解决方案,但我试图让进度对话框异步任务等待VM返回值。类似于下面的内容 // Listener that connects V

我正在做一个项目,我们决定实现MVVM而不是传统的MVC。我正在寻找在这种情况下设置ProgressDialog的正确方法

通常情况下,您在自己的异步任务上有一个ProgressDialog,在doInBackground()调用期间,您将获取需要获取的任何数据。但是,因为我们正在运行MVVM,所以我正在等待VM返回数据以更新视图

也许我只是拙劣地实现了我最初认为是正确的解决方案,但我试图让进度对话框异步任务等待VM返回值。类似于下面的内容

// Listener that connects VM and View
onPropertyChange() {
    // Update UI
    ...
    flag = true;
}

// Within myAsyncTask
onPreExecute() {
    // Set up ProgressDialog
}

doInBackground() {
    while (!flag) { }
}

onPostExecute() {
    // Dimiss ProgressDialog
}
onCreate() {
    // Inject VM and perform super.OnCreate()
    ...

    // Set up ProgressDialog
}

onPropertyChange() {
    // Update UI and dismiss ProgressDialog
}
我认为这是一个混乱的解决方案,因此改为

// Listener that connects VM and View
onPropertyChange() {
    // Update UI
    ...
    flag = true;
}

// Within myAsyncTask
onPreExecute() {
    // Set up ProgressDialog
}

doInBackground() {
    while (!flag) { }
}

onPostExecute() {
    // Dimiss ProgressDialog
}
onCreate() {
    // Inject VM and perform super.OnCreate()
    ...

    // Set up ProgressDialog
}

onPropertyChange() {
    // Update UI and dismiss ProgressDialog
}
当ProgressDialog在自己的异步任务上而不是在主线程上时,是否有更好的方法来实现此功能?

只需将进度条(或等效的工具)绑定到视图模型上的PercentComplete INPC属性。INPC更新由绑定自动编组。只是不要在5秒钟的时间间隔内对该属性进行10k更新,并期望在UI中看到任何情况。而(!flag){}否。不是在异步任务中。异步任务在同一线程上运行。通过这样做,您将阻止任何其他异步任务的运行。如果您确实需要,请使用线程,而不是异步任务。只需将进度条(或等效的内容)绑定到视图模型上的PercentComplete INPC属性。INPC更新由绑定自动编组。只是不要在5秒钟的时间间隔内对该属性进行10k更新,并期望在UI中看到任何情况。而(!flag){}否。不是在异步任务中。异步任务在同一线程上运行。通过这样做,您将阻止任何其他异步任务的运行。如果您确实需要它,请使用线程,而不是异步任务。