2016-11-18 54 views
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; 
} 

}

回答

0

旋转不会终止该应用。它杀死了活动。应用程序仍在运行,但活动重新启动。由于应用程序仍在运行,应用程序中的所有服务仍在运行,并且服务未重新启动。事实上,这就是服务的全部要点 - 即使在活动被杀害时也能保持运行。