关于Android中的PollingService定时轮询任务的讲解

1.创建PollingThread类,在log打印出“New message!”


class PollingThread extends Thread {
        @Override
        public void run() {
            Log.i("zzf", "Polling...");
        }
    }

2.创建PollingReceiver,用于接收Service传递信息并重新执行PollingService


public class PollingReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Log.i("zzf", "Receive!");
        Intent i = new Intent(context, PollingService.class);
        context.startService(i);
    }

}

3.创建PollingService定时轮询任务对象


public class PollingService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub
        //创建PollingThread子线程,用于执行任务
        new PollingThread().start();
        // 获取AlarmManager系统服务
        AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        // 包装需要执行Service的Intent
        Intent i = new Intent(this, PollingReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, i, 0);
        int anSeconds = 5 * 1000; // 5秒
        //  触发时间
        long triggerAtTime = SystemClock.elapsedRealtime() + anSeconds;
        manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pendingIntent);
        return super.onStartCommand(i, flags, startId);
    }        

4.在MainActivity中启动PollingService


     Log.i("zzf","Start polling service...");
        Intent intent = new Intent(this, PollingService.class);
        startService(intent);
时间: 2024-08-09 02:20:53

关于Android中的PollingService定时轮询任务的讲解的相关文章

Android学习系列(7)--App轮询服务器消息

这篇文章是android开发人员的必备知识. 1.轮询服务器     一般的应用,定时通知消息可以采用轮询的方法从服务器拿取消息,当然实时消息通知的话,建议采用推送服务.    其中需要注意轮询的频率设置,要在需求和性能中平衡. 2.独立进程     无论程序是否正在运行,我们都要能通知到客户,我们需要一个独立进程的后台服务.     我们需要一个独立进程的后台服务.     在AndroidManifest.xml中注册Service时,有一个android:process属性,如果这个属性以

通过Linux定时任务实现定时轮询数据库及发送Http请求

通过Linux定时任务实现定时轮询数据库及发送Http请求 概述 有时需要临时增加一个定时任务(需要根据数据库查询结果然后发送HTTP请求),如果在项目中额外增加(Java+Spring+Quartz),则需要编写很多代码,而且还需要重新编译发布,比较麻烦,特别是在紧急情况下的时候.采用Linux脚本,再加上JSP(根据业务需要),可以比较快的解决问题. 环境准备 安装MySQL Client 安装curl 脚本内容 #!/bin/bash # # @file test_task.sh # @b

Android AlarmManager实现不间断轮询服务

在消息的获取上是选择 轮询还是推送得根据实际的业务需要来技术选型,例如对消息实时性比较高的需求,比如微博新通知或新闻等那就最好是用推送了.但如果只是一般的消息检测比如 更新检查,可能是半个小时或一个小时一次,那用轮询也是一个不错的选择,因为不需要额外搭建推送服务器,不用额外配置推送服务.另外推送现在一般以维持长 连接的方式实现,在手机客户端也会耗费一定的电量.今天就介绍一个在Android上实现轮询机制的方法——使用AlarmManager AlarmManager 在Android中主要用来定

linux 日志定时轮询流程详解(logrotate)

logrotate介绍 对于Linux系统安全来说,日志文件是极其重要的工具.日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到.当日志文件不断增长的时候,就需要定时切割,否则,写日志的速度和性能也会下降,更不便于我们归档,查询. 所以便有了使用logrotate的时候 ,logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循).压缩以及删除旧的日志文件.例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除

gevent中如何实现长轮询

浏览网页时,浏览器会传HTTP 请求到服务器,服务器会根据请求将网页的内容传给浏览器,但是在很多的情况下,使用者会需要看到最新的即时性资讯,例如观看股票市场行情,而在以前只能靠着重新载入网页才能获得最新信息,但是这样不但很浪费时间,也会佔用很多不必要的网络资源,并不是一个好的方式,长轮询就是解决这个问题的一个办法. 什么是长轮询? 1.长时间轮询(long-polling)是让服务器在接收到浏览器发出的HTTP 请求后,服务器会等待一段时间,若在这段时间里面伺服器有新的数据更新,它就会把最新的数

java的定时轮询

ScheduledExecutorService service = Executors.newScheduledThreadPool(10);service.scheduleAtFixedRate(() -> { LocalDateTime start = LocalDateTime.now().withNano(0).minusSeconds(1); LocalDateTime end = LocalDateTime.now().withNano(0); List<String> s

Apollo 3 定时/长轮询拉取配置的设计

前言 如上图所示,Apollo portal 更新配置后,进行轮询的客户端获取更新通知,然后再调用接口获取最新配置.不仅仅只有轮询,还有定时更新(默认 5 分钟一次).目的就是让客户端能够稳定的获取到最新的配置. 一起来看看他的设计. 核心代码 具体的类是 RemoteConfigRepository,每一个 Config -- 也就是 namespace 都有一个 RemoteConfigRepository 对象,表示这个 Config 的远程配置仓库,可以利用这个仓库请求远程服务,得到配置

深入解析Android中Handler消息机制

Android提供了Handler 和 Looper 来满足线程间的通信.Handler先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(MessageExchange).Handler消息机制可以说是Android系统中最重要部分之一,所以,本篇博客我们就来深入解析Android中Handler消息机制. Handler的简单使用 为什么系统不允许子线程更新UI 因为的UI控件不是线程安全的. 如果在多线程中并发访问可能会导致UI控件处于不可预期的状态,那为什么不对UI控件的访

长轮询实现消息推送

一.应用场景 浏览器与服务器之间保持一个长连接(http链接),服务器有最新的数据生成时及时推送到前端展现.典型场景:新邮件到达通知. 二.业界常用的解决方案 定时轮询,长轮询,websocket(HTML5新增的能力) 其中长轮询兼容性较好,应用的较为广泛,但是切忌在移动网络中应用该技术. 三.长连接前端代码 /** *pns模型层 *@constructs M2012.Model.Pns.PnsModel *@extends Backbone.Model *@example *new M20