AndroidアクティビティライフサイクルでWake Up(アラームアプリ)を処理する方法
-
27-09-2019 - |
質問
開発中のアラームアプリにいくつかの問題があります。
私が最初に少し奇妙だと思うのは、アラームが出て電話を目覚めさせるときです。これらのことは起こりました。
OnCreate
Onresume
onPause
Onresume
なぜ彼らはその順序で実行されるのですか?最後の2つは呼ばれるべきではありませんか?そして、これが私に大きなトラブルを引き起こすものです。なぜなら、私が家に押し込んだり電話で戻ったりすると、オンラインが実行され、finish()を呼び出したいからです。そして、その部分はそれが必要に応じて機能しますが、それは電話が睡眠から睡眠のバカウスから目覚めるとき、それは機能しません...
何か案は?
解決
公式アラームアプリケーションがイベントをどのように処理するかを確認することをお勧めします。https://android.googleSource.com/platform/packages/apps/deskclock
他のヒント
同様の問題もあります。バックグラウンドでアクティビティとサービスを作成します。サービスがネットからいくつかのデータを受け取ると、アクティビティが登場します。オンストップフェーズでアクティビティが入り、画面が黒くなるまで、すべてが正常に機能します。この状況があり、再起動するためにアクティビティをリクエストしたとき、私は次のとおりです。
OnRestart OnStart OnResume OnPause OnWintent Onresume
ご覧のとおり、Onresume、OnPause、および別のOnresumeとアクティビティがユーザーに届きました。
それは、シングルトップまたはシングルインスタンスアクティビティを使用しているためのようです(たぶんSingletaskにも表示されます)。問題は、既に作成されたシングルトップアクティビティに意図を送信する場合、新しい意図アクティブonnewintent()メソッドです。 APIからそれを見ることができます:
新しい意図を受ける前にアクティビティは常に一時停止されるため、この方法の後にonResume()が呼び出されることを期待できます。
したがって、これがOnresume-onpause-onresumeコールを受け取る理由かもしれません。
しかし、これは奇妙な振る舞いです!
onpause()でfinent()を呼び出したいですか? OnPause()は、現在のアクティビティが前景にない場合に呼び出されます。代わりに、OnStop()メソッドでfinish()を呼び出したいかもしれません。を参照してください Activity lifecycle
詳細については。