我的程序需要用子线程向网络获取数据并保存到MainActivity中。代码大概是这样的
public class MainActivity {
private Timer timer;
public MyHandler handler;
private String js;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handler = new MyHandler();
timer = new Timer();
getAllInfo();
//延迟5秒等待getAllInfo(); 如果去掉该语句,数据将不能从网络获取到
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("js = " + js);
System.out.println("OnCreate OVER);
}
//利用计时器,两分钟联网获取一次数据
private void getAllInfo(){
timer.schedule(new java.util.TimerTask(){
@Override
public void run()
{
System.out.println("Id:" + Thread.currentThread().getId());
String data;
//
联网获取数据的代码 .... data = .....
//
Message msg = Message.obtain(handler, 1 , data);
handler.removeMessages(0);
msg.sendToTarget();
System.out.println("SEND SUCCEED " + data);
}
}, 0, 120*1000);
}
//自定义Handler类
private class MyHandler extends Handler
{
public MyHandler() {
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
System.out.println("handleMessage START");
//更新数据的值
js = msg.obj.toString;
System.out.println(js);
System.out.println("handleMessage OVER");
}
};
}
程序运行后输出结果为:
id:617
SEND SUCCEED data(这里data已经是网络上获取到的数据)
js =
OnCreate OVER
handleMessage START
data(这里data已经是网络上获取到的数据)
handleMessage OVER
可以看到js = ,并没有拿到值
再往下看handleMessage()竟然在OnCreate()执行完毕之后才执行,然后js拿到了值,但是现在拿到已经没用了……OnCreate()已经结束
所以为什么handleMessage()不是接受到 msg.sendToTarget()的消息之后立即执行的呢?这样我的Activity中的js就没法获取到数据显示在界面上了
工期限制,急求大神解答!!