EDYCJA : To pytanie nie jest duplikatem jak
- Zaledwie kilka dni temu dokonano zatwierdzenia AOSP dotyczącego wycofania.
- Drugie pytanie dotyczy używania AsyncTaskLoader zamiast AsyncTask.
Google wycofuje interfejs API Android AsyncTask w systemie Android 11 i sugeruje jego użycie java.util.concurrent. możesz sprawdzić zatwierdzenie tutaj
*
* @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> {
Jeśli utrzymujesz starszą bazę kodu z asynchronicznymi zadaniami w Androidzie, prawdopodobnie będziesz musiał ją zmienić w przyszłości. Moje pytanie brzmi: jaka powinna być właściwa zamiana fragmentu kodu pokazanego poniżej przy użyciu java.util.concurrent. Jest to statyczna wewnętrzna klasa działania. Szukam czegoś, co będzie działać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) ;
}
}
AsyncTasknie można go usunąć bez naruszenia kompatybilności wstecznej.