[Android] AsyncTask 在Android 11開始deprecate,解法: 使用 Executors 替代

前言: 


長期以來(Android 11),都使用AsyncTask來進行backend與frontend 溝通資料並更新UI。


也應該開始用新的方法來取代舊方式了(使用 Executors 替代AsyncTask)。



解法 & 範例:


JAVA程式碼如下:

public class TestActivity extends AppCompatActivity {

    private ExecutorService executorService;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        executorService = Executors.newFixedThreadPool(1);
        doAsyncCode();
    }

    private void doAsyncCode() {
        executorService.submit(new Runnable() {
            @Override
            public void run() {
                // 执行你的耗时操作代码
                ...
                
                doOnUiCode();
            }
        });
    }

    private void doOnUiCode() {
        Handler uiThread = new Handler(Looper.getMainLooper());
        uiThread.post(new Runnable() {
            @Override
            public void run() {
                // 更新你的UI
            }
        });
    }

    @Override
    protected void onStop() {
        super.onStop();

        if (!executorService.isShutdown()) {
            executorService.shutdownNow();
        }
    }
}


Kotlin 如下:

導入LIB:

implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'


Kotlin程式碼如下:

class MainActivity : AppCompatActivity() {
    val errorHandler = CoroutineExceptionHandler { coroutineContext, throwable ->
        // 发生异常时的捕获
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        GlobalScope.launch(errorHandler) {
            withContext(Dispatchers.IO) {
                // 执行你的耗时操作代码
                ...

                doOnUiCode()
            }
        }
    }

    private suspend fun doOnUiCode() {
        withContext(Dispatchers.Main) {
            // 更新你的UI
        }
    }
}


參考:

https://www.jianshu.com/p/ba309c0cf533


 

留言

熱門文章