Android Lifecycle: ¿Se supone que onResume () se llamará durante el inicio?

Estoy probando un ejemplo de Android Application Development for Dummies , que es una aplicación sencilla que cambia el modo de timbre del teléfono. El código está abajo.

public class SilentModeToggleActivity extends Activity { private AudioManager mAudioManager; private boolean mPhoneIsSilent; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE); checkIfPhoneIsSilent(); setButtonClickListener(); } @Override public void onResume() { super.onResume(); checkIfPhoneIsSilent(); toggleUi(); } private void checkIfPhoneIsSilent() { int ringerMode = mAudioManager.getRingerMode(); if (ringerMode == AudioManager.RINGER_MODE_SILENT) { mPhoneIsSilent = true; } else { mPhoneIsSilent = false; } } private void setButtonClickListener() { Button toggleButton = (Button) findViewById(R.id.toggleButton); toggleButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if (mPhoneIsSilent) { mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); mPhoneIsSilent = false; } else { mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); mPhoneIsSilent = true; } toggleUi(); } }); } private void toggleUi() { ImageView imageView = (ImageView) findViewById(R.id.phone_icon); Drawable newPhoneImage; if (mPhoneIsSilent) { newPhoneImage = getResources().getDrawable(R.drawable.phone_silent); } else { newPhoneImage = getResources().getDrawable(R.drawable.phone_on); } imageView.setImageDrawable(newPhoneImage); } } 

Mi pregunta es desde que sólo anula onCreate() (muestra la imagen de modo "normal" por defecto) y onResume() , se espera que la imagen cambie a "silent" si cambio el modo de teléfono a silent fuera de la aplicación (en onResume() Comprobar el estado actual y actualizar la interfaz de usuario), pero ¿por qué todavía muestra la imagen correcta, incluso si matar el proceso y luego cambiar el modo de teléfono a silencio?

Esperaría que la aplicación se vuelva a cargar y muestre la imagen predeterminada, que es normal. No es la imagen silenciosa correcta pero confusa.

onResume() se llama cada vez que una actividad recupera la entrada de primer plano. Esto incluye:

  • Cuando regresa a la pantalla después de que algo más tuviera el primer plano (por ejemplo, Configuración) y

  • Cuando se está creando por primera vez en este proceso (que incluye cualquier nuevo proceso requerido porque mató el antiguo de DDMS)

Por lo tanto, su código examinará el estado del modo de timbre en cualquier caso y utilizará la imagen apropiada en cualquier caso.

onResume no se limita a ser llamado después de que la actividad se ha detenido, se llama cuando la actividad va a la parte superior de la pila de actividades. Eso incluye la primera vez que se muestra después de que se ha creado.

La duplicación del desarrollador es bastante detallada acerca de cómo funciona el ciclo de vida de actiivty, incluyendo un diagrama de flujo y una tabla que describe cuándo se llama realmente cada llamada de retorno del ciclo de vida.

Creo que encontrará las actualizaciones recientes de la documentación para desarrolladores de Android que aclararán su respuesta. onResume () se llamará cada vez que su actividad se inicia por primera vez, llevar la actividad al primer plano o sacar el teléfono de la pantalla de bloqueo.

Documentación de la actividad de Android

onResume Se llama al inicio. Consulte la documentación sobre el ciclo de vida de la actividad aquí .

  • ¿Cómo ejecutar una tarea de fondo cuando la aplicación de Android está cerrada / configurada como fondo?
  • Abra / cierre correctamente una base de datos con el patrón de diseño Singleton
  • AsyncTask & runtime config change: ¿qué enfoques, con ejemplos de código conciso, respalda el equipo de Android?
  • RxJava se vuelve a suscribir al evento tras la restauración de la actividad
  • ¿Es realmente necesario RoboSpice shouldStop ()?
  • ¿Puede Android matar a mi aplicación mientras está en medio de una ejecución de bucle?
  • onDestroy () se llama cuando se presiona el botón de retroceso
  • En Activity.onCreate (), ¿por qué Intent.getExtras () a veces devuelve null?
  • IllegalArgumentException cuando se utiliza Otto con un fragmento retenido
  • ANDROID: Estado de actividad después de pulsar el botón de retroceso
  • ¿Android pasa información persistente en paquetes o usa un patrón singleton?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.