代码之家  ›  专栏  ›  技术社区  ›  hinch

重新启动处理程序。Java中的postDelayed[重复]

  •  1
  • hinch  · 技术社区  · 7 年前
    @Override
    public void onUserInteraction() {
        Handler handler = new Handler();
        handler.postDelayed(new Runnable () {
            public void run() {
                finish();
            }
        }, 5000);
        handler.removeCallbacks(null);
    }
    

    我试图在调用OnCreate方法时运行处理程序。然后,我想取消处理程序,并在收到用户交互时再次调用它(重新启动处理程序)。

    我该怎么做?

    4 回复  |  直到 7 年前
        1
  •  4
  •   Gevork Safaryan    7 年前

    可以使用布尔对象,例如:

    @Override
    public void onUserInteraction() {
        isStarted = true;
        Handler handler = new Handler();
        handler.postDelayed(new Runnable () {
            public void run() {
              if(isStarted){
                finish();
                }
             }
        }, 5000);
    

    }

    Runnable myRunnable = new Runnable() {
        @Override
        public void run() {
            finish();
        }
    };
    
    public static Handler myHandler = new Handler();
    private static final int TIME_TO_WAIT = 5000;
    
    @Override
    public void onUserInteraction() {
        restart();
    }
    
    public void start() {
        myHandler.postDelayed(myRunnable, TIME_TO_WAIT);
    }
    
    public void stop() {
        myHandler.removeCallbacks(myRunnable);
    }
    
    public void restart() {
        myHandler.removeCallbacks(myRunnable);
        myHandler.postDelayed(myRunnable, TIME_TO_WAIT);
    }
    
        2
  •  2
  •   Tim Abhishek Kumar    7 年前

    将runnable和handler存储在字段中并重用它们

    Handler handler;
    Runnable runnable = new Runnable () {
        public void run() {
            finish();
        }
    };
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        handler = new Handler();
        handler.postDelayed(runnable, 5000);
    }
    
    @Override
    public void onUserInteraction() {
        handler.removeCallbacks(null);
        handler.postDelayed(runnable, 5000);
    }
    
        3
  •  0
  •   Sharath kumar    7 年前

    创建处理程序并将其引用作为全局变量

    private Runnable runnable;
    private Handler newHandler;
    
    newHandler = new Handler();
    runnable = new Runnable() {
        @Override
        public void run() {
            try {
                //update UI
                newHandler.postDelayed(runnable,100);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };
    newHandler.post(runnable);
    

    和用户交互

    @Override
    public void onUserInteraction() {
        super.onUserInteraction();
       newHandler.removeCallbacks(runnable);
        //Do some task
        if(//task done){
         newHandler.postDelayed(runnable,100);
         }
    }
    
        4
  •  0
  •   Olga Konoreva    6 年前

    直到我使用Handler的 removeCallbacksAndMessages(Object token)

    关于科特林

    private var restartingHandler = Handler()
    private var runnable: () -> Unit = {}
    
    fun start() {
        restartingHandler.postDelayed(runnable, 5000L)
    }
    
    fun restart() {
        restartingHandler.removeCallbacks(runnable)
        restartingHandler.removeCallbacksAndMessages(null)
    
        restartingHandler.postDelayed(runnable, 5000L)
    }
    
    fun stop() {
        restartingHandler.removeCallbacks(runnable)
        restartingHandler.removeCallbacksAndMessages(null)
    }