Android 11의 AsyncTask API 지원 중단: Java 동시성을 통한 대안
Android 11이 다가옴에 따라 Google은 AsyncTask API를 단계적으로 중단하고 개발자에게 조언합니다. 비동기 작업을 위해 java.util.concurrent를 채택합니다. 이러한 변화는 질문을 제기합니다. API 레벨 16 이상과의 호환성을 유지하면서 어떻게 AsyncTask를 java.util.concurrent로 효과적으로 대체할 수 있습니까?
활동의 정적 내부 클래스에서 다음 스니펫을 고려하세요.
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); } }
실행 가능한 솔루션 중 하나는 java.util.concurrent 패키지의 Executor를 활용하는 것입니다. Android Async API에 있는 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 }); });
Java는 Kotlin의 간결성과 일치하지 않을 수 있습니다. 이러한 대안은 AsyncTask 이후 시대의 비동기 작업을 위한 실행 가능한 솔루션을 제공하여 호환성을 보장합니다. API 레벨 16 장치를 사용합니다.
위 내용은 이전 버전과의 호환성을 유지하면서 Android에서 AsyncTask를 java.util.concurrent로 효과적으로 대체하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!