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; } } }
- Detectar si HTC "Fast boot" está habilitado
- Boot / ScreenOn Broadcast Receiver no funciona
- BroadcastReceiver no recibe BOOT_COMPLETED
- Uso de Loader en API 8
- Android diseño: fondo de servicio de larga duración o AlarmManager?
- ¿Cómo subir el archivo a la caja de la url?
- Recepción de ADB BOOT_COMPLETE
- Android: LoaderCallbacks.OnLoadFinished llamado dos veces
- Dex Loader No se puede ejecutar Los archivos dex múltiples definen
- Android: errores de difusión no ordenados con GCM
- Cómo desplazar un ListView en android programatically a hasta gesto hacia abajo
- ¿Los usuarios de Samsung Glaxy S4 informan que el receptor BOOT_COMPLETED no funcionará?
- Inflar diseño en ListItem basado en la variable específica ListItem
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.
- La autenticación de Android HttpClient siempre devuelve código 401
- Análogo incorrecto de cadenas de fecha en SimpleDateFormat