首先先定义一个主线程中用于接收的handler:本人接收到数据类型是list型
private Handler handler=new Handler(){
@SuppressLint("HandlerLeak")
public void handleMessage(Message msg){
try {
if(msg.what==1){
List<ConstructMessage> response = (List<ConstructMessage>) msg.obj;
}
} catch (Exception e){
e.printStackTrace();
}finally {
sendHandlerMessageDelayed(childHandler,VariableSorting.mIntervalTime);
}
}
创建HandlerThread:并开启一个子线程 childHandler,我们先设立一个标志消息触发子线程中的接收,然后执行里面的操作,在请求网络之后将数据发送给上面的主线程接收区。
handlerThread = new HandlerThread("ipawsBox");
//必须先开启线程
handlerThread.start();
//子线程Handler
childHandler = new Handler(handlerThread.getLooper()) {
@Override
public void handleMessage(Message msg1) {
if(msg1.what==25){
//在子线程中进行网络请求
String url=ResourceMethod.urlSplicingMinute();
Log.d(TAG, "Ipaws url:"+url);
hadata=getDateFromSever(url);
Message msg = new Message();
msg.what=1;
msg.obj=hadata;
Log.d(TAG, "Ipaws 执行执行----");
handler.sendMessage(msg);
}
}
};
Message msg = new Message();
msg.what=25;
msg.obj="you";
childHandler.sendMessage(msg);
}
最后回到主线程接收区,在接收完成后面的操作后,添加finally方法并执行 sendHandlerMessageDelayed()方法发送回childHandler,重复执行操作。sendHandlerMessageDelayed方法代码如下。
private void sendHandlerMessageDelayed(Handler handler,int delay){
if(handler==null){
return;
}
handler.removeMessages(25);
handler.sendEmptyMessageDelayed(25,delay);
}