Pemberhentian API AsyncTask dalam Android 11: Alternatif dengan Java Concurrency
Memandangkan Android 11 menghampiri, Google sedang menghentikan API AsyncTask secara berperingkat, menasihati pembangun untuk mengguna pakai java.util.concurrent untuk operasi tak segerak. Anjakan ini menimbulkan persoalan: bagaimana anda boleh menggantikan AsyncTask secara berkesan dengan java.util.concurrent sambil mengekalkan keserasian dengan tahap API 16 dan ke atas?
Pertimbangkan coretan berikut daripada kelas dalaman statik Aktiviti:
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); } }
Satu penyelesaian yang berdaya maju ialah memanfaatkan Pelaksana daripada pakej java.util.concurrent. Berikut ialah pelaksanaan Java berdasarkan pendekatan Kotlin yang ditemui dalam Android Async API is Deprecated post:
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 } }); } });
Untuk pengguna Java 8, versi yang lebih ringkas tersedia:
ExecutorService executor = Executors.newSingleThreadExecutor(); Handler handler = new Handler(Looper.getMainLooper()); executor.execute(() -> { // Background work here handler.post(() -> { // UI Thread work here }); });
Sementara Java mungkin tidak sepadan dengan ringkas Kotlin, alternatif ini menyediakan penyelesaian yang berdaya maju untuk operasi tak segerak dalam era pasca-AsyncTask, memastikan keserasian dengan peranti tahap API 16.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggantikan AsyncTask dengan java.util.concurrent dengan Berkesan dalam Android sambil Mengekalkan Keserasian Ke Belakang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!