3

理由はわかりませんが、私のサービス(startService(Intent ...)で開始)はしばらくすると閉じ続けます。サービスがWiFiSLAMで位置を2分ごとにチェックするようにしたいので、TimerTaskがサービスで実行されています。アプリが閉じられ(onDestroy)、画面がオフになった後、サービスがシャットダウンしていることに気付きました。

私はWakeLockについて読み、これを試しました:

    final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
    wakeLock.acquire();

しかし、それでも機能しません。どうしたらいいのかわからない。Wifiポジショニングフレームワークで2分ごとにバックグラウンドの位置を更新したいだけです。

また、onStartCommand()の戻り値をSTART_STICKYに設定しました。バックグラウンドで実行されている可能性がありますが、しばらく実行しているとLogCatのログが表示されないため、indoorLocationManagerがまだ新しい位置をキャッチしていることがわかります。

誰かがアイデアを持っていますか?

4

3 に答える 3

3

Androidは、バックグラウンドで長時間(30分から1時間)実行されているアプリケーションを自動的に強制終了します。

これを防ぐ唯一の方法は、サービスをとして設定することforeground serviceです。

これを行うには、次を使用します。

    startForeground(messgae, notification);

これにより、サービスが実行中であることをユーザーに通知する永続的な通知が表示されます。

他のオプションは、2分ごとAlarmManagerに開始するために使用することです。IntentService

よろしく。

于 2012-12-09T00:32:28.727 に答える
0

私は過去にアメの問題を抱えていました、そしてあなたはこれをしたくないかもしれません、しかしそれは私のために働きます。メインワーカーとヘルパーの2つのサービスを設定しました。ヘルパーは、頻繁にワーカーが実行されていることを確認し、ワーカーはヘルパーが実行されていることを確認します。この例では、それらの1つがシステムによって強制終了された場合、もう1つによって再起動されます。両方が同時に死んだことは一度もありません。

繰り返しますが、これは私の解決策であり、あなたがやりたいことではないかもしれません。

于 2012-12-09T00:28:30.403 に答える
0

1つの解決策は、2分間隔、またはあなたが決定したものでサービスを開始するアラームを使用することです。ただし、これを行うとバッテリーが消耗するため、注意してください。

于 2012-12-09T00:32:44.440 に答える