แก้ไข : คำถามนี้ไม่ซ้ำกันว่า
- เพียงสองสามวันกลับ AOSP กระทำเมื่อเลิกใช้แล้ว
- คำถามอื่น ๆ เกี่ยวกับการใช้ AsyncTaskLoader ผ่าน AsyncTask
Google กำลังเลิกใช้ Android AsyncTask API ใน Android 11 และแนะนำให้ใช้java.util.concurrentแทน คุณสามารถตรวจสอบการกระทำที่นี่
*
* @deprecated Use the standard <code>java.util.concurrent</code> or
* <a href="https://developer.android.com/topic/libraries/architecture/coroutines">
* Kotlin concurrency utilities</a> instead.
*/
@Deprecated
public abstract class AsyncTask<Params, Progress, Result> {
หากคุณกำลังบำรุงรักษา codebase ที่เก่ากว่าด้วยงานอะซิงโครนัสใน Android คุณอาจต้องเปลี่ยนมันในอนาคต java.util.concurrentคำถามของฉันคือสิ่งที่ควรจะทดแทนที่เหมาะสมของข้อมูลโค้ดที่แสดงด้านล่างใช้ มันเป็นคลาสภายในที่คงที่ของกิจกรรม ฉันกำลังมองหาบางอย่างที่จะทำงานด้วยminSdkVersion 16
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) ;
}
}
AsyncTaskไม่สามารถลบออกได้โดยไม่ทำลายความเข้ากันได้ย้อนหลัง