バックグラウンドでカウントされるサービスを作成しました。私は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;
}
}