【发布时间】:2018-02-26 10:18:35
【问题描述】:
谁能帮我更正我的代码。 (https://i.stack.imgur.com/jKOvH.png) 我正在尝试显示从 0 到 10 的实时计数并在 textView 上显示但总是崩溃。我是 android 的新手,但很高兴学习。请帮我解释这个问题。对不起我的英语不好。
【问题讨论】:
-
Looper 用于将数据从内容提供到 UI 主题,而其他处理程序用于异步发送消息而不打扰线程
谁能帮我更正我的代码。 (https://i.stack.imgur.com/jKOvH.png) 我正在尝试显示从 0 到 10 的实时计数并在 textView 上显示但总是崩溃。我是 android 的新手,但很高兴学习。请帮我解释这个问题。对不起我的英语不好。
【问题讨论】:
好吧,我自己不是 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
【讨论】:
尝试使用此代码在活动下创建新线程。无需创建处理程序。
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();
【讨论】:
只是:
new Handler().post(new Runnable() {
@Override
public void run() {
...
}
});
你可以试试。
【讨论】: