2013-03-18 106 views
9

我是Android新手。我正在开发一个记录传感器数据的应用程序。我有两个按钮的活动。当用户按下开始按钮时,我想要启动服务并记录传感器数据,直到用户按下停止按钮。我不确定我想要使用哪种类型的服务。我读了关于本地和远程服务的内容,但我实际上并没有明白其中的差别。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时,此服务重新启动并丢失所有以前记录的数据。为了使服务能够顺利运行并且即使在应用程序被杀害时仍继续运行,以避免丢失任何已记录的数据,我该如何使用?

+1

你是什么意思杀死应用程序?如果用户转到应用程序的设置页面并选择“强制停止”,服务将被停止,但对此无能为力。 – Premsuraj 2013-03-18 10:03:34

+0

[This](http://www.youtube.com/watch?v=XVyXCrM-3zw)就是我的意思,通过杀死应用程序 – user1135357 2013-03-18 10:11:29

+0

我第二个问题_你是什么意思“杀死application_”?但是,我想指出的是,服务_can_可以与应用程序分开,以便如果用户停止_app_,_service_可以继续运行。 – 2013-03-18 10:11:58

回答

11

你的澄清关于杀人后:

你可能想在不同的进程中运行你的Service比你Application,你可以通过在你的清单这样的声明实现:

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

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

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

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

+2

将服务引入前台解决了我的问题。非常感谢:) – user1135357 2013-03-18 10:59:29

+0

你在OnTaskRemoved()中把它带到了哪里? – 2016-05-03 18:01:49

+0

@ user1135357可能不知道你的问题,如果你不像我在这里,TaRanLaYal那样包含别名。 - 很遗憾,我的答案中的参考文献今天部分中断,但您仍然可以自己在页面上找到该部分。无论哪种方式,也许user1135357可以阐明他的具体解决方案。 – 2016-05-04 05:53:19

-3

我想你必须在AndroidManifest.xml中声明服务。

+1

True;这与这个问题有什么关系? – 2013-03-18 10:11:19

+0

好吧,它与您提供的例外情况相同(我没有自己的代码可以访问)。我必须在我的一个应用程序中做类似的事情,这就是为什么我不需要澄清;我意识到用户之后是什么。在说,我不能提供像你一样详细的答案,因为我对Android还很陌生。但我可以解释一下这个要求的原因。对于那个很抱歉。 – 2013-03-18 11:45:46

相关问题