Android AsyncTask

¿Estoy utilizando completamente mi AsyncTask? ¿Puede alguien corregir mis códigos si es incorrecto. Sólo quiero asegurarme de que mi AsyncTask funcione completamente para que no tenga problemas en el futuro. Quiero usar AsyncTask para todas mis clases. ¿Es una buena práctica?

public class SingleMenuItemActivity extends Activity { // XML node keys static final String KEY_TITLE = "title"; static final String KEY_ARTIST = "artist"; static final String KEY_THUMB_URL = "thumb_url"; private ProgressDialog pDialog; String title; String artist; String image_url; ImageView view; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.single_list_item); new loadSingleView().execute(); view = (ImageView) findViewById(R.id.single_image); } public class loadSingleView extends AsyncTask<String, String, String> { @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog( SingleMenuItemActivity.this); pDialog.setMessage("Connecting to Server ..."); pDialog.setIndeterminate(false); pDialog.setCancelable(false); pDialog.show(); } @Override protected String doInBackground(String... args) { // updating UI from Background Thread Intent in = getIntent(); image_url = in.getStringExtra(KEY_THUMB_URL); title = in.getStringExtra(KEY_TITLE); artist = in.getStringExtra(KEY_ARTIST); return null; } @Override protected void onPostExecute(String args) { // dismiss the dialog after getting all products ImageLoader imgLoader = new ImageLoader(getApplicationContext()); imgLoader.DisplayImage(image_url, view); TextView lblName = (TextView) findViewById(R.id.name_title); TextView lblCost = (TextView) findViewById(R.id.name_artist); lblName.setText(title); lblCost.setText(artist); pDialog.dismiss(); } } 

onPostExecute() actualizar la interfaz de usuario del método onPostExecute() . Me gusta mover mi tarea en sus propios archivos. De esta manera tenemos una separación de las preocupaciones que hace que sea más fácil de entender el código. Podemos hacerlo utilizando una interfaz para definir un método de devolución de llamada

 public class LoadSingleView extends AsyncTask<String, String, String> { public interface LoadSingleViewHandler { void onSingleViewLoad(String result); } private LoadSingleViewHandler handler; public LoadSingleView(LoadSingleViewHandler handler) { this.handler = handler; } @Override protected String doInBackground(String... args) { // Do operation here and return the result // Operation is usually some network request // or something that will take alot of time } @Override protected void onPostExecute(String result) { handler.onSingleViewLoad(result); } } 

Ahora solo inicie la tarea desde la actividad y LoadSingleViewHandler la actividad implemente la interfaz LoadSingleViewHandler .

No puedes actualizar la interfaz de usuario desde el subproceso de Backgroud. Por ejemplo, Use doInBackground() para obtener datos del servidor. Todo este proceso se realizará en Background.And onPostExecute es actualizar la interfaz de usuario después de que el proceso de fondo haya finalizado

Para más información Estudio aquí

Ejemplo 1

Ejemplo 2

Puedes encontrar muchos más en Google 🙂

Sí, todas las operaciones de la interfaz de usuario deben realizarse en el subproceso principal, período. Puede descargar la imagen que desea mostrar en doInBackground (), actualizar la interfaz de usuario completa en onPostExecute ().

Además, es una buena práctica mover el AsyncTask fuera de su actividad. Es un poco más de trabajo, pero como la aplicación se vuelve más grande y más complicado, hará que su vida más fácil. Puede utilizar controladores para pasar datos de AsyncTask a sus actividades.

Hacer en el fondo debe ser utilizado principalmente para aquellas tareas que no deben ser realizadas en los hilos de la interfaz de usuario, así que úselo para conectar con el servidor (API) para recibir y enviar datos. No lo use sin necesidad …

  • Explique AsyncTaskLoader
  • Java.lang.NullPointerException: Intenta invocar el método virtual 'android.view.View .MainActivity.findViewById (int)' en una referencia de objeto nulo
  • Pantalla de inicio de sesión que muestra progressdialog y permite cambiar la orientación de la pantalla
  • ¿Qué ocurre con la ejecución de AsyncTasks cuando cambia la actividad?
  • Android equivalente de getActivity () de / en ActionBarActivity
  • Realm.io y consultas asincrónicas
  • Necesito saber cuánto bytes se ha cargado para actualizar una barra de progreso android
  • .execute no se puede resolver a un tipo - AsyncTask (Android)
  • AsyncTask execute () o executeOnExecutor ()?
  • Uso de espera en AsyncTask
  • ¿Por qué androide logcat no muestra el seguimiento de la pila para una excepción de tiempo de ejecución?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.