我正在开发一个Android应用程序,其中有2个按钮。 这两个按钮用于处理线程返回的数据 所以我1)开始一个新的线程2)禁用按钮3)调用例程 这是
的代码new Thread(new Runnable(){
public void run() {
getPolls();
answer.setEnabled(false);
review.setEnabled(false);
}
}).start();
1.我的第一个问题是如何知道子线程已完成,以便我可以重新启用按钮? 2.在线程中调用的方法getPolls()生成一个arrayList。我通过处理程序返回它,如下所示
//Sending the filled poll questions data to the main thread
Message qemsg = messageHandler.obtainMessage();
qemsg.obj=poll;
messageHandler.sendMessage(qemsg);
消息处理程序代码如下
//Message Handler to get messages from the thread
private Handler messageHandler = new Handler() {
public void handleMessage(Message msg) {
polldata=(ArrayList<PollQuestion>) msg.obj;
}
};
我怀疑的是如何使用消息处理程序发送两个不同的对象?
请帮帮我。
答案 0 :(得分:2)
我会创建a singleton,然后在你的回调中设置一个布尔值来显示它何时完成。然后,您可以从代码的任何部分访问此单例,以检查它是否已完成。另一种方式是计时器。设置计时器以检查它是否完成并更新按钮。
答案 1 :(得分:1)
我会赞同詹姆斯霍洛威对单身人士的建议,这样你就可以控制你正在谈论的线索。
至于发送不同的消息,可以使用Message.what字段识别它们
qemsg.what = MY_CONST_ID;
在处理程序中,您可以找到您发送的消息类型并相应地对其进行解码
public void handleMessage(Message msg){
switch (qmsg.what)
{
case MY_CONST_ID:
//process your message here
break;
}
}
答案 2 :(得分:0)
我会使用你在getPolls()中初始化的静态ArrayList。在handleMessage方法中,将polldata设置为等于静态ArrayList。例如,创建一个名为Constants的类:
public class Constants{
static ArrayList<PollQuestions> constPolls;
}
在getPolls()中设置Constants.constPolls
Message qemsg = messageHandler.obtainMessage();
//qemsg.obj=poll;
// no need to set an object.
messageHandler.sendMessage(qemsg);
然后处理消息:
//Message Handler to get messages from the thread
private Handler messageHandler = new Handler() {
public void handleMessage(Message msg) {
polldata=Constants.constPolls;
}
};
希望这有帮助。
答案 3 :(得分:0)
Message
对象有两个构建整数字段arg1
和arg2
以及what
(请参阅http://developer.android.com/reference/android/os/Message.html)。使用它们来区分处理程序中的不同类型的消息。例如:
public static final int TYPE1 = 1; // use a better name ...
public static final int TYPE2 = 2;
public void handleMessage(Message msg) {
switch(msg.what) {
case TYPE1: polldata=(ArrayList<PollQuestion>) msg.obj; break;
case TYPE2: ...
}
}
要传达线程已完成考虑仅使用另一条消息并使用what
标记类型(已完成线程)。