18

電話の画面がロックされているときにアクティビティがフォアグラウンドにある場合、ブロードキャスト イベントやウェイクロックにより、アプリ向けであるかどうかにかかわらず、そのアクティビティの onResume が呼び出されるようです。これは、電話をまったく操作していない場合でも発生します。ロックを解除したり、触れたり、何もしないでください。onResume は、対応する onPause なしで何度も呼び出されます。

これは、追跡イベント onResume をログに記録したためであり、一部のデバイスがこれらの onResume イベントのトンを取得していることに気付きました。再現することができ、アプリがインテント (SugarSync、Google Voice、または独自のアプリのパッシブ ロケーション リスナーなど) を受け取るように見えるたびに、それが発生していることに気付きました。

これは、ICS を実行している Galaxy Nexus および Galaxy S3 で確認されました。興味深いことに、Jelly Bean ではこの問題を再現できませんでした。

ここで何が起こっているのかについてのヒントはありますか?

4

1 に答える 1

20

Gingerbread と ICS を実行している複数の電話で同じ動作を確認しました。あなたの説明は私が見たものと一致しています。何らかの理由で、画面がまだロックされているにもかかわらず、アクティビティで onResume がトリガーされます。おそらく、何らかのオペレーティング システム レベルのイベントを再開するのでしょうか?

Android ドキュメントからの最良の方向は、 onResume定義のこの段落からのようです。

onResume は、アクティビティがユーザーに表示されることを示す最良の指標ではないことに注意してください。キーガードなどのシステムウィンドウが前面にある場合があります。onWindowFocusChanged(boolean) を使用して、アクティビティがユーザーに表示されていることを確認します (たとえば、ゲームを再開するため)。

アクティビティを開発するときは、onResume がユーザーの直接的な操作なしで、立て続けに複数回呼び出される可能性があることに注意してください。したがって、基本的には、一度しか実行できないコードや、ユーザーからの即時応答をトリガーするように設計されたコードを onResume に配置しないでください。onResume と onWindowFocusChanged のどちらが目的に適しているかを自分で判断する必要があります。

于 2012-12-21T17:18:20.733 に答える