0

我有一个在其 onCreate 方法中启动 Vibrator 系统服务的活动,然后当用户按下按钮时,它会取消振动器,然后调用 finish() 来关闭活动。

这个活动是通过 AlarmManager 启动的,所以当它关闭时,它会将用户返回到他们当前打开的任何应用程序(不一定是我的)。

我遇到的问题是,如果我的活动处于横向模式,并且当活动关闭时用户被带到不支持横向的屏幕(例如主屏幕),我的应用程序切换到纵向并调用 onCreate( ) 在实际关闭我的屏幕之前。所以导致这个问题的步骤如下......

  • 活动以纵向模式启动
  • onCreate 方法被调用,这将启动振动器
  • 用户将手机旋转到横向模式
  • 再次调用 onCreate,但因为 onSaveInstanceState 不为空,我可以跳过再次启动振动器
  • 用户按下按钮关闭屏幕
  • 我打电话给 vibrator.cancel()
  • 我打电话给完成()
  • 因为用户将被带回不支持横向模式的屏幕,所以我的活动调用 onCreate()
  • savedInstanceState 等于 null,所以振动器重新启动
  • 我的应用程序已关闭,振动器仍在运行

目前我能想到的唯一解决方法是让我的活动只支持纵向模式,但如果可以的话,我想避免这种情况。有谁知道在我调用完成()后可以防止调用 onCreate()的方法?

4

1 回答 1

0

你为什么不调用方法

onPause()或者onStop()在这个方法里面调用vibrator.cancel()

当您的应用不再可见时,总是会调用 onStop()。

看看这个流程图

于 2013-02-22T17:18:08.020 回答