其实就是定时去给服务器,发送心跳,给服务器提供简单的监控功能.
这里不能简单的用Timer实现,会出现阻塞的情况,要使用timer和Handler结合的方式
实现在不影响界面的情况下,异步发送心跳.
下面的代码可以直接copy过去就用吧
1.第一个30000是延时30秒执行,然后第二个30000是每隔30秒执行一次
//30秒保活一次
private void startKeepAliveService() {
keepAliveTimer.schedule(keepAliveTask, 30000,30000);
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
2.定时器执行的时候,让他去发送一个消息给handler
//定时器循环
Timer keepAliveTimer = new Timer();
TimerTask keepAliveTask = new TimerTask(){
public void run() {
Message message = new Message();
message.what = 108;
keepAliveHandler.sendMessage(message);
}
};
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
3.handler去收到命令以后去执行,心跳请求
//3.定时保活处理
Handler keepAliveHandler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case 108:
String url="http://172.19.128.53:8060/api/keepAlive";
OkHttpClient faceHttpClient = new OkHttpClient();
Request faceRequest = new Request.Builder()
.get()
.url(url)
.build();
//构造Call对象
Call faceCall=faceHttpClient.newCall(faceRequest);
faceCall.enqueue(new okhttp3.Callback() {
@Override
public void onFailure(Call call, IOException e) {
ToastUtils.toast(HomeActivity.this, "11111");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String jsonStr =response.body().string();
//1.将base64,转换为图片
try {
JSONObject jsonObj=new JSONObject(jsonStr);
String code =jsonObj.getString("code");
if("200".equals(code)){
//保活成功
System.out.println("保活成功");
}else{
System.out.println("保活失败");
}
} catch (JSONException e) {
System.out.println("保活响应数据,解析失败");
e.printStackTrace();
}
}
});
break;
}
super.handleMessage(msg);
}
};
