2016-11-18 15 views
0

バックグラウンドでカウントされるサービスを作成しました。私はMainActivityのonCreate()でサービスを開始しています。私のアプリの動作についての説明が必要

私のアプリケーションを再起動するたびに、タイマーを-1に設定することでサービスクラスも変わります。しかし、私は私の携帯電話の向きを切り替えると、タイマーはリセットされません。

私が知っている限り、アプリケーションを終了すると、onDestroy()メソッドが呼び出され、その後再び起動され、その後onCreate()が呼び出されます。私は、変化するオリエンテーションが同じ2つの方法を呼び出すことを読んだので、なぜ2つのアクションが異なる行動を引き起こし、それを防止する方法があるのですか?私のコードでは、アプリケーションが強制終了されたときにタイマーがリセットされることを期待しています。そのため、向きが変更されると、タイマーはオフになります。ここで

は私のサービスクラスのコードです:

ublic class CounterService extends Service { 
private Handler handler; 
private int time = -1; 
private boolean isActive; 
private Intent timeBroadcaster; 
private Runnable counter; 
private Thread serviceCounter; 
private SharedPreferences.Editor editor; 
public static final String EXTRA_TIME = "TIME"; 

@Override 
public void onCreate(){ 
    super.onCreate(); 
    handler = new Handler(); 
    timeBroadcaster = new Intent(); 

    timeBroadcaster.setAction(Intent.ACTION_SEND); 
    SharedPreferences prefs = getSharedPreferences("SessionLogger_Preferences", MODE_PRIVATE); 
    editor = prefs.edit(); 


    counter = new Runnable() { 
     @Override 
     public void run() { 
       isActive = ((PowerManager) getSystemService(Context.POWER_SERVICE)).isInteractive(); 
       if (isActive) { 
        handler.postDelayed(this, 1000); 
        time += 1; 
        Log.i("TIME", String.valueOf(time)); 
       } else { 
        editor.clear(); 
        editor.commit(); 
        if (time > 5) { 
         //log 
        } 
        time = 0; 
        handler.postDelayed(this, 1000); 
       } 
      timeBroadcaster.putExtra(EXTRA_TIME, time); 
      sendBroadcast(timeBroadcaster); 

     } 
    }; 

    serviceCounter = new Thread(counter); 
    serviceCounter.start(); 

} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    return START_STICKY; 
} 

@Override 
public void onDestroy(){ 

} 

@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

}

答えて

0

回転は、アプリを殺すことはありません。それは活動を殺します。アプリケーションはまだ実行されますが、アクティビティは再開されます。アプリケーションは引き続き実行されるため、アプリケーション内のサービスはまだ実行されており、サービスは再起動されません。実際にはそれがサービスの全ポイントです。アクティビティが殺害された場合でも実行され続けます。

関連する問題