使用AlarmManager进行定时任务处理

1:UploadingService.java

package com.example.service;

import com.example.broadcast.AlarmReceiver;
import com.example.utils.DateUtil;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.os.SystemClock;

public class UploadingService extends Service{

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

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        //to-do
        System.out.println("===========:"+DateUtil.getDateByFormat("yyyy-MM-dd HH:mm:ss"));

        AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
        int seconds = 1000*3;
        long triggerAtTime = SystemClock.elapsedRealtime()+seconds;
        Intent i = new Intent(this, AlarmReceiver.class);
        PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
        am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pi);

        return super.onStartCommand(intent, flags, startId);
    }

    public static void openService(Context context){
        Intent intent = new Intent(context, UploadingService.class);
        ((Activity)context).startService(intent);
    }
}

2:AlarmReceiver.java

package com.example.broadcast;

import com.example.service.UploadingService;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class AlarmReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent i = new Intent(context, UploadingService.class);
        context.startService(i);
    }
}

3:MainActivity.java

UploadingService.openService(MainActivity.this);

4:AndroidManifest.xml

<service
            android:name="com.example.service.UploadingService"/>
        <receiver
            android:name="com.example.broadcast.AlarmReceiver"/>
时间: 2024-10-12 18:57:13

使用AlarmManager进行定时任务处理的相关文章

Java应用集群下的定时任务处理方案(mysql)

今天来说一个Java多机部署下定时任务的处理方案. 需求: 有两台服务器同时部署了同一套代码, 代码中写有spring自带的定时任务,但是每次执行定时任务时只需要一台机器去执行. 当拿到这个需求时我脑子中立马出现了两个简单的解决方案: 利用ip进行判断, 两台机器ip肯定不一样, 指定某一台机器的ip运行. 只在一台机器上部署定时任务的代码. 最后两个方案又都被自己否决了. 第一条,如果指定ip的机器出现了问题怎么办? 例如说宕机了, 那么该制定ip的机器上的定时任务是不是就无法运行了?如果以后

使用NODEJS+REDIS开发一个消息队列以及定时任务处理

作者:RobanLee 原创文章,转载请注明: 萝卜李 http://www.robanlee.com 源码在这里: https://github.com/robanlee123/RobCron 时间有限,就不详细注释,有问题或者意见欢迎@我,也欢迎大家批评指正. 本文所必须的一些资料如下: 1. NODEJS ==> 可以去NODEJS.ORG下载最新的源码.2. Redis ==> Redis.io3. KUE ==> Nodejs的一个开源队列系统4. NODE-SCHEDULE

我的Android进阶之旅------&gt;Android使用AlarmManager全局定时器实现定时更换壁纸

该DEMO将会通过AlarmManager来周期的调用ChangeService,从而让系统实现定时更换壁纸的功能. 更换壁纸的API为android.app.WallpaperManager,它提供了clear()方法来清除壁纸,还提供了如下方法来设置壁纸. setResource(int resid)将壁纸设置为resid资源所代表的图片 setBitmap(Bitmap bitmap)将壁纸设置为bitmap所代表的位图 setStream(InputStream data)将壁纸设置为d

Timer与AlarmManager的区别

线程 通过调用Thread类的 start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,但此时并没有运行,它需要CPU时间片.一旦得到CPU时间片,就会执行run()方法.run()的方法体称为线程体,它包含了要执行的这个线程的内容,run()方法运行结束,此线程也随即终止. 线程状态转换 一.新建(new):新创建了一个线程对象. 二.可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法.该状态的线程位于可运行线程池中,等待被线程

AlarmManager实现精准定时任务

在项目中,有这么一个功能点,app进程中,需要实现一个定时任务,只要设备处于开机状态,每隔半个小时,就需要定时向服务器上传一次位置信息,并且只要是有网络和获取到GPS信号,进程不能死,如果进程死掉了,需要自动重启.对该点进行细分梳理,包含如下几个小功能点: 1.进程能够实现开机启动. 2.进程需要一直存活,并且能够自动重启. 3.需要定时(30分钟)一次,向server端上报信息. 针对以上三个功能点,第1和2点,实现起来,都不难,唯独第三点,在实现时,一般情况,会考虑到多种方式实现.由于没有自

Timer与AlarmManager的差别

线程 通过调用Thread类的 start()方法来启动一个线程,这时此线程处于就绪(可执行)状态.但此时并没有执行,它须要CPU时间片. 一旦得到CPU时间片.就会执行run()方法. run()的方法体称为线程体,它包括了要执行的这个线程的内容,run()方法执行结束.此线程也随即终止. 线程状态转换 一.新建(new):新创建了一个线程对象. 二.可执行(runnable):线程对象创建后,其它线程(比方main线程)调用了该对象的start()方法. 该状态的线程位于可执行线程池中,等待

AlarmManager手机闹钟简介

1.void set(int type , long triggerAtTime , PendingIntent operation ) : 设置在 triggerAtTime时间启动由operation参数指定的组件, 其中第一个参数指定定时服务的类型,该参数可接受如下值: ELAPSED_REALTIME:指定从现在开始时间过了一定时间后启动operation所对应的组件. ELAPSED_REALTIME_WAKEUP:指定从现在开始时间过了一定时间后启动operation所对应的组件,即

android 中定时器Timer 和AlarmManager 的区别

Android 上定时运行任务常用的方法有2种,一种方法用 Timer,另一种是AlarmManager. Timer Android 的 Timer 类可以用来计划需要循环执行的任务,Timer 的问题是它需要用 WakeLock 让 CPU 保持唤醒状态,这样会大量消耗手机电量,大大减短手机待机时间.这种方式不能满足我们的需求. AlarmManager AlarmManager 是 Android 系统封装的用于管理 RTC 的模块,RTC (Real Time Clock) 是一个独立的

定时组件的实现

日历定时组件的使用: 1.在web.xml添加监听 <listener> <listener-class>richinfo.calendar.util.TasksSystemListener</listener-class> </listener> 2.增加task.xml 1 <?xml version="1.0" encoding="UTF-8"?> 2 <tasks> 3 <task