应用程序被杀死时Android服务重新启动

时间:2013-03-18 09:58:55

标签: android service

我是Android新手。我正在开发一个记录传感器数据的应用程序。我有两个按钮的活动。当用户按下开始按钮时,我想要启动服务并记录传感器数据,直到用户按下停止按钮。我不确定我想使用哪种类型的服务。我读到了有关本地和远程服务的内容,但我并没有真正了解其中的区别。

到目前为止我尝试了什么:

我创建了一个带有两个按钮的活动,用于启动和停止本地服务:

//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"/>

它运行良好,但问题是当我kill the application启动服务时,此服务将重新启动并丢失所有以前记录的数据。我应该使用什么来使服务顺利运行并在应用程序被杀死时继续运行以便不丢失任何记录数据?

2 个答案:

答案 0 :(得分:11)

在你澄清杀人事件之后:

您可能希望在与Service不同的进程中运行Application,这可以通过清单中的此类声明来实现:

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

对清单中的任何android:process声明使用相同的receiver属性。

如果您只想接收可以在清单中声明的​​事件,您可以考虑使用IntentService,由于活动时间短,用户几乎看不到它。但是,如果你需要监听只有在以编程方式注册接收者时才能收到的事件(在这种情况下,显然,清单中的receiver子句没有意义)那么你就不能对用户做任何事情(或者其中一个&#34;智能应用程序杀手&#34;)杀死你的服务。优点仍然是,用户希望了解您的应用可以被杀死,而Service无法解决(如果他们希望它做某事)。

此外,您可以bring your Service to the foreground

答案 1 :(得分:-3)

我认为您必须在AndroidManifest.xml中声明该服务。