需要解释我的应用程序的行为

时间:2016-11-18 02:54:58

标签: android android-studio android-lifecycle

我创建了一个在后台计算的服务。我在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;
}

}

1 个答案:

答案 0 :(得分:0)

轮播不会杀死该应用。它杀死了活动。应用程序仍在运行,但Activity重新启动。由于应用程序仍在运行,应用程序中的任何服务仍在运行,并且服务未重新启动。事实上,即使活动被杀,这就是服务的全部要点 -