似乎在主线程中,我只需要编写一个扩展Handler并覆盖其handleMessage方法的类。然后我可以只创建Handler对象而无需准备looper。
class myHandler extends Handler{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
String s=(String)msg.obj;
textView.setText(s);
}
}
在主线程中,以下代码起作用:
handler=new myHandler();
但是在worker线程中你确实需要先准备looper然后才能创建Handler对象,否则threadLocal.get()就不能为当前worker线程获取looper。我的问题是一定有地方为主线准备弯针,但我就是找不到。我不知道threadLocal如何为主线程找到这个looper。
class WorkerThread extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
Looper.prepare();
handler=new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
System.out.println(msg.obj.toString());
System.out.println(Thread.currentThread().getName());
}
};
Looper.loop();
}
}
您必须在主线程中定义Looper。
handler = new Handler(Looper.getMainLooper());
您可以从主线程或其他工作线程调用此方法。要谨慎。
void timerMethod(){
handler.postDelayed(new Runnable() {
public void run() {
setTime();
}
}, timeDelay);
}
Main looper是在ActivityThread类的main方法中准备的,具有以下方法调用:
Looper.prepareMainLooper();
例如,请参阅此处的源代码。
我在准备好的语句中使用了命令,当我在单线程环境中执行它时,它的工作很好,但是在多线程环境中,它会引起一些问题,那就是数据重复,即如果我有5个线程,每个记录会重复5次,我认为db中没有锁来帮助线程。我的代码: 如果employee.size=5,thread count=5,执行后我将得到25条记录,而不是5条
问题内容: 我对android完全陌生,只想知道它是否是在主线程外更新UI的任何可行且可行的方法。仅从我的代码中,我就在下面列出了这些代码;根本不可能。但是, 我只想使用另一个线程来更新UI 。请事先帮助我! 问题答案: 使用activity.runOnUiThread
问题内容: 我刚刚开始进行android开发,并且更新UI确实使我很烦:/ 到目前为止,这是我一直在努力的工作- 它工作正常,但是每个人都说要在主线程中做图形,所以我正在尝试(但失败)将其传递给另一个线程。麻烦的是,我真的不知道怎么做,因为我从未真正使用过线程。 Google给出的有关使用Threads的示例似乎并不十分清楚,我也无法真正按照自己的意愿去做。我可以请某人在这里给我一个最基本的例子,
问题内容: 如何在Android中从辅助线程调用主线程? 问题答案: 最简单的方法是从线程中调用runOnUiThread(…)
问题内容: 我通过以下方式创建了线程服务: 关闭应用程序后,电话的工作速度非常慢,我猜这是由于线程终止失败引起的。 有谁知道在终止应用程序之前终止所有线程的最佳方法是什么? 问题答案: 附录 :Android框架为一次性工作,后台工作等提供了许多帮助程序,与在许多情况下尝试滚动自己的线程相比,它们可能更可取。如下面的文章所述,AsyncTask是一个很好的起点。我鼓励读者在开始考虑自己编写线程之前
Java 8的promise实现,即CompletableFuture,提供了应用(…)和get()方法。 其中,在必要时等待promise完成,然后返回其结果。 现在假设我们使用(或)链接一些代码以在UI线程上运行(请参见stackoverflow.com/thenApply和thenApplyAsync之间的差异)。 如果我们在UI线程中调用,比如Java以某种方式处理这种情况,或者它会导致所