Google 正在弃用 Android 11 中的 Android AsyncTask API,并建议改用 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
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) ;
}
}
原文由 Zeeshan 发布,翻译遵循 CC BY-SA 4.0 许可协议
}
class LongRunningTask implements Callable {
private final String input;
}
// in ViewModel taskRunner.executeAsync(new LongRunningTask(input), (data) -> { // MyActivity activity = activityReference.get(); // activity.progressBar.setVisibility(View.GONE); // populateData(activity, data) ;
});
// in Activity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
}
private static final Executor THREAD_POOL_EXECUTOR = new ThreadPoolExecutor(5, 128, 1, TimeUnit.SECONDS, new LinkedBlockingQueue());
”`