</pre>之前在软件设计中遇到有序获取信息的问题,如:先登录成功同时返回当前权限内的设备id,再发送请求获取设备信息,此时返回的是所有设备id(因此这一步需要根据上一步获取到的id进行设备信息过滤),再获取设备的实时数据,此时返回的也是所有设备的实时数据(因此这一步也需要根据第一步获取到的id进行设备信息过滤)。如果你的处理方式是使用Thread.sleep(),设置足够长的时间以保证前一步的信息先处理完整,这样做的结果是导致软件的用户体验非常差,网络好的时候,导致多余的时间白等,网络差的时候导致数据解析不完整。因此可以采用handler处理<p></p><p>主线程中的handler如下设计</p><p></p><pre name="code" class="java">public static Handler myHandler;
myHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
// super.handleMessage(msg);
if (msg.what == 1) {
scd.getDivData(); //登陆成功后,则进行当前操作,获取设备信息
} else if (msg.what == 2) {
scn.getCurrentData(); //获取设备信息成功,则进行获取实时数据
} else if (msg.what == 3) {
Intent intent = new Intent(LoginActivity.this, //获取实时数据成功,则跳转至数据展示页面
ChangeActivity.class);
startActivity(intent);
} else if (msg.what == 11) {
Toast.makeText(getApplicationContext(), "用户名或密码有误",
Toast.LENGTH_SHORT).show();
}
}
};
在子线程中,需要在数据接收完成后发送信息通知主线程的handler
如下:
Message message=new Message();
message.what=1;
LoginActivity.myHandler.sendMessage(message);