我使用计时器来安排一些事情要做的事情。当我关闭我的应用程序时,计时器会一直工作,直到完成工作。 (这是我想要的,我做了)。但是当我再次打开它时,运行2个计时器(旧的和新的)。 重新打开应用程序时如何删除旧计时器。我知道我的问题很难理解。但我希望有人可以帮助我。感谢
答案 0 :(得分:0)
退出应用时,您应该致电Timer.cancel()
。
答案 1 :(得分:0)
当您的活动调用onStop时,您应该停止计时器。
查看活动http://developer.android.com/reference/android/app/Activity.html
的生命周期如果您的计时器是全局变量
@override
public void onStop(){
super.onStop();
mTimer.cancel();
}
好吧,如果您想在用户关闭表单后保存数据,最好使用服务。 在Activity onStop()中您可以将所有表单数据保存在parcelable / serializable模型中, 将该模型放入intent服务,然后使用startService(Intent)
调用service@Override
public void onStop(){
FormData formData = recoverAllMyFormData();
Intent myServiceIntent = new Intent(this, MyService.class);
myServiceIntent.putParcelable("INTENT_EXTRA_FORM_DATA", formData);
startService(myServiceIntent);
super.onStop();
}
然后,在您的Service onStartCommand中将被调用。我喜欢使用ThreadPoolExecutor一次控制一个线程
//Global variable
private ThreadPoolExecutor storerExecutor = new ThreadPoolExecutor(1, 18, 50, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(10));
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
final FormData formData = intent.getParcelable("INTENT_EXTRA_FORM_DATA");
if(formData != null){
storerExecutor.execute(new Runnable(){
public void run(){
//Use your sqlite code to store the form
}
});
}
return Service.START_NOT_STICKY;
}
注意:FormData应该实现Parcelable
这就是我可以建议的,不用看你的代码;)