Android:为什么Handlers发布了runnable?

Ric*_*ich 14 android android-handler

有人可以解释为什么Handlers发布了一个可运行的?重写handleMessage和发送消息是否也做同样的事情?

我写了一些未经测试的代码来说明我认为这两种方法的实现方式.如果我的方法错了,请纠正我.

邮政处理程序:

handler.post(new Runnable() {
    @Override
    public void run() {
        imageView.doSomething();
    }
 });
Run Code Online (Sandbox Code Playgroud)

handleMessage处理程序:

final Handler handler = new Handler() {
     @Override
     public void handleMessage(Message message) {
         imageView.doSomething();
     }
 };

handler.sendMessage(message);
Run Code Online (Sandbox Code Playgroud)

Mr.*_*.Me 11

两个代码片段的工作方式相同,当您想要在UI线程上执行某些代码时,通常使用Handler.postRunnable,而无需了解有关Handler对象的任何信息.在许多需要在UI线程上执行任意代码的情况下,这是有道理的.

但在某些情况下,您希望组织发送到UI线程的内容并具有您希望以这种方式执行的特定功能,您可以使用sendMessage.

我不认为使用任何一个在另一个之上会有性能损失.取决于你,使用你认为更适合你的任何东西.

  • 但是,如果要在UI线程上执行代码,则必须在UI线程中创建Handler,或使用"new Handler(Looper.getMainLooper())".使用"new Handler()"可以在当前线程中创建一个Handler,而不必是主线程. (2认同)