由于我看不到您的其余代码,因此我将假设一些事情。
假设 #1
如果您打开了活动,并且倒计时开始并在 10 秒后结束,则您的手机会振动(您的活动仍处于打开状态)。如果您转到主屏幕,则振动停止。
假设 #2
您的活动已打开,倒计时开始。在 10 秒到期之前,您转到主屏幕。您的活动不可见,但手机很快就会开始振动。
如果这是您所看到的,那么这是正确的行为。问题在于,在第二种情况下,当您进入主屏幕时,您的 onPause() 中的shake.cancel() 会在实际开始振动之前被调用。Shake.cancel() 只能在它已经振动时取消。
如果这就是您要解决的问题(我只能假设,因为我看不到您的其余代码),您可以试试这个:
private boolean mAllowShake = false;
@Override
public void onResume() {
super.onResume();
mAllowShake = true;
}
@Override
pulic void onPause() {
super.onPause();
mAllowShake = false;
shake.cancel();
}
// wherever you are calling the shake.vibrate()
if (mAllowShake)
shake.vibrate();
这样,当您的活动不可见并且您的计时器关闭时,由于 mAllowShake 为假,它实际上不会振动。
如果这不是您要解决的问题,请使用更多代码和对您的确切用例的描述来更新您的问题。希望能帮助到你!