11

私はAndroidが初めてです。センサーデータをログに記録するアプリケーションを開発しています。2 つのボタンを持つアクティビティがあります。ユーザーが開始ボタンを押すと、サービスが開始され、ユーザーが停止ボタンを押すまでセンサー データが記録されます。どのタイプのサービスを利用したいのかわからない。ローカル サービスとリモート サービスについて読みましたが、実際には違いがよくわかりませんでした。

私が今まで試したこと:

ローカル サービスを開始および停止する 2 つのボタンを含むアクティビティを作成しました。

//Start Service
startService(new Intent(this, MyService.class));

//Stop Service
stopService(new Intent(this, MyService.class));

onStartCommand()また、センサー データのログ記録を開始するスティッキー サービスも作成しました。

public int onStartCommand(Intent intent, int flags, int startId) {
    mSensorManager.registerListener(this, accelerometer,
            SensorManager.SENSOR_DELAY_FASTEST);
    mSensorManager.registerListener(this, magnetometer,
            SensorManager.SENSOR_DELAY_UI);
    mSensorManager.registerListener(this, lightSensor,
            SensorManager.SENSOR_DELAY_UI);
    Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
    return Service.START_STICKY;
}

AndroidManifest.xml:

<service android:name=".MyService" android:enabled="true" android:process=":HelloSensors_background"/>

うまく機能しますが、問題は、サービスを開始したアプリケーションを強制終了すると、このサービスが再起動し、以前にログに記録されたデータがすべて失われることです。ログに記録されたデータを失わないように、アプリケーションが強制終了された場合でも、サービスをスムーズに実行し、実行し続けるには、何を使用すればよいですか?

4

2 に答える 2

11

殺害に関するあなたの説明の後:

あなたはおそらくあなたServiceとは異なるプロセスであなたを実行したいと思うでしょうApplication、それはあなたのマニフェストのそのような宣言によって達成することができます:

<service
    android:name=".ServiceClassName"
    android:process=":yourappname_background" >
    ...

マニフェストの宣言には同じandroid:process属性を使用します。receiver

マニフェストで宣言できるイベントのみを受信する場合は、の使用を検討できますIntentService。これは、アクティビティの期間が短いため、ユーザーにはほとんど表示されません。ただし、プログラムで受信者を登録した場合にのみ受信できるイベントをリッスンする必要がある場合(この場合、receiverマニフェストの句は明らかに意味がありません)、ユーザー(または「スマート」の1つに対して何もできません)アプリキラー」)あなたのサービスを殺します。それでも、利点は、ユーザーがアプリを強制終了できることを理解しているのに、ユーザーが強制終了できないことを理解していることですService(ユーザーが何かを実行したい場合)。

さらに、あなたはあなたを最前線に持ってくるServiceことができます。

于 2013-03-18T10:19:05.390 に答える
-3

AndroidManifest.xml でサービスを宣言する必要があると思います。

于 2013-03-18T10:03:12.123 に答える