2012-03-28 12 views
3

私はいくつかの面白い振る舞いを見つけ、それを回避する理由や方法を知らない。 アクティビティはsingletaskアクティビティです。つまり、onNewIntent()はアクティビティがスタックの最上部にある間のアクティビティを意味します。電話の画面がにある間、これは正常にうまく動作します。ただし、画面がオフになると、電話が「起きて」、その時点でonNewIntent()が呼び出されるまで、新しいインテントは受信されません。アクティビティがスタックの最上部になく、電話機がスリープ状態にある場合、アクティビティが開始され、onCreate()メソッドが呼び出されます。活性はまたFLAG_ACTIVITY_NEW_TASKフラグで起動さ電話が起きるまで、onNewIntent()は起動しません。

<activity android:name=".MyActivity" 
      android:launchMode="singleTask" 
      android:alwaysRetainTaskState="true" > 

:として

アクティビティ宣言しました。インテントは、ブロードキャストレシーバから起動されます。電話が眠っていると意図が放送されている場合の活動はこれらのフラグとの電話をウェイクアップ:それは、スタックの一番上にあるときに活動が電話するまで作成されていませんが

getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
    getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 

が起きています。今、私は困惑してどこから始めるべきかわからない。私のアクティビティもonSaveInstanceState()を使用しています。アクティビティはFragmentActivityであり、1つのフラグメントを含んでいます。

ご協力いただければ幸いです!

答えて

2

しかし、 がスタックの最上部にあるときに電話機が起きるまで、アクティビティは作成されません。

私が知る限り、これは設計によるものです。電話を起こして目を覚ます唯一の方法は、起床ロックをつかうことです。

http://developer.android.com/reference/android/os/PowerManager.WakeLock.html

典型的なパターンは、あなたには、いくつかのネットワークの状態が変化したように、あなたのアプリを覚ますする意図、または何を受けることです。あなたの受信機では、onHandleIntent(),であなたは起床ロックをつかむ。サービスを開始して作業を開始すると、サービスは完了後にウェイクロックを解除します。

あなたのケースでは、あなたの活動にインテントを送信するレシーバーが部分的なスリープ解除ロックを取得すると、あなたのアクティビティーが画面のスリープ解除ロックを取得できます。ウェイクロックを保持している限り、電話はスリープ状態にはなれないので、もっと多くのバッテリーを使用するようになります。ウェイクロックはそのような理由から非常に危険なものです。

ロックを解除する必要があります。 onHandleIntent()が復帰したときにウェイクロックを保持しないと、デバイスはすぐにスリープ状態に戻ることができます。だから、あなたはまた、おそらくそれを解放し、一時的に画面ロックをつかむことができ...画面が上に来るでしょう、そして、表示タイムアウト設定に応じて、通常はオフに行くようなもの、

receiver: acquire partial lock 
activity: acquire screen lock 
activity: release partial lock 

だろう。

+0

私はこれをやっていると思っていましたが、私が絶対にしなければ、ウェイクロックを避けたいと思っていました。アクティビティがスタックの最上部になく、電話がスリープ状態になったときにインテントが送信されると、アクティビティが開始され、ウェイクロックは必要ありません。私は、同じアクティビティのonNewIntent()が同じ振る舞いに従うと仮定しましたが、明らかにそうではありません。私は部分的なロックを試してみるつもりです。 – Patrick

+0

これは奇妙で、合意して、私はそれが重要であるとは思わないでしょう。あなたが何を見つけるか教えてください。 –

+0

部分的なロックで運がありません。アクティビティは呼び出されないので、スクリーンロックを取得できません。 – Patrick

関連する問題