在Android中没有为后台服务调用OnDestroy

时间:2017-08-26 09:49:25

标签: android service background

我面临类似的问题

Not sure if service onDestroy is called from BroadcastReceiver

由于没有得到答复,我正在创造新的问题。我的服务代码如下所示(完整代码未粘贴):

public class GPSLogger extends Service implements LocationListener,
        com.google.android.gms.location.LocationListener,
        GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener {

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i(GPSLogger.TAG, "StartAtBootService -- onStartCommand()");
        // lot of init code
        if (isGooglePlayServicesAvailable()) {
            mLocationRequest = LocationRequest.create();
            mLocationRequest.setInterval(freq);
            mLocationRequest.setFastestInterval(freq / 4);
            mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
            return START_STICKY;
        }
    }

    @Override
    public void onDestroy() {
        Util.sendNotification("Service", "OnDestroy", this, 100);
        stopLocationUpdates();
        DBHelper.closeDb();
        Log.i(GPSLogger.TAG, "StartAtBootService Destroyed");
        Intent broadcastIntent = new Intent("cc.siara.gpslogger.RestartService");
        sendBroadcast(broadcastIntent);
        super.onDestroy();
    }

}

我可以从ADB日志中看到操作系统多次启动服务并调用onStartCommand。但我甚至找不到“StartAtBootService Destroyed”。

我正在测试的设备是三星SM-J120G Android 5.1.1 API 22。

我知道Android会暂停服务以释放内存。但是,无论如何,当Android这样做时我可以运行我的清理代码吗?

1 个答案:

答案 0 :(得分:1)

onDestroy将在以下场景中调用 -

  1. 当您停止服务时。

  2. 当操作系统内存耗尽并决定停止您的应用时。

  3. 当您通过活动或广播接收者的意图呼叫停止服务时。