gpt4 book ai didi

android - 扩展 LoaderManager - 如何实现 "publishProgress"?

转载 作者:行者123 更新时间:2023-11-30 01:46:41 25 4
gpt4 key购买 nike

假设我有一个非常简单的长时间运行的任务作为 AsyncTaskLoader:

public class DumbLoader extends AsyncTaskLoader{
private static final String TAG = "DumbLoader";

public DumbLoader(Context context) {
super(context);
}

@Override
public List<String> loadInBackground() {
List<String> allData = new ArrayList<>();
List<String> someData = DummyData.getItems();

notify(someData.size()) ;// publish amount of elements of someData

List<String> someOtherData = DummyData.getSomeOtherItems();
notify(someOtherData.size()); //publish amount of elements of someOtherData
allData.addAll(someData);
allData.addAll(someOtherData);
return allData;
}
}

我有一个实现 LoaderCallbacks 的 Activity :

@Override
public Loader<List<String> onCreateLoader(int i, Bundle bundle) {
return new DumbLoader(this);
}

@Override
public void onLoadFinished(Loader<String> dummyLoader, List<String> result) {
// do something with result
}

@Override
public void onLoaderReset(Loader<String> dummyLoader) {

}

您将如何实现类似 AsyncTask 的publishProgress

使用 LoaderManager 的全部目的是在 Context/Orientation 更改时不必使用引用 - 然而,使用 publishProgress 我能想到的唯一方法是传递 Handler 进入我的 DumbLoader 然后通知我。这是一种安全的方法吗?有更好的方法吗?

编辑:我的例子可能有点误导。如果有两个单独的函数都返回我的“最终”结果的值,我可以轻松地为每个函数分别调用 AsyncTaskLoader。我修改了它以可视化“发布”的数据可能与最终结果不同(在这个例子中,我想知道数据的大小,而不是数据)。

最佳答案

在我看来,对于这个用例,indeterminate ProgressBar 是显而易见的选择。我会在 onCreateLoader 被调用时实例化它,并在 onLoadFinished

中关闭它

however, with publishProgress the only way I can think of is passing a Handler into my DumbLoader which then notifies me. Is this a safe way? Are there better ways?

我会使用 LocalBroadcastManager。 Intent 将仅在您的应用程序内广播。在您的 Activity/Fragment 中注册一个 BroadcastReceiver 并在调用 onReceiver 时更新进度。 BroadcastReceiver 的好处是它总是在 ui 线程上运行

关于android - 扩展 LoaderManager - 如何实现 "publishProgress"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33625156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com