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

  • 相关阅读:
    02 . Vue入门基础之条件渲染,列表渲染,事件处理器,表单控件绑定
    iptables防火墙简介,原理,规则编写,做网络防火墙,常见案例
    Go之发送钉钉和邮箱
    Jumpserver简介,部署及使用
    01 . Go语言实现SSH远程终端及WebSocket
    KVM简介,安装及常见使用,维护详解
    05 . Gin+Vue开发一个线上外卖应用(Session集成及修改用户头像到Fastdfs)
    04 . Gin+Vue开发一个线上外卖应用(用户名密码和图形验证码)
    03 . Gin+Vue开发一个线上外卖应用(用户数据创建,插入,跨域处理)
    02 . Go之Gin+Vue开发一个线上外卖应用(集成第三方发送短信和xorm生成存储数据库表)
  • 原文地址:https://www.cnblogs.com/Colored-Mr/p/4317411.html
Copyright © 2011-2022 走看看