0

onCreate メソッドでバイブレーター システム サービスを開始するアクティビティがあり、ユーザーがボタンを押すとバイブレーターがキャンセルされ、finish() が呼び出されてアクティビティが閉じます。

このアクティビティは AlarmManager を介して起動されるため、閉じられると、ユーザーは現在開いているアプリ (必ずしも私のものではない) に戻ります。

私が抱えている問題は、アクティビティが横向きモードであり、アクティビティが閉じたときに横向きをサポートしていない画面 (ホーム画面など) にユーザーが移動した場合、アプリケーションが縦向きに切り替わり、 onCreate( ) 実際に画面を閉じる前に。したがって、この問題を引き起こす手順は次のとおりです...

  • アクティビティは縦向きモードで起動されます
  • onCreate メソッドが呼び出され、バイブレーターが開始されます
  • ユーザーが電話を横向きに回転させます
  • onCreate が再度呼び出されますが、onSaveInstanceState が null ではないため、バイブレーターの再起動をスキップできます
  • ユーザーがボタンを押して画面を閉じる
  • vibrator.cancel() を呼び出します
  • 私はfinish()を呼び出します
  • ユーザーが横向きモードをサポートしていない画面に戻るため、私のアクティビティは onCreate() を呼び出します
  • savedInstanceState equals null, so the vibrator gets started again
  • My app is closed with the vibrator still running

Currently the only way I can think of to rectify this is to make my activity only support portrait mode, but I'd like to avoid that if I can. Does anyone know a way in which I can prevent onCreate() from being called after I call finish()?

4

1 に答える 1

0

メソッドを呼び出さない理由

onPause()またはonStop()、このメソッド呼び出しの中でvibrator.cancel()

onStop() は、アプリが表示されなくなったときに常に呼び出されます。

このフローチャートをチェックしてください

于 2013-02-22T17:18:08.020 に答える