如何停止旧计时器

时间:2014-07-03 09:25:09

标签: android timer scheduled-tasks

我使用计时器来安排一些事情要做的事情。当我关闭我的应用程序时,计时器会一直工作,直到完成工作。 (这是我想要的,我做了)。但是当我再次打开它时,运行2个计时器(旧的和新的)。 重新打开应用程序时如何删除旧计时器。我知道我的问题很难理解。但我希望有人可以帮助我。感谢

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

这就是我可以建议的,不用看你的代码;)