Android之定时刷新数据

近期项目,要求定时刷新访问服务器获取状态,经查资料,了解到几种定时刷新数据的方式
常见的定时刷新有:Timer、 Alarm、Handle  
widgetapp更新中常用Alarm用的比较多,但有说用alarm会使系统反应变慢,由于急于完成项目,故未验证此方法。个人开发中常用Timer做开机动画的延时,
另外,在定时刷新网络时常用Handle,以下是定时刷新的用法:
1.Timer的用法
用法一:<个人并未使用这种方法>
private Timer timer = new Timer();


TimerTask task = new TimerTask(){
           public void run(){
                    Message message = new Message();
   handler.sendMessage(message);
          }


};
Handler handler = new Handler(){
public void handleMessage(Message msg){
switch(msg.what){
    case 1:
update()//要更新的数据可放在这里
break;
}
}
}
用法二:<个人常用此方法做开机动画>
Timer timer = new Timer();
//参数1:TimerTask 参数2:定时时间,单位毫秒
timer.schedule(new TimerTask(){
@Override
public void run(){
Intent intent = new Intent(AA.this,BB.class);
startActivity(intent);
}

},3000);
2.Alarm的用法<未使用过>
  开始计时:
Intent intent = new Intent(widgetUpdate);
        refreshIntent = PendingIntent.getBroadcast(pContext,0,intent,0);
alarm = (AlarmManager)pContext.getSystemSerVice(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.PTC,0,1000,refreshIntent);//每秒刷新一次
停止计时:
if (alarm!=null) {
     alarm.cancel(refreshIntent);
     refreshIntent.cancel();
     refreshIntent = null;
  alarm = null;
}
3.Handler<刷新网络使用,简单实用>


 private Handler handler  = new Handler();
private Runnable runnable = new Runnable(){
public void run(){
update();//更新数据
handler.postDelayed(this,1000);//定时时间
}
};
开始计时:
handler.removeCallbacks(runnable);
handler.postDelayed(runnable,1000);


停止计时:
handler.removeCallbacks(runnable);


引用博客:特此感谢该博主


http://blog.csdn.net/itxiaohei323/article/details/7875953
Android开发中,如果你需要定时刷新数据,可以使用`AlarmManager`、`CountDownTimer`或者Kotlin中的`JobScheduler`来实现周期性的任务调度。以下是几种常见的方法: 1. **AlarmManager**: - 首先,你需要创建一个`BroadcastReceiver`来处理接收到的定时广播。 - 使用`AlarmManager.setInexactRepeating()`方法设置定时任务,指定时间间隔和操作(比如发送一个新的网络请求获取数据)。 ```java AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE); Intent intent = new Intent(this, MyDataRefreshReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + interval, interval, pendingIntent); ``` 2. **CountDownTimer**: - 这适用于短时间内的定期更新,例如每5秒刷新一次。 ```java CountDownTimer timer = new CountDownTimer(interval, interval) { @Override public void onTick(long millisUntilFinished) {} @Override public void onFinish() { // 发送网络请求并更新UI } }.start(); ``` 3. **JobScheduler** (API 21及以上): - 如果你想在后台管理更复杂的任务,并且关心电池寿命,JobScheduler是一个更好的选择。 ```java JobScheduler jobScheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE); JobInfo.Builder builder = new JobInfo.Builder(id, "DataRefreshJob"); builder.setPeriodic(interval); jobScheduler.schedule(builder.build()); ``` 记得处理好权限申请(如对系统服务的访问),以及在设备休眠或重启后自动恢复任务。在每个方法中都添加相应的网络请求回调,并在合适的地方更新UI。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值