最近做上传文件和访问阿里云的消息队列;在访问消息队列时需要去轮循,所以在网上查了一下,一开始用的AlarmManager和PollingUtils,这两个类在网上随便一搜都可以查到;然后写了一个查询消息的服务,但是后来发现每次都会经历将近一分钟才会去轮循,查了一下原因,好像是在android5.2(记不太清了)之后AlarmManager的时间不能低于一分钟;所以放弃了这个方法;
现在是利用Timer去做的轮循:
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (msg.what == PEEKMESSAGEDATA) {
AliyunMNSUtil.peekMessage();
}
};
};
Timer timer = new Timer();
//定时发送消息
TimerTask task = new TimerTask() {
@Override
public void run() {
Message message = new Message();
message.what = PEEKMESSAGEDATA;
handler.sendMessage(message);
}
};
timer.schedule(task, 5000, 5000);// 5秒之后执行task,经过5秒再次执行
全局变量
为了在项目中随处可以使用计数器,便在继承Application的Appcontext中定义了三个方法:
public int number;
public int getNumber(){
return number;
}
public int addNumber(){
return number++;
}
public int subNumber(){
return number--;
}
然后在onCreate()中给number赋值(不然取得的值每次都是初始值);
然后在项目中需要的地方
AppContext.getInstance().addNumber();//计数器+1
AppContext.getInstance().subNumber();//计数器-1
这里全局类的变量修饰符都改为public,并直接在方法里set;没有去实例化对象,因为每次去实例化对象都会报空指针之类的错误;
好了 ,这样要的效果得到了