0
我已经创建了一个在后台统计的服务。我在我的MainActivity的onCreate()中启动服务。需要解释我的应用行为
每当我重新启动我的应用程序时,通过将计时器设置为-1,我的服务类也是如此。但是,当我切换手机的方向时,定时器不会重置。
据我所知,杀死一个应用程序调用onDestroy()方法,然后再次启动它,然后调用onCreate()。我已经看到,改变方向调用相同的两种方法,那么为什么这两种行为会导致不同的行为,并且有什么方法可以阻止它?我的代码期望计时器在应用程序被终止时重置,所以当方向改变时,我的计时器就会关闭。
这里是我的服务类的代码:
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;
}
}