【发布时间】:2020-03-05 03:44:06
【问题描述】:
Google 正在 Android 11 中弃用 Android AsyncTask API,并建议改用 java.util.concurrent。你可以查看提交here
*
* @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 正确替换下面显示的代码 sn-p。它是 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) ;
}
}
【问题讨论】:
-
“已弃用”表示 Google 建议您改用其他方式。这并不意味着该类将很快被删除。特别是,
AsyncTask不能在不破坏向后兼容性的情况下被删除。 -
@Style-7 不是。
-
这是一场灾难。推荐使用 Android 官方文档中的
AsyncTask。我是一名后端开发人员,已经熟悉 executorService。对于这个建议,我迁移了所有后台任务以使用AsyncTask。现在他们告诉我们不要使用它? -
@Duna:有什么例子吗?他们从库中删除不推荐使用的方法,因为开发人员控制他们使用的库的版本。但是,正如我所指出的,如果不破坏向后兼容性,就无法删除
AsyncTask。 -
@Addy:我在这里评论的具体问题是
AsyncTask被删除,如果不破坏大量现有应用程序,这是不可能发生的。程序员应该学习AsyncTask以外的其他技术(RxJava、Kotlin 协程等),因为它们更好,并且在这一点上更广泛地用于专业环境。
标签: java android kotlin android-asynctask kotlin-coroutines