java - Android间隔较短的定时刷新任务怎样做会更好?

 个信2502875605 发布于 2022-11-01 20:09

举个例子,腾讯自选股的这个列表里的数据,可以每隔几秒就刷新一次。

我目前的考虑是作为一个定时任务,任务内容就是发起网络请求去服务器拿新的数据。我自己这边的思路有以下三个:

  1. 新建TimerTimerTask,然后用timer.schedule(timerTask, 0, 5000);启动。不过,我不太清楚Timer用于Android里是否会有一些弊端。

  2. 新建一个Service,然后在Service内使用AlarmManager发起定时广播,并在对应的BroadcastReceiver里再次启动Service。 通过这样的循环来实现定时任务,

  3. 新建一个Service,通过这个Service和服务器建立持久化的连接,然后由服务器来推送消息。不过,我对Android里这个做法还不太了解,这里持久连接是WebSocket吗?大概怎样的实现过程?

请问哪一种思路会更合适?

3 个回答
  • 这种需求当然是TimeTask要好一点,用socket有点浪费资源了,毕竟你是定时的,不像推送那样我们不知道他什么时候更新。 要注意的一点是,当程序在后台工作时记得把TimeTask暂停。不然一直跑流量,用户体验不行

    2022-11-02 21:21 回答
  • 需要用AlarmService
    用普通Timer 会在待机的时候中断。
    并且类型需要设置为AlarmManager.ELAPSED_REALTIME_WAKEUP

    调用

    Intent intent = new Intent(this, MyBroadcastReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(),
         0, intent, 0);
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
        System.currentTimeMillis(), 10*1000, pendingIntent);

    另起一个类

    public class MyBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            //活儿
        }
    }
    2022-11-02 21:27 回答
  • 也可以用handlerpostDelay,在handler的handleMessage里面继续postDelay,在Service或者Activity退出的时候,记得removeCallback就行了

    2022-11-02 21:32 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有