EDIT : questa domanda non è un duplicato di
- Solo un paio di giorni fa è stato eseguito il commit di AOSP sulla deprecazione.
- L'altra domanda riguarda l'uso di AsyncTaskLoader su AsyncTask.
Google sta deprecando l'API Android AsyncTask in Android 11 e sta suggerendo di utilizzare java.util.concurrentinvece. puoi dare un'occhiata al commit qui
*
* @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> {
Se stai mantenendo una base di codice precedente con attività asincrone in Android, probabilmente dovrai cambiarla in futuro. La mia domanda è che cosa dovrebbe essere la corretta sostituzione dello snippet di codice mostrato sotto usando java.util.concurrent. È una classe interna statica di un'attività. Sto cercando qualcosa con cui lavorareminSdkVersion 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) ;
}
}
AsyncTasknon può essere rimosso senza interrompere la compatibilità all'indietro.