2016-11-25 12 views
1

我想用我的应用程序收集加速度计数据。因此,我创建了一项服务,所以即使应用程序不再打开,应用程序也会在后台收集数据。Android中的背景数据收集器在应用程序终止时重新启动

问题是,当我关闭应用程序时,服务也终止并重新启动。在此期间它不会收集数据。

我试了START_REDELIVER_INTENTSTART_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) {} 
} 

回答

2

都具有相同的结果:当应用程序关闭,重新启动服务。

这是一个normal Android behavior,没有什么Android应用程序开发人员可以做的。

请注意,我的服务正在单独的进程中运行。

和以前一样(都在你的问题证明了这一点)......这就是说,答案

有没有办法阻止该服务完全从当应用程序被终止停止?

不是。您和其他人一样应该坚持Android组件的生命周期。

+0

WhatsApp&Co做到了,所以有一个办法。 – keinabel

+0

@keinabel让我来做一些测试来刷新内存......也告诉我你是如何“终止”应用程序的? – Onik

+1

@keinabel现在没有变化。经过测试('Android' 4.2),它是有效的:从最近的应用程序中删除(刷出)应用程序,使用'android:process'标签重新启动服务... _“WhatsApp&Co做到了”_:你怎么知道服务没有重新创建?如果服务有一个绑定的客户端?你是如何“终止”“WhatsApp&Co”应用程序的? – Onik

相关问题