1

加速度センサー情報を収集するサービスを実行したいのですが、電話がスリープ状態のとき、またはアクティビティ(サービスを開始するための)が実行されていないときに停止しないでください。メニューアクティビティからサービスに開始コマンドと停止コマンドを送信する必要があります。
現在、アクティビティの同じプロセスでバンドルサービスを使用していますが、問題は、アクティビティが閉じられるとすぐに閉じられることです(リターンキーが押されます)。

別のプロセスを使用すると、バンドルされたアクティビティがなくても(アクティビティが閉じられている場合)再開されるのではないかと思います。

そうでない場合は、どのサービスモデルを選択する必要がありますか?

4

2 に答える 2

2

bindService ではなく startService を探している可能性があります。

http://developer.android.com/reference/android/content/Context.html#startService%28android.content.Intent%29

ただし、startService を使用しても、サービスが「永久に」「常に」実行され続けるという保証はありません。

警告、以下のオプションはバッテリーを大量に消費します。

優先度を startforeground (通知が必要) に変更することで、サービスが停止しない可能性を高めることができます。

画面がオフの間、サービスを「常に有効」に保つ唯一の方法は、RTC_WAKEUP または ELAPSED_REALTIME_WAKEUP スケジュールで Alarm Manager を使用することです。

バッテリーが少ない…

ただし、実際には、startForeground を使用せず、通常の RTC または ELAPSED_REALTIME アラーム スケジュールを使用するだけで、サービスはほとんどの時間実行されます。

于 2012-12-29T02:02:02.123 に答える
0

アプリケーションと同じプロセスでサービスを作成できます。アクティビティがすべて閉じられた場合でも、stopservice を呼び出すまでサービスがまだ生きているため、アプリは引き続き機能します (システムによって強制終了されると、システムはサービスを自動的に再起動します)。あなたのサービスがアクティビティとの複雑な通信を行う場合は、リモート メッセンジャー サービスを使用する必要があると思います。サービスの実行中に、サービスにバインドして、サービスとアクティビティの間でデータを送受信できます。サービスとサービスへの通信の詳細については、こちらを参照してください。

于 2012-12-29T02:01:38.177 に答える