没有循环的AsyncTask更新进度

时间:2018-02-23 11:40:07

标签: android android-asynctask async-onprogressupdate

我有一个asynctask,在doInBackground里面,我没有for / while循环。相反,我有一个不同的类,该类使用for循环生成一个列表。那么如何使用onProgressUpdate更新UI?

这是:

@Override
protected List<MyObject> doInBackground(Void... voids) {
    IAppLogic appLogic = new AppLogic(mContext);
    List<MyObject> list =  appLogic.getApps(ALL_APPS);

    return list;
}

MyObject是一个自定义对象,IAppLogic是获取已安装应用程序的类的接口。

1 个答案:

答案 0 :(得分:0)

您可以通过为import { GoogleSignin } from 'react-native-google-signin'; - 方法提供callback参数来实现此目的。伪代码:

getApps()

简单地说:每当您找到某些内容时,您的代码会通知调用方interface AppFoundCallback { public onAppFound(App app, int progress); } // in AppLogic.getApps: public getApps(String filter, AppFoundCallback callback) for (int i = 0; i < listOfApps.length; i++) { // Do the work you need to do here. int progress = (i / listOfApps.length) * 100; callback.onAppFound(app, progress); } } // in your Task: class Task extends AsyncTask implements AppFoundCallback { // Implement the callback @Override onAppFound(App app, int progress) { this.publishProgress(progress); } // Setup and register the listener @Override protected void doInBackground() { // Ohter stuff List<MyObject> list = appLogic.getApps(ALL_APPS, this); } // Render progress updates on the UI @Override protected void onProgressUpdate(Integer... progress) { progressView.setProgress(progress[0]); } } - 方法。然后将其作为进度更新发布。 getApps() - 方法是AsyncTask的一部分,它将负责在UI-Thread上调用publishProgress(),以便您只需更新视图。