2016-07-23 15 views
1

私のアプリを閉じるかアプリが破棄された時、私は奇妙な動作をしています。サービスが開始されると、startCommand()メソッドが再び呼び出されます。サービスはバックグラウンドで実行された場合は、再度呼び出してはなりませんそのは が起こって、なぜこれがこれが私のMainActivityコードアプリを閉じるとサービスが再開します

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Intent intent = new Intent(this, Services.class); 
     if (Services.status == true) { 
      Log.e("Check:","Service is Running"); 
     }else { 
      Log.e("Check:","Service Will run now"); 
      startService(intent); 
     } 
    } 
} 

である私のサービスコード

package gcmtutorial.androidbegin.com.socket; 

import android.app.Service; 
import android.content.Intent; 
import android.os.IBinder; 
import android.util.Log; 
import android.widget.Toast; 

/** 
* Created by shuser on 21-07-2016. 
*/ 
public class Services extends Service { 

    public static boolean status; 

    @Override 
    public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    public class Hello implements Runnable{ 
     public void run(){ 
      synchronized (this){ 
       int i=0; 
       while (i<100){ 
        try { 
         wait(1000); 
         Log.e("Status:", "value "+i); 
         i++; 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
      stopSelf(); 
     } 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     // Let it continue running until it is stopped. 
     status = true; 
     Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); 
     Thread thread = new Thread(new Hello()); 
     thread.start(); 
     return START_STICKY; 
    } 
    @Override 
    public void onDestroy() { 
     status = false; 
     super.onDestroy(); 
     Log.e("Status:","Service Destroyed"); 
    } 
} 

である私を助けてくださいそのようなことが起こっている理由は、私を助けてくださいサービス付き。私はトーストにもサービスを始めるとLogCatも0

+0

を返す、あなたのプロセスが破壊されたときに自動的に再起動しないように、あなたのサービスを希望した場合。 –

答えて

1

START_STICKYパーからの値を示しています。それはonStartCommand(テント、int型、int型から戻った後(を開始している間に、このサービスのプロセスが殺されている場合

を))、それを開始状態にしておきますが、この配信されたインテントを保持しません。 その後、システムはサービスを再作成しようとします。開始状態であるため、新しいサービスインスタンスの作成後にonStartCommand(Intent、int、int)を呼び出すことが保証されます。

あなたはcondition`がその理由であるあなたの `場合START_NOT_STICKY

関連する問題