【问题标题】:Timeout detection for eventlisteners in AndroidAndroid中事件监听器的超时检测
【发布时间】:2012-06-19 08:28:14
【问题描述】:

我设置了事件监听,例如:setOnClickListener 这样

    Button stopBtn = (Button)findViewById(R.id.stop);
    stopBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            doMagic();
        }
    });

如果未按下按钮,我想将此侦听器设置为 10 秒的超时事件。用例:我有 button1 激活此 stopBtn 监听器 10 秒,如果超时,它会被停用,我需要按 button1 以使 stopBtn 再次激活。

我可能做错了:

    final Handler myHandler = new Handler();
    startBtn = (Button)findViewById(R.id.start);
    myHandler.postDelayed(new Runnable() {
        public void run() {
            startBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.i(TAG,"runned");
                }
            });
        }
    }, 10000);

10 秒后我仍然可以点击它,这可能是因为事件监听器仍然附加。即使我不知道它是否被解雇,我该如何分离它。

【问题讨论】:

    标签: java android timeout


    【解决方案1】:

    张贴在 Handler 上的 delayed Runnable 可以做到这一点:

    myHandler.postDelayed(new Runnable() {
     public void run() {
       if(something happened) {
         // magic work
       } else {
         // turn off the event
       }
     }
    , 10000);
    

    您可以使用以下代码将Handler 初始化为实例变量:

    final Handler myHandler = new Handler();
    

    【讨论】:

    • 您可以将侦听器更改为新的(可能是空的或任何您需要的)
    【解决方案2】:

    可以使用Handler 安排延迟操作。具体检查2个方法:postAtTime(Runnable, long)postDelayed(Runnable, long)

    创建Handler 很容易,只需在Activity.onCreate(Bundle state) 中使用其默认构造函数Handler handler = new Handler()。然后将您想要的操作包装到 Runnable 中并传递给处理程序。

    【讨论】:

    • 哦,在我写这篇文章的时候Tim Messerschmidt 已经发布了几乎相同的建议。 :)
    猜你喜欢
    • 1970-01-01
    • 2020-06-24
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    相关资源
    最近更新 更多