Android 中的后台数据收集器在 App 终止时重新启动

问题描述 投票:0回答:1

我想用我的应用程序收集加速度计数据。因此,我创建了一个服务,因此应用程序会在后台收集数据,即使应用程序不再打开也是如此。

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

我尝试了

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) {}
}
java android android-service accelerometer android-lifecycle
1个回答
2
投票

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

这是一种正常

Android
行为
Android
应用程序开发人员对此无能为力。

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

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

有没有办法防止应用程序终止时服务完全停止?

是不。您和其他人一样,应该遵守

Android
组件的生命周期。

© www.soinside.com 2019 - 2024. All rights reserved.