【问题标题】:How exactly using the Looper() and Handler()究竟如何使用 Looper() 和 Handler()
【发布时间】:2018-02-26 10:18:35
【问题描述】:

谁能帮我更正我的代码。 (https://i.stack.imgur.com/jKOvH.png) 我正在尝试显示从 0 到 10 的实时计数并在 textView 上显示但总是崩溃。我是 android 的新手,但很高兴学习。请帮我解释这个问题。对不起我的英语不好。

【问题讨论】:

  • Looper 用于将数据从内容提供到 UI 主题,而其他处理程序用于异步发送消息而不打扰线程

标签: java android sdk


【解决方案1】:

好吧,我自己不是 Android 开发人员,但根据我在网上的理解,您所做的是创建一个处理程序并提供与主线程相关联的 Looper。这将此处理程序与主线程相关联。当我们发布 Runnable 时,它​​会在主线程的 MessageQueue 中排队,然后在主线程中执行。

创建自己的线程并提供 Lopper 和 MessageQueue 不是解决问题的正确方法。因此,Android 提供了 HandlerThread(Thread 的子类)来简化流程。在内部,它执行与我们所做的相同的事情,但以一种健壮的方式。因此,请始终使用 HandlerThread。

private class MyHandlerThread extends HandlerThread { 

Handler handler;

public MyHandlerThread(String name)
 { 
super(name); 
} 
@Override 
protected void onLooperPrepared() { 
handler = new Handler(getLooper()) { 
@Override 
public void handleMessage(Message msg) {
 // process incoming messages here 
// this will run in non-ui/background thread
 } 
}; 
} 
}

信息位于:https://blog.mindorks.com/android-core-looper-handler-and-handlerthread-bd54d69fe91a

【讨论】:

  • 谢谢,我会明白的。所以我需要更多地了解这些概念并了解更多关于 Thread 和 runnable 的信息
【解决方案2】:

尝试使用此代码在活动下创建新线程。无需创建处理程序。

Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    for (int i = 0; i <= 10; i++) {
                        final int value = i;
                        text.setText(value);
                    }
                }
            };
    new Thread(runnable).start();

【讨论】:

  • 你能解释一下如何以及为什么?
【解决方案3】:

只是:

new Handler().post(new Runnable() {
        @Override
        public void run() {
              ...
        }
    });

你可以试试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 2019-08-21
    相关资源
    最近更新 更多