在Android 11中,AsyncTask API已被弃用。有哪些替代方案? 您所在的位置:网站首页 bundle是什么类型 在Android 11中,AsyncTask API已被弃用。有哪些替代方案?

在Android 11中,AsyncTask API已被弃用。有哪些替代方案?

2023-05-03 15:15| 来源: 网络整理| 查看: 265

private WeakReference activityReference;

好在它被废弃了。因为WeakReference总是一个黑客,而不是一个适当的解决方案。.

现在人们将有机会对他们的代码进行消毒。

AsyncTask

基于这个代码,Progress实际上是不需要的,有一个String输入+MyPojo输出。

这实际上是很容易完成的,不需要使用任何AsyncTask。

public class TaskRunner { private final Executor executor = Executors.newSingleThreadExecutor(); // change according to your requirements private final Handler handler = new Handler(Looper.getMainLooper()); public interface Callback { void onComplete(R result); } public void executeAsync(Callable callable, Callback callback) { executor.execute(() -> { final R result = callable.call(); handler.post(() -> { callback.onComplete(result); }); }); } }

如何传入字符串?像这样。

class LongRunningTask implements Callable { private final String input; public LongRunningTask(String input) { this.input = input; } @Override public MyPojo call() { // Some long running task return myPojo; } }

而且

// in ViewModel taskRunner.executeAsync(new LongRunningTask(input), (data) -> { // MyActivity activity = activityReference.get(); // activity.progressBar.setVisibility(View.GONE); // populateData(activity, data) ; loadingLiveData.setValue(false); dataLiveData.setValue(data); }); // in Activity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); viewModel = ViewModelProviders.of(this).get(MyViewModel.class); viewModel.loadingLiveData.observe(this, (loading) -> { if(loading) { progressBar.setVisibility(View.VISIBLE); } else { progressBar.setVisibility(View.GONE); } }); viewModel.dataLiveData.observe(this, (data) -> { populateData(data); }); }

这个例子使用了一个单线程池,它适合于DB写(或序列化的网络请求),但如果你想要一些DB读或多请求,你可以考虑以下的Executor配置。

private static final Executor THREAD_POOL_EXECUTOR = new ThreadPoolExecutor(5, 128, 1, TimeUnit.SECONDS, new LinkedBlockingQueue());


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有