Android生命周期:是否应该在启动时调用onResume()?

use*_*343 3 android android-lifecycle

我正在尝试Android应用程序开发傻瓜的一个例子,这是一个简单的应用程序,切换手机的铃声模式.代码如下.

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,因为我只有重写onCreate()(表示在默认情况下,"正常"模式图像)和onResume(),它的预期,以"沉默"如果我更改手机模式为静音的应用程序之外的图像的变化(在onResume()我检查当前的状态和更新UI),但为什么它仍然显示正确的图像,即使我了进程然后将手机模式更改为静音?

我希望应用程序重新加载并显示默认图像,这是正常的.不是正确但令人困惑的无声图像.

Com*_*are 5

onResume()在任何时候活动重新获得前景输入时调用.这包括:

  • 当其他东西有前景后返回到屏幕(例如,设置),和

  • 在此过程中首次创建它时(包括因为您从DDMS中删除旧过程而需要的任何新过程)

因此,在任何一种情况下,您的代码都将检查振铃模式的状态,并且在任何一种情况下都将使用正确的图像.