0

これは何度も尋ねられています。私は多くの回答を見て、これを適用しましたが、何も役立たないようです。アプリケーションが破棄されると、Androidはサービスを再作成します

これは

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 ; 

    } 
+0

IBinderを使用してバックグラウンドプロセスを継続します –

+0

THanksマニフェストファイルにプロセスを追加した後にアプリケーションがクラッシュする – Kirmani88

+0

できません。これはAndroidのデザインです。あなたのアプリがメモリを要求するシステムかユーザー自身によって殺されると、システムはサービスを再開します。 – Wizard

答えて

3

あなたはService理由の代わりにIntentServiceを使用する必要がありますか?

サービス:サービスはバックグラウンドで実行されますが、アプリケーションのメインスレッドで実行されます。

IntentService: IntentServiceは別のワーカースレッドで実行されます。そのseprateスレッドが、メインアプリケーションスレッドで実行されているので、あなたがSTART_STICKYを返す場合

は、アプリケーションにサービス停止と再起動、それを破壊します。

あなたはIntentServiceで、detailsをご覧ください。

+0

ありがとう、これは物事をより明確にします。この質問に関連していない1つの質問は、ここで回答すると感謝します。私はIntentServiceからサービスを継承しており、さらに2つのメソッド、onHandleIntentとコンストラクタを作成します。これらのメソッドを実装する必要はありません。 – Kirmani88

+0

IntentServiceの場合、ロジック(コード)をonHandleIntentメソッドに実装します。 –

関連する問題