【问题标题】:How can i handle my Looper in an OnClick method to run a function with delay?如何在 OnClick 方法中处理我的 Looper 以延迟运行函数?
【发布时间】:2017-03-22 11:55:01
【问题描述】:

我希望能够在点击事件中通过循环器在后台运行我的特定方法,这是正确的方法吗?

myThread = new LooperThread();
    myThread.start();
    upload.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
        }
    });
    stop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            myThread.handler.post(new Runnable() {
                @Override
                public void run() {
                    //my methods
                }
            });
        }
    });

还有我的 Looper 类:

class LooperThread extends Thread {
    Handler handler;
    public void run() {
        Looper.prepare();
        handler = new Handler();
        Looper.loop();
    }
}

如果是, 问题是这样,我不明白为什么在我输入“myThread.handler.post..”时系统无法识别“处理程序”并运行方法。

要不然,你能帮我做这个吗?

如果我在提问时犯了错误,我很抱歉,但这是我第一次来这里:)``

【问题讨论】:

  • 技术上是正确的。但是为此,您还需要HandlerThread 来创建一个带有循环器的线程,您可以使用它来创建一个处理程序。
  • 感谢您的回答,但我不清楚 HandlerThread 究竟是如何工作的。你能说得更具体点吗?

标签: android handler looper


【解决方案1】:

欢迎来到 Stack Overflow。

我希望能够在点击事件中通过循环器在后台运行我的特定方法,这是正确的方法吗?

您的代码有效,但我不能说这是正确的方法。就像@tynn 提到的那样,HandlerThread 可能是更好的选择。

如果是,问题是这样,我不明白为什么系统在我输入“myThread.handler.post..”时无法识别“处理程序”并运行方法。

要不然,你能帮我做这个吗?

如果我理解您的问题,那就是访问问题。您的处理程序似乎无法访问,因为它被声明为包私有。您可以通过这种方式使您的处理程序可见:

// Should this class be public or package-private?
public class LooperThread extends Thread {

    private Handler handler;

    public Handler getHandler() {
        return handler;
    }

    // ...
}

您将能够像这样引用处理程序:

myThread.getHandler().post(...);

更新

您可以通过这种方式延迟 Runnable 的执行:

// Delay execution of a Runnable task by 5000 milliseconds.
myThread.getHandler().postDelayed(myDelayedRunnable, 5000);

【讨论】:

  • 好的,我解决了“处理程序”问题。我声明了“Thread myThread”而不是“LooperThread myThread”,现在它可以工作了:) 谢谢你的回答,你很有帮助:)
猜你喜欢
  • 2011-05-11
  • 1970-01-01
  • 2012-04-16
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 2013-03-13
  • 2017-07-23
相关资源
最近更新 更多