簡體   English   中英

異步任務替換

[英]Async Task Replacement

什么是異步任務的替代品,因為它已被棄用以及如何使用替代品? 有什么建議么。

與異步任務功能相同的替換。

使用 AsyncTask API 可能允許您執行異步任務,但存在一些顯而易見的問題:

  1. 設置對於簡單的任務來說太麻煩了
  2. API容易出現內存泄漏
  3. 從 API 級別 30 開始,該 API 已被棄用

已棄用的 AsyncTask 的替代品

由於 AsyncTask 的缺點和棄用,開發人員應該轉向以下替代解決方案之一進行 Android 中的異步編程:

  • Kotlin 協程
  • RxJava
  • 執行者

前兩個更受歡迎,API 用法更簡單

您可以直接使用 java.util.concurrent 包中的執行器。

我還搜索了它,並在這個 Android Async API is Deprecated 帖子中找到了解決方案。

不幸的是,該帖子使用的是 Kotlin,但經過一些努力我將其轉換為 Java。 所以這是解決方案。

ExecutorService executor = Executors.newSingleThreadExecutor();
Handler handler = new Handler(Looper.getMainLooper());

executor.execute(new Runnable() {
    @Override
    public void run() {

        //Background work here

        handler.post(new Runnable() {
            @Override
            public void run() {
                //UI Thread work here
            }
        });
    }
});

很簡單吧? 如果您在項目中使用 Java 8,則可以稍微簡化它。

ExecutorService executor = Executors.newSingleThreadExecutor();
Handler handler = new Handler(Looper.getMainLooper());

executor.execute(() -> {
    //Background work here
    handler.post(() -> {
        //UI Thread work here
    });
});

盡管如此,它在代碼的簡潔性方面仍然無法擊敗kotlin,但比以前的java版本要好。

希望這會幫助你。 謝謝你

AsyncTask 允許您執行后台操作並在 UI 線程上發布結果。

您可以使用以下替代方案:

WorkManager :您可以使用 WorkManager(Android Jetpack 庫的一部分)來安排和管理后台任務。

Coroutines :您可以使用 kotlinx.coroutines 包中的 CoroutineScope 類和相關類來執行后台操作。 協程是一種輕量級線程選項,可讓您編寫異步代碼。

Executor框架:可以使用java.util.concurrent包中的Executor類及相關類進行后台操作。 這是一個更強大的選項,允許您指定線程池並自定義任務的執行。

Threads :您可以使用 Thread 類來執行后台操作。 這是一個低級選項,需要您自己處理線程管理和與主線程的通信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM