Actualizar la interfaz de usuario de la actividad cuando no esté visible

¿Está bien actualizar una actividad cuando no está en primer plano. No estoy preguntando si se puede hacer desde un hilo de fondo.

Considera esto:

Tengo dos actividades Actividad-A y Actividad-B.

Inicie un AsyncTask de Activity-A y luego vaya a Activity-B. Ahora después de algún tiempo, el AsyncTask termina y en el método onPostExecute (), intento actualizar las imágenes que están en Activity-A. Todo esto está sucediendo cuando la Actividad-B está en primer plano.

¿Es razonable el escenario anterior o tengo que esperar hasta que Activity-A esté en primer plano para actualizar su interfaz de usuario?

Si puedo actualizar la interfaz de usuario de forma segura en el escenario anterior, ¿qué debo hacer cuando se cancela o termina la actividad-A y el AsyncTask sigue completando e intenta actualizar la interfaz de usuario? [Suponiendo que tengo que hacer una comprobación de isFinishing antes de actualizar la interfaz de usuario]

Lo anterior es una versión simplificada de lo que estoy tratando de hacer. En realidad, tengo un ImageView personalizado que carga imágenes desde el servidor y se actualiza cuando se realiza la solicitud. Así que me pregunto qué escenarios tengo que preocuparme si la vista se está actualizando cuando la actividad no está en primer plano o ha terminado / destruido.

EDIT: Aquí hay una muestra que está funcionando.

public class MainActivity extends Activity implements OnClickListener { ImageView mImageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mImageView = (ImageView) findViewById(R.id.iv_image); findViewById(R.id.btn_activity_2).setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_activity_2: new BackGroundTask().execute(); startActivity(new Intent(MainActivity.this, Activity2.class)); break; } } private class BackGroundTask extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... params) { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); mImageView.setImageResource(R.drawable.ic_launcher); } } } 

El diseño es sólo un LinearLayout con botón e imagen.

No, no es. No se puede actualizar una interfaz de usuario que no sea visible 🙂 Actividad A es OnPause (o detenido si es necesario).

Debe implementar un ActivityCycle LIFE razonable para que ActivityA pueda actualizar su interfaz de usuario durante onResume (); El AsyncTask sólo debe tocar los datos que la interfaz de usuario necesita para dibujar a sí mismo.

Su "Vista de IMAGEN PERSONALIZADA" debe poder cargar la imagen desde un lugar fuera de la Actividad.

Si su CustomImageView es (o puede pasar como un ImageView normal), puede utilizar algo como Picasso para descargar el mapa de bits de manera correcta.

  • Mipmap Android, densidad de la imagen?
  • Tono de cambio de imagen de Android para simular el botón de clic
  • Android: Actualización sobre el hilo de la interfaz de usuario muy rápido
  • ¿Cuál es el propósito de la declaración de devolución en doInBackground () de ASynctask?
  • ¿Cómo mostrar iconos en el menú de desbordamiento de ActionBar?
  • Android menú desplegable (sin girador!)
  • Obtener / recoger una imagen de la aplicación de Android integrada en la Galería mediante programación
  • ¿El ancho / altura de diseño relativo no funciona de forma programática?
  • Barra de estado de superposición en android 4.2.2+
  • Extraño problema con android: ellipsize = "end"
  • En el adaptador gridview, getView (position == 0) fue invocado demasiadas veces para medir el diseño cuando setImageBitmap () en un cargador
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.