谷歌反对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
. 它是活动的静态内部类。我正在寻找一些可以与之合作的东西 minSdkVersion 16
```
private static class LongRunningTask extends AsyncTask<String, Void, MyPojo> {
private static final String TAG = MyActivity.LongRunningTask.class.getSimpleName();
private WeakReference 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) ;
}
}
16条答案
按热度按时间bhmjp9jg16#
公认的答案是好的。但是我没有看到cancel()方法的实现
因此,我可以取消正在运行的任务(模拟取消)的实现如下。在任务中断的情况下,需要取消才能不运行postexecute()方法。
使用此类的示例: