簡體   English   中英

應用終止后,Android中的后台數據收集器將重新啟動

[英]Background data collector in Android restarts when App is terminated

我想用我的應用程序收集加速度計數據。 因此,我創建了一項服務,因此即使不再打開應用程序,應用程序也會在后台收集數據。

問題是,當我關閉應用程序時,該服務也會終止並重新啟動。 在此期間,它不會收集數據。

我嘗試了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) {}
}

兩者的結果相同:關閉應用程序后,服務將重新啟動。

這是正常的Android行為Android應用程序開發人員對此無能為力。

請注意,我的服務在單獨的進程中運行。

和以前一樣( 您的問題中的所有事實都證明了這一點 )...就是說,

有沒有辦法阻止應用終止時服務完全停止?

否。您和其他人一樣,應該堅持Android組件的生命周期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM