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()方法就可以让方法跑起来