zoukankan      html  css  js  c++  java
  • 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()方法就可以让方法跑起来

  • 相关阅读:
    Android中this.*与*.this还有*.class的区别是什么?
    多线程之CEvent
    Java类型信息之RTTI
    javascript学习-闭包
    javascript学习-对象与原型
    javascript学习-类型判断
    Javascript学习-简单测试环境
    javascript学习-目录
    MySQL数据库安装与配置详解
    深入研究C语言 第四篇
  • 原文地址:https://www.cnblogs.com/Colored-Mr/p/4317411.html
Copyright © 2011-2022 走看看