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:
- Carga lenta del diseño
- 3 Puntos después de un texto que no encaja en el tamaño de vista de texto
- Fragmento no se elimina visualmente
- ¿Cómo puedo cambiar colores en mi StateListDrawable?
- Cómo rotar EditText manualmente en Android
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.
- Sombra interna en el círculo
- Ver contenido a continuación ExpandableListView
- Android: las trampas de eliminar carpetas ldpi / mdpi
- Diferencia entre MotionEvent.getRawX y MotionEvent.getX
- ¿Cuáles son las opciones para la optimización de la interfaz de usuario de Android?
- Cómo crear Android La vista de cuadrícula de Google Play como Widget con imágenes de diferentes tamaños cargadas dinámicamente
- Crear barra de búsqueda persistente en android
- Creación de vistas dentro de un hilo de trabajo
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.
- Cómo aumentar el tamaño de imagen de mapa de bits de acuerdo con el tamaño de pantalla del teléfono?
- anuncio chartboost aparece sólo una vez en android?