Android工程中想要过一段时间后执行一些方法

TimerTask task = new TimerTask(){
  public void run() {

  }
};

Timer timer = new Timer(true);
timer.schedule(task,2000); //延时2000ms后执行,2000ms执行一次;

后来测试又出现了问题,会导致闪退:报错如下:

EXCEPTION: main
03-18 16:31:41.909: E/AndroidRuntime(16466): java.lang.IllegalStateException: TimerTask is scheduled already
03-18 16:31:41.909: E/AndroidRuntime(16466): at java.util.Timer.scheduleImpl(Timer.java:572)
03-18 16:31:41.909: E/AndroidRuntime(16466): at java.util.Timer.schedule(Timer.java:459)
03-18 16:31:41.909: E/AndroidRuntime(16466): at x.x.x.SpendControl$2.run(SpendControl.java:168)
03-18 16:31:41.909: E/AndroidRuntime(16466): at android.os.Handler.handleCallback(Handler.java:800)
03-18 16:31:41.909: E/AndroidRuntime(16466): at android.os.Handler.dispatchMessage(Handler.java:100)
03-18 16:31:41.909: E/AndroidRuntime(16466): at android.os.Looper.loop(Looper.java:194)
03-18 16:31:41.909: E/AndroidRuntime(16466): at android.app.ActivityThread.main(ActivityThread.java:5433)
03-18 16:31:41.909: E/AndroidRuntime(16466): at java.lang.reflect.Method.invokeNative(Native Method)
03-18 16:31:41.909: E/AndroidRuntime(16466): at java.lang.reflect.Method.invoke(Method.java:525)
03-18 16:31:41.909: E/AndroidRuntime(16466): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:922)
03-18 16:31:41.909: E/AndroidRuntime(16466): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:689)
03-18 16:31:41.909: E/AndroidRuntime(16466): at dalvik.system.NativeStart.main(Native Method)

原来是使用计时器时,前一个要销毁

package com.ldkbhd.yp;

import java.util.Timer;
import java.util.TimerTask;
import android.app.ProgressDialog;
import android.os.Handler;
import android.os.Looper;

public class SpendControl {

    public static MyTimerTask mTimerTask = null;


    private static android.app.ProgressDialog loadingDialog = null;
    public static class MyTimerTask extends TimerTask{
        public void run() {
            // 在这里写经过一段时间后要执行的方法
            // 等待log关闭
            loadingDialog.dismiss();
        }  
    }

    public static void ShowDialog(){
        
        new Handler(Looper.getMainLooper()).post(new Runnable() {
            @Override
            public void run() {
                // 显示等待log
                loadingDialog = new ProgressDialog(ArcadeRaiden.getContext());
                loadingDialog.setProgressStyle(android.app.ProgressDialog.STYLE_SPINNER);
                loadingDialog.setMessage("正在执行,请稍候...");
                loadingDialog.setIndeterminate(true);
                loadingDialog.setCancelable(false);
                loadingDialog.show();
                if ( mTimerTask != null){
                    mTimerTask.cancel();  //将原任务从队列中移除
                 }
                // 创建新的计时器
                mTimerTask = new SpendControl.MyTimerTask();
                Timer timer = new Timer(true);
                timer.schedule( mTimerTask, 1000 ); //延时1000ms后执行
                
            }});
    }

}

接下里我们只要调用SpendControl.ShowDialog()方法就可以让方法跑起来

原文地址:https://www.cnblogs.com/Colored-Mr/p/4317411.html