谷歌正在逐步淘汰Android AsyncTask API,建议在Android 11中使用java.util.concurrent
代替。您可以查看此提交。
*
* @deprecated Use the standard <code>java.util.concurrent</code> or
* <a href="https://developer.android.com/topic/libraries/architecture/coroutines">
* Kotlin concurrency utilities</a> instead.
*/
@Deprecated
public abstract class AsyncTask<Params, Progress, Result> {
如果您正在维护一个在Android中具有异步任务的旧代码库,那么未来可能需要更改它。 我的问题是:使用java.util.concurrent
,以下代码片段的适当替换应该是什么? 它是Activity的静态内部类。 我正在寻找适用于minSdkVersion 16
的解决方案。
如果您正在维护一个在Android中具有异步任务的旧代码库,那么未来可能需要更改它。 我的问题是:使用java.util.concurrent
,以下代码片段的适当替换应该是什么? 它是Activity的静态内部类。 我正在寻找适用于minSdkVersion 16
的解决方案。
private static class LongRunningTask extends AsyncTask<String, Void, MyPojo> {
private static final String TAG = MyActivity.LongRunningTask.class.getSimpleName();
private WeakReference<MyActivity> activityReference;
LongRunningTask(MyActivity context) {
activityReference = new WeakReference<>(context);
}
@Override
protected MyPojo doInBackground(String... params) {
// Some long running task
}
@Override
protected void onPostExecute(MyPojo data) {
MyActivity activity = activityReference.get();
activity.progressBar.setVisibility(View.GONE);
populateData(activity, data) ;
}
}
AsyncTask
不能被删除,否则会破坏向后兼容性。 - CommonsWareAsyncTask
被删除,这样做会破坏许多现有的应用程序。程序员应该学习除了AsyncTask
之外的其他技术(如RxJava、Kotlin协程等),因为它们更好,并且在专业环境中使用得更广泛。 - CommonsWare