1
我想用我的应用程序收集加速度计数据。因此,我创建了一项服务,所以即使应用程序不再打开,应用程序也会在后台收集数据。Android中的背景数据收集器在应用程序终止时重新启动
问题是,当我关闭应用程序时,服务也终止并重新启动。在此期间它不会收集数据。
我试了START_REDELIVER_INTENT
和START_STICKY
,两者都有相同的结果:当应用程序关闭时,服务重新启动。
有没有办法阻止应用程序终止时服务完全停止?
请注意,我的服务正在单独的进程中运行。
这里是我的代码:
@Override
public void onCreate() {
// start thread
HandlerThread thread = new HandlerThread("SensorData", Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
looper = thread.getLooper();
handler = new BGHndlr(looper);
sensorMngr = (SensorManager) getSystemService(SENSOR_SERVICE);
reader = new SensorReader(sensorMngr);
accSensor = reader.getSingleSensorOfType(Sensor.TYPE_ACCELEROMETER);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Message message = handler.obtainMessage();
message.arg1 = startId;
handler.sendMessage(message);
return START_REDELIVER_INTENT;
}
嵌套类:
public class BGHndlr extends Handler implements SensorEventListener {
public BGHndlr(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
oSensorManager.registerListener(this, oAcceleroMeter, SensorManager.SENSOR_DELAY_FASTEST);
}
//int i = 0;
@Override
public void onSensorChanged(SensorEvent event) {
// do something
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {}
}
WhatsApp&Co做到了,所以有一个办法。 – keinabel
@keinabel让我来做一些测试来刷新内存......也告诉我你是如何“终止”应用程序的? – Onik
@keinabel现在没有变化。经过测试('Android' 4.2),它是有效的:从最近的应用程序中删除(刷出)应用程序,使用'android:process'标签重新启动服务... _“WhatsApp&Co做到了”_:你怎么知道服务没有重新创建?如果服务有一个绑定的客户端?你是如何“终止”“WhatsApp&Co”应用程序的? – Onik