質問

こんにちは、私は私が永久に自分のアプリケーションが実行されているときに、画面を残すことができるようにwakelockを制御するためにサービスを利用しようとしています。私はwakelockを作成して、しかし、私はエラーが「WLは解決できない」取得)(のonCreate(でそれを活性化させる)とonDestroyでそれを解放します。誰かが、私はこの上で取得することができますどのように説明できますか?以下のコード:

public class WakeLockService extends Service {

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }  
    @Override
    public void onCreate() {
        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
        wl.acquire();
    }
    @Override
    public void onDestroy() {
        wl.release();
    }
}
役に立ちましたか?

解決

あなたが欠落していない行

    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");

onDestroyで()?それはのonCreate()内のローカル変数であるが、それが全てでonDestroy()で宣言されていません。

あるいは、より多くの可能性、あなたはそれの代わりに、ローカル変数のクラスWakeLockServiceの場にしたいことがあります。

他のヒント

さて、あなたはインスタンス変数を使用する場合でも、私は、これはそれを行うための方法はないと思うでしょう。 つもりコールdestroy()は誰ですか?私はあなたはそれがそうするようにOSの仕事です、ではない願っています。 あなたはウェイクを保持している場合でも、OSが最初に他の活動/サービスを破壊するので、あなたのdestroy()メソッドが呼び出される可能性はほとんどありませんロックします。

それに加えて、それはonCreate()方法で復帰ロックを取得する方法手遅れ。 onCreate()に到達する前に、携帯電話はあなたがバックグラウンドで動作している活動から警報対からサービスをトリガしたときに、既にスリープ状態になっている場合があります。

それはあなたが多くのコンテキストを与えないよう、あなたが異なっ作るべきかを言うのは難しいです。 イベントの通常のコースはこれです。 BroadcastReceiverが呼び出され、onReceive()であなたは、ウェイクロックを取得し、あなたのサービスに静的変数に入れます。サービスが実行された場合には、stopSelf()を呼び出すウェイクロックを解除してからロックへの参照を保持する静的変数をゼロにする必要があります。

あなたがサービスを使用する場合は、

また、フルウェイクロックは、あなたが望む可能性が非常に高いものではなく、部分的覚醒ロックがあります。あなたは右、上滞在する画面を必要としないのですか?

申し訳ありませんが、ロックを起こしてはので、私は上記の正確な問題のため、使用には本当に複雑です。それは決定的に高度なトピックだとそれが台無しにするのは簡単です。その場合は長すぎるために保持することは、それはバッテリーを消耗として、主要な犯罪ですので、あなたのアプリケーションは、非常に醜いコメントを取得します。 この間違った方法を取るしてください、しかし、あなたはここに掲載問題の性質を与えないでください(構文/コンパイラエラー)私は強くサービスとウェイクロックせずに解を探索することをお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top