我有一个在其 onCreate 方法中启动 Vibrator 系统服务的活动,然后当用户按下按钮时,它会取消振动器,然后调用 finish() 来关闭活动。
这个活动是通过 AlarmManager 启动的,所以当它关闭时,它会将用户返回到他们当前打开的任何应用程序(不一定是我的)。
我遇到的问题是,如果我的活动处于横向模式,并且当活动关闭时用户被带到不支持横向的屏幕(例如主屏幕),我的应用程序切换到纵向并调用 onCreate( ) 在实际关闭我的屏幕之前。所以导致这个问题的步骤如下......
- 活动以纵向模式启动
- onCreate 方法被调用,这将启动振动器
- 用户将手机旋转到横向模式
- 再次调用 onCreate,但因为 onSaveInstanceState 不为空,我可以跳过再次启动振动器
- 用户按下按钮关闭屏幕
- 我打电话给 vibrator.cancel()
- 我打电话给完成()
- 因为用户将被带回不支持横向模式的屏幕,所以我的活动调用 onCreate()
- savedInstanceState 等于 null,所以振动器重新启动
- 我的应用程序已关闭,振动器仍在运行
目前我能想到的唯一解决方法是让我的活动只支持纵向模式,但如果可以的话,我想避免这种情况。有谁知道在我调用完成()后可以防止调用 onCreate()的方法?