我创建了一个在后台计算的服务。我在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;
}
}
答案 0 :(得分:0)
轮播不会杀死该应用。它杀死了活动。应用程序仍在运行,但Activity重新启动。由于应用程序仍在运行,应用程序中的任何服务仍在运行,并且服务未重新启动。事实上,即使活动被杀,这就是服务的全部要点 -