Cual es mejor, loader o AsyncTask?

Quiero saber la diferencia entre Android loader y AsyncTask, aquí la demo en Loader:

package com.android.loaderdemo; import org.json.JSONArray; import org.json.JSONObject; import android.app.Activity; import android.app.LoaderManager.LoaderCallbacks; import android.content.AsyncTaskLoader; import android.content.Context; import android.content.Loader; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.widget.TextView; import com.android.webprocessor.Http_GetServices; public class MainActivity extends Activity implements LoaderCallbacks<String> { TextView txt_username, txt_userEmail, txt_password, txt_role, txt_secretQuestion, txt_answer, txt_zipcode; private static String url = "http://dotstg1.xyz.com/loud/webservcies/GetUserProfile.svc/GetUserProfile/124"; static String response; static String name, email, Pasword, Answer, RoleId, SecretQuestion, Zip; static String useResult = null; static JSONArray userParams = null; private static final int THE_LOADER = 0x01; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e("onCreate", "onCreate"); // getSuLoaderManager().initLoader(THE_LOADER, null, this).forceLoad(); getLoaderManager().initLoader(THE_LOADER, null, this).forceLoad(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. Log.e("onCreateOptionsMenu", "onCreateOptionsMenu"); getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public Loader<String> onCreateLoader(int arg0, Bundle arg1) { Log.e("onCreateLoader", "onCreateLoader"); SampleLoader loader = new SampleLoader(this); return loader; } @Override public void onLoadFinished(Loader<String> arg0, String arg1) { txt_username = (TextView) findViewById(R.id.name); txt_userEmail = (TextView) findViewById(R.id.email); txt_password = (TextView) findViewById(R.id.password); txt_role = (TextView) findViewById(R.id.role); txt_secretQuestion = (TextView) findViewById(R.id.secretquestion); txt_zipcode = (TextView) findViewById(R.id.zipcode); txt_answer = (TextView) findViewById(R.id.answer); txt_username.setText(name); txt_userEmail.setText(email); txt_password.setText(Pasword); txt_role.setText(RoleId); txt_secretQuestion.setText(SecretQuestion); txt_answer.setText(Answer); txt_zipcode.setText(Zip); Log.e("onLoadFinished", "onLoadFinished"); } @Override public void onLoaderReset(Loader<String> arg0) { Log.e("onLoaderReset", "onLoaderReset"); } private static class SampleLoader extends AsyncTaskLoader<String> { @Override public Context getContext() { Log.e("getContext", "getContext"); return super.getContext(); } @Override public int getId() { Log.e("getId", "getId"); return super.getId(); } public SampleLoader(Context context) { super(context); Log.e("SampleLoader", "SampleLoader"); } @Override public String loadInBackground() { Log.e("loadInBackground", "loadInBackground"); try { response = Http_GetServices.connect(url); JSONObject jsonObject = new JSONObject(response); JSONObject json2 = jsonObject.getJSONObject("GetUserPrfResult"); String test = (String) json2.get("Descritption"); JSONObject json3 = json2.getJSONObject("GetUserPrfParams"); name = (String) json3.get("Name"); email = (String) json3.get("Email"); Pasword = (String) json3.get("Pasword"); RoleId = String.valueOf(json3.getInt("RoleId")); SecretQuestion = String.valueOf(json3.get("SecretQuestion")); Answer = (String) json3.get("Answer"); Zip = String.valueOf(json3.get("Zip")); } catch (Exception e) { e.printStackTrace(); } return null; } } } 

Desde aquí :

Una subclase de Loaders es el AsyncTaskLoader. Esta clase realiza la misma función que el AsyncTask, pero un poco mejor. Puede manejar los cambios de configuración de actividad más fácilmente y se comporta dentro de los ciclos de vida de fragmentos y actividades. Lo bueno es que el AsyncTaskLoader puede utilizarse en cualquier situación en la que se esté usando el AsyncTask. Siempre que los datos necesitan ser cargados en la memoria para que la actividad / el fragmento maneje, el AsyncTaskLoader puede hacer el trabajo mejor.

En mi opinión: Loader es mejor. Porque usé AsyncTask un año antes, eso es realmente una pesadilla para mí, porque no puedes controlar todo el progreso inmediatamente, como a veces, también hay un asynctask ejecutado en la actividad, pero quieres salir de la actividad, debes llamar asynctask.cancel() , pero, este método: cancel() no es cancelar el asynctask straightway.so en este caso, su aplicación se bloqueará debido a esto. Por lo tanto, si utiliza asynctask, debe tener cuidado sobre cómo cancelar la tarea.

  • ¿No es necesario android.permission.RECEIVE_BOOT_COMPLETED?
  • El receptor de arranque no funciona
  • onCreateLoader bloquea el subproceso de interfaz de usuario
  • Problemas con las devoluciones de llamada personalizadas de AsyncTaskLoader
  • Android SQLite Query, insertar, actualizar, eliminar, siempre tiene que estar en el hilo de fondo?
  • Android cursorLoader con paginación o carga más funcionalidad?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.