Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应用程序被终止时重新启动Android服务_Android_Service - Fatal编程技术网

应用程序被终止时重新启动Android服务

应用程序被终止时重新启动Android服务,android,service,Android,Service,我是Android新手。我正在开发一个记录传感器数据的应用程序。我有一个有两个按钮的活动。当用户按下开始按钮时,我希望启动服务并记录传感器数据,直到用户按下停止按钮。我不确定我想使用哪种类型的服务。我读过关于本地服务和远程服务的文章,但实际上我不太理解它们的区别 我迄今为止的尝试: 我创建了一个带有两个按钮的活动,用于启动和停止本地服务: //Start Service startService(new Intent(this, MyService.class)); //Stop Servic

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


它工作得很好,但是问题是,当我启动服务时,该服务会重新启动并丢失以前记录的所有数据。为了使服务能够平稳运行,并在应用程序被终止时继续运行,以避免丢失任何记录的数据,我应该使用什么?我认为您必须在AndroidManifest.xml中声明该服务。

在您对终止进行说明后:

您可能希望在与
应用程序
不同的进程中运行
服务
,您可以通过清单中的声明来实现这一点:

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

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

如果您只想接收在清单中声明的事件,您可以考虑使用<代码> ItnService < /C> >,由于其活动时间短,用户几乎永远不会看到它。但是,如果您需要侦听只有在以编程方式注册接收者时才能接收到的事件(在这种情况下,清单中的

receiver
子句显然毫无意义),那么您无法对杀死您的服务的用户(或“智能应用杀手”)采取任何措施。不过,这样做的好处是,用户有希望理解你的应用程序可能会被杀掉,而你的
服务却不能(如果他们想让它做点什么的话)


此外,您还可以。

终止应用程序是什么意思?如果用户转到应用程序的设置页面并选择“强制停止”,则服务将停止,对此无能为力。我所说的杀死应用程序是什么意思?第二个问题,你所说的“杀死应用程序”是什么意思?但是,我想指出,服务可以与应用程序分离,这样,如果用户停止应用程序,服务可以继续运行。@ClassStacker我指出了如何通过放置链接“杀死应用程序”。是的,我需要的是一个即使应用程序停止也能继续运行的服务。我现在拥有的是一个服务,虽然它继续运行,但当应用程序停止时,它会重新启动。我已经提供了一个答案。我不确定我是否正确理解“应用程序停止时重新启动”。您能否更详细地描述这一点,并提供在服务上下文中启动和停止服务的代码,即您活动的生命周期方法。正确;这与这个问题有什么关系?好吧,这和你提供的一样,只是我没有代码(我手头没有自己的代码可以访问)。我必须在我的一个应用程序中做类似的事情,这就是为什么我不需要澄清;我意识到用户在追求什么。说这句话,我无法提供像你那样详细的答案,因为我对Android还是相当陌生的。不过,我本可以解释这个要求的原因。很抱歉。这个答案有误导性,与问题无关。将服务带到前台解决了我的问题。非常感谢:)你在OnTaskRemoved()中把它放在哪里了?@user1135357可能不知道你的问题,如果你不像我在这里那样输入别名,TaRanLaYal。--令人遗憾的是,今天我的答案中的参考部分被打破,但你仍然可以自己在页面上找到该部分。不管怎样,也许用户1135357可以为他的具体解决方案提供一些线索