0

アプリの起動時に電話ロックを実行すると、ロック解除後に onStart (アクティビティをタスクにアタッチおよびデタッチする場所) が呼び出されないため、最初の AsyncTask がずれてしまうことがわかりました。明らかに、電話ロックモードは、ホームボタンまたは戻るボタンを使用する場合とは異なることを意味します。後者の場合、私のアプリはそれらを処理できるためです。ロック/ロック解除モードではアプリが閉じられないようですが、実行も維持されないため、私の意見では、これはある種の予期しない動作であり、AsyncTask とアプリを「失う」ため、非常にばかげています。が正しく初期化されていません。

ロック解除/ロックはライフサイクルメソッドを呼び出さないように見えるため、電話のロック解除でロジックを実行するにはどうすればよいですか? また、ロックのオン/オフと画面のオン/オフを区別する必要がありますか?

4

3 に答える 3

0

ライフサイクルの適切な説明と図については、アクティビティライフサイクルのドキュメントを参照してください。

ほとんどの場合、リソース(バッテリーの電力)を節約するために画面がオフになり、アクティビティが強制終了されます。ドキュメントに記載されているように、Androidがリソースを解放したいときはいつでも、基本的に殺される可能性があります。したがって、いつでも停止および再開できるようにアクティビティを設計する必要があります。
私は一度同様の問題を抱えていました。私のアプリは横向きのみで、画面をオフにすると、Androidスクリーンセーバーが制御を取得し(縦向きモードでした)、アクティビティを破棄して再作成するorientationChangeを送信しました。

簡単な解決策は、画面の向きの変更を自分で管理することを宣言することです。

<activity ... android:configChanges="orientation" ... >

アクティビティが横向きのみであると宣言されている場合(何もする必要はありません)、これは非常に簡単ですが、アクティビティが回転できる場合はさらに難しくなる可能性があります...

于 2012-12-26T17:22:51.260 に答える
0

この質問は、あなたが知りたいことを教えてくれると確信しています。

基本的にやりたいことはBroadcast Receiver、次の意図をリッスンする を作成することです。

Intent.ACTION_USER_PRESENT

ユーザーが画面のロックを解除すると、システムによってインテントが送信されます。ドキュメントはHEREで確認できます。

于 2012-12-26T17:21:06.357 に答える
0

自分に合った解決策を見つけました。Squonks のコメントにより、onResume が実行されることがわかりました。アプリのロジックを適応させることができたので、アプリは onResume で AsyncTask (アタッチ/デタッチ + 進行状況ダイアログの表示 + 初期化) を処理できるようになりました。

于 2012-12-27T11:39:02.507 に答える