在Application Destroy上,Android重新创建服务

时间:2017-02-01 06:37:00

标签: android performance android-layout android-fragments android-service

这已被问了很多次,我已经看到并应用了很多答案,但似乎没有任何帮助。

这就是我在应用程序启动时启动服务器的方式

startService(new Intent(MavsMainActivity.this, LocationUpdateService.class));

清单

<service android:name=".myservices.services.LocationUpdateService"
    android:process=":locationService"
    />

当我强行关闭应用程序时,它会再次触发onCreate()服务。我尝试了return START_STICKYreturn START_NOT_STICKY,重新启动Application onDestroy上的服务,并在用户分别销毁应用程序后重新启动应用程序时重新启动它。

这是我的服务类,请指导我如何在后台运行服务,即使用户破坏了应用程序。

        @Override
        public void onCreate() {

            if (isGooglePlayServicesAvailable()) {
                /* min dist for location change, here it is 10 meter */
                mGoogleApiClient = new GoogleApiClient.Builder(this)
                        .addApi(LocationServices.API)
                        .addConnectionCallbacks(this)
                        .addOnConnectionFailedListener(this)
                        .build();

                mGoogleApiClient.connect();
                Toast.makeText(getApplicationContext(), "Service created", Toast.LENGTH_SHORT).show();

    }


        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            Log.i(TAG, "onStartCommand: ");
            mLocationRequest = new LocationRequest();
            mLocationRequest.setInterval(BACKGROUND_INTERVAL);
            mLocationRequest.setFastestInterval(30000);
            mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
            mLocationRequest.setSmallestDisplacement(20);

            sendOfflineData();
            Toast.makeText(getApplicationContext(), "onStart Called", Toast.LENGTH_SHORT).show();

   return START_STICKY ;

    }

1 个答案:

答案 0 :(得分:3)

您必须使用IntentService代替Service为什么?

  

服务:服务在后台运行,但它在应用程序的主线程上运行。

     

IntentService: IntentService在单独的工作线程上运行。

在Application Destroy服务停止并重新启动它,如果你返回START_STICKY,因为它的seprate线程在主应用程序线程上运行。

您应该IntentService并在此处查看details