4

我正在尝试Android Application Development for Dummies的一个示例,这是一个简单的应用程序,可以切换手机的响铃模式。代码如下。

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);
  }
}

我的问题是因为我只覆盖onCreate()(默认显示“正常”模式图像)并且,如果我在应用程序外部将手机模式更改为静音(在我检查当前状态并更新) onResume(),预计图像会变为“静音” onResume()UI),但为什么即使我杀死进程然后将手机模式更改为静音,它仍然显示正确的图像?

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

4

4 回答 4

5

onResume()每当活动重新获得前台输入时调用。这包括:

  • 当它在其他事物具有前景(例如,设置)后返回屏幕时,以及

  • 在此过程中首次创建它时(包括任何所需的新进程,因为您从 DDMS 中杀死了旧进程)

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

于 2012-06-10T13:05:55.180 回答
4

onResume 不仅限于在活动暂停后调用,它会在活动到达活动堆栈顶部时调用。这包括它在创建后第一次显示。

开发人员文档非常详细地介绍了活动生命周期的工作原理,包括描述实际调用每个生命周期回调的时间的流程图和表格。

于 2012-06-10T13:06:49.800 回答
0

onResume 在启动时被调用。请参阅此处的活动生命周期文档。

于 2014-08-08T00:28:19.843 回答
0

我认为您会发现 Android 开发人员文档的最新更新将阐明您的答案。onResume() 将在您的活动第一次开始时调用,将活动带到前台,或将手机带出锁定屏幕。

Android 活动文档

于 2012-07-10T08:25:52.450 回答