有一个需求, 我需要 有一个可能会长时间回应的请求, 然后在 请求的过程中 去改变UI, 实际发现 android 中只能主线程能操作 UI, 所以 只能 新建一个线程 去操作 长时间 请求 的 任务, 然后 将 返回结果 返回 给 Message
下面是一个 点击事件 的 处理 过程
class AddSensor implements OnClickListener{
Looper looper = Looper.myLooper();
Handler messageHandler = new MessageHandler(looper);
public void onClick(View v) {
setTitle("信息已提交,请等待...");
/新建线程 发 UDP 请求
new Thread(){
@Override
public void run() {
// TODO Auto-generated method stub
String return_data = "结果长时间的请求得到的回应 ";
Message message = Message.obtain();
message.obj = return_data;
messageHandler.sendMessage(message);
}
}.start();
\\\\\\\\\\
};
/ 收到 新线程 发请求 后的 结果
class MessageHandler extends Handler {
public MessageHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
//收到 新线程 发请求 后的 结果 ,做判断然后 改变UI
String return_str = (String) msg.obj;
if(return_str == null){
setTitle("添加新系统");
error_info.setText(R.string.submit_error);
}else{
setTitle("添加新系统");
Toast.makeText(LoginAddSensor.this, return_str, Toast.LENGTH_LONG).show();
}
}
}
/\\\\\\\\
new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
if (!Thread.currentThread().isInterrupted()) {// 如果没有终止
try {
// do something
Message message = Message.obtain();
message.what = HANDER_SAVE;
message.obj = requestStatus;
hander.sendMessage(message);
} catch (Exception e) {
e.printStackTrace();
} finally {
Thread.currentThread().interrupt();// 执行完终止
}
}
}
}.start();
//\\
Handler hander = new Handler() {
public void handleMessage(Message msg) {
int handerType = (int) msg.what;
final String return_str = (String) msg.obj;
switch (handerType) {
case HANDER_SAVE:
//
break;
case HANDER_REFRESH:
//
break;
default:
break;
}
};
};