最简单的方法就是做类似的事情
//Body of your click handler
Thread thread = new Thread(new Runnable(){
@Override
public void run(){
//code to do the HTTP request
}
});
thread.start();
这将导致run()
方法内的代码在新的执行线程中执行。如果您愿意,可以查看异步任务,尽管我个人从未使用过它。这是完成工作的一种快速而简单的方法。
关于传回信息,我将使用Handler 对象,它有效地允许您为给定线程设置消息队列并将消息传递给它,从而导致特定代码的执行。您需要这样做的原因是,Android 不会让除 UI 线程之外的任何线程更新实际 UI。
这能解决你的问题吗?我知道我的第一次通过并没有完全解决您的所有问题。
编辑基本上,你所做的是在你Activity
喜欢的定义一个处理程序对象
private Handler handler_ = new Handler(){
@Override
public void handleMessage(Message msg){
}
};
int
您还可以创建有助于告诉处理程序做什么的静态常量。您基本上使用它们来允许将几种不同类型的消息传递给处理程序的一个实例。如果只有一条消息被传回,那么您不必担心这一点。
例如
private static final int UPDATE_UI = 1;
向您调用的处理程序发送消息
handler_.sendMessage(Message.obtain(handler_, UPDATE_UI, inputStreamInstance));
从处理程序:
private Handler handler_ = new Handler(){
@Override
public void handleMessage(Message msg){
switch(msg.what){
case UPDATE_UI:
InputStream is = (InputStream)msg.obj;
//do what you need to with the InputStream
break;
}
}
};
或者,在将 inputStreamInstance 添加到Message
对象的情况下,您可以传递您喜欢的任何对象,因此如果您想将其解析为某种容器对象或类似的东西,您也可以这样做。只需从处理程序中将其转换回该对象即可。