首页 > 其他分享 >Android的使用AlarmManager简单实现定时任务

Android的使用AlarmManager简单实现定时任务

时间:2025-01-15 16:23:08浏览次数:1  
标签:调用 15 public AlarmManager Intent 闹钟 Android 定时

使用AlarmManager简单实现定时每天或重复执行任务,有3种方式

1)AlarmManager+Service 实现方式

2)AlarmManager+InterService 实现方式

3)AlarmManger + BoardcastReceiver 实现方式

需要在AndroidMainifast.xml 增加权限

1)增加ALARM(闹钟)权限

    <uses-permission android:name="android.permission.SET_ALARM"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2)增加Service和BoardcastReceiver注册

  <service android:name=".service.AlarmService" />
  <service android:name=".service.AlarmIntentService"/>
  <receiver android:name=".broadcast.AlarmBroadcastReceiver" />

3)Service和BoardcastReceiver定义

 3.1)AlarmService

public class AlarmService extends Service {

    private final String TAG = "AlarmService";
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // 在这里执行你的任务
        Log.e(TAG,"调用闹钟,调用时间:"+ DateHelper.timestampToDate(System.currentTimeMillis()) );
        // 任务执行完毕后,停止Service
        stopSelf();
        return START_NOT_STICKY;
    }

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

3.2)AlarmIntentService

public class AlarmIntentService extends IntentService
{
    private final String TAG = "AlarmIntentService";

    public AlarmIntentService()
    {
        super("AlarmIntentService");
    }

    @Override
    protected void onHandleIntent(Intent intent)
    {
        Log.e(TAG,"调用闹钟,调用时间:"+ DateHelper.timestampToDate(System.currentTimeMillis()) );
    }
}

3.3)AlarmBoardcastReceiver

public class AlarmBroadcastReceiver extends BroadcastReceiver
{
    private final String TAG = "AlarmBroadcastReceiver";
    public static String alarmboradcastAction = "alarm.broadcast.upload";
    @Override
    public void onReceive(Context context, Intent intent)
    {
        if(intent.getAction().equals(alarmboradcastAction))
        {
            Log.e(TAG,"调用闹钟,调用时间:"+ DateHelper.timestampToDate(System.currentTimeMillis()));
        }

    }
}

4)AlarmManager结合Service、IntentService、boardcastReceiver使用

4.1)AlarmManager+Service 使用

  /**
     * AlarmManager + Service 实现定时任务
     * */
    public void AlarmServiceTest(){
        // 设置定时任务的代码片段
        Intent alarmIntent = new Intent(this, AlarmService.class);
        PendingIntent pendingIntent = PendingIntent.getService(this, 0, alarmIntent, 0);
        AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
        // 设置单次闹钟或重复闹钟
        // 设置为单次闹钟
        long triggerAtMillis = System.currentTimeMillis() + 1000; // 10秒后触发
        alarmManager.set(AlarmManager.RTC_WAKEUP, triggerAtMillis, pendingIntent);

        // 或者设置重复闹钟(最小时间间隔:1 min)
        //long intervalMillis = 1000 * 60*1; // 每隔60秒触发一次
        //alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), intervalMillis, pendingIntent);
    }

4.2)AlarmManager+IntentService 使用

 /**
     * AlarmManager + IntentService 实现定时任务
     * */
    public void AlarmInterServiceTest(){
        // 设置定时任务的代码片段
        Intent alarmIntent = new Intent(this, AlarmIntentService.class);
        PendingIntent pendingIntent = PendingIntent.getService(this, 0, alarmIntent, 0);
        AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
        // 设置单次闹钟或重复闹钟
        // 设置为单次闹钟
        //long triggerAtMillis = System.currentTimeMillis() + 1000; // 10秒后触发
        //alarmManager.set(AlarmManager.RTC_WAKEUP, triggerAtMillis, pendingIntent);

        // 或者设置重复闹钟(最小时间间隔:1 min)
        long intervalMillis = 1000 * 60*1; // 每隔60秒触发一次
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), intervalMillis, pendingIntent);

    }

4.3)AlarmManager+BroadcastReceiver 使用

  /**
     * AlarmManager+BroadcastReceiver 方式实现定时任务
     * */
    public void AlarmBroadcastTest(){
        // 设置定时任务的代码片段
        Intent alarmIntent = new Intent(this, AlarmBroadcastReceiver.class);
        alarmIntent.setAction(AlarmBroadcastReceiver.alarmboradcastAction);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
        AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
        // 设置单次闹钟或重复闹钟
        // 设置为单次闹钟
        //long triggerAtMillis = System.currentTimeMillis() + 1000; // 10秒后触发
        //alarmManager.set(AlarmManager.RTC_WAKEUP, triggerAtMillis, pendingIntent);
        // 或者设置重复闹钟
        long intervalMillis = 1000 * 60*1; // 每隔60秒触发一次1000 * 60
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), intervalMillis, pendingIntent);
    }

5)AlarmManager定时的调用

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        AlarmBroadcastTest();
        AlarmServiceTest();
        AlarmInterServiceTest();
    }

6)执行调用效果

E/AlarmBroadcastReceiver: 调用闹钟,调用时间:2025-01-15 15:48:37
E/AlarmService: 调用闹钟,调用时间:2025-01-15 15:48:37
E/AlarmIntentService: 调用闹钟,调用时间:2025-01-15 15:48:37
E/AlarmBroadcastReceiver: 调用闹钟,调用时间:2025-01-15 15:49:32
E/AlarmIntentService: 调用闹钟,调用时间:2025-01-15 15:49:32
E/AlarmBroadcastReceiver: 调用闹钟,调用时间:2025-01-15 15:50:32

参考网站:https://blog.51cto.com/u_16099281/12593446

标签:调用,15,public,AlarmManager,Intent,闹钟,Android,定时
From: https://www.cnblogs.com/xielong/p/18673279

相关文章

  • ch32L103_EVT_定时器TIM1
    参考博文:https://www.cnblogs.com/liaigu/p/17782198.html在CH32L103EVT开发板的范例TIM_INT中,TIM1_INT_Init函数需要适当修改。1主频96MHz,计数时钟预分频器(TIM1_PSC)为16位,取值0~65535,对应TIM_Prescaler。2TIM_RepetitionCounter对应重复计数值寄存器(TIM1_RPTCR)示例中初......
  • Android 性能优化
    查看日志main:lowmemorykiller:lowmemorykiller:Kill'com.transsion.aichargeprovider'anrin:anr的时间CPU信息:total:查看应用安装:DexInv|dex2oat32:dex2oattook看温度:previous/currentevent:displayed//查看启动时间display0//查看启动屏幕参数低内存查杀......
  • 基于安卓Android 日程日历系统app(源码+LW+部署讲解+数据库+ppt)
    !!!!!!!!!选题不知道怎么选不清楚自己适合做哪块内容都可以免费来问我避免后期給自己答辩找麻烦增加难度(部分学校只有一次答辩机会没弄好就延迟毕业了)会持续一直更新下去有问必答一键收藏关注不迷路源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwd=jf1d提取码:......
  • Java定时任务大盘点:发工资也能“指日可待”
    作者:京东保险孙昊宇引子:“指日可待”让我们先从一个成语开始,“指日可待”。没错,我说的就是定时任务......
  • 基于Android 背单词app系统(源码+LW+部署讲解+数据库+ppt)
    !!!!!!!!!选题不知道怎么选不清楚自己适合做哪块内容都可以免费来问我避免后期給自己答辩找麻烦增加难度(部分学校只有一次答辩机会没弄好就延迟毕业了)会持续一直更新下去有问必答一键收藏关注不迷路源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwd=jf1d提取码:......
  • 基于安卓Android 答题app系统(源码+LW+部署讲解+数据库+ppt)
    !!!!!!!!!选题不知道怎么选不清楚自己适合做哪块内容都可以免费来问我避免后期給自己答辩找麻烦增加难度(部分学校只有一次答辩机会没弄好就延迟毕业了)会持续一直更新下去有问必答一键收藏关注不迷路源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwd=jf1d提取码:......
  • 基于DVB-T的COFDM+16QAM+LDPC图传通信系统matlab仿真,包括载波同步,定时同步,信道估计
    1.算法仿真效果matlab2022a仿真结果如下(完整代码运行后无水印):   图传测试:  仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要       基于DVB-T的COFDM+16QAM+LDPC码通信链路是一种常用的数字视频广播系统,用于实现高效的传输和接收。该......
  • Android 10.0 监听某个app启动或者退出功能实现
    1.前言在进行10.0的系统定制开发中,在某些app的定制过程中,需要知道某个app的启动记录和退出记录,所以就需要监听某个app的启动和退出的过程,需要在Activity的生命周期中来实现监听功能2.监听某个app启动或者退出功能实现的核心类frameworks\base\core\java\android\app\Activi......
  • PowerJob——新一代的定时任务框架!
    最近项目中使用了PowerJob做任务调度模块,感觉这个框架真香,今天我们就来深入了解一下新一代的定时任务框架——PowerJob!简介PowerJob是基于java开发的企业级的分布式任务调度平台,与xxl-job一样,基于web页面实现任务调度配置与记录,使用简单,上手快速,其主要功能特性如下:使用简单......
  • Android使用MediaCodec解码视频
    importandroid.media.MediaCodecimportandroid.media.MediaExtractorimportandroid.media.MediaFormatimportandroid.util.Logimportjava.io.IOExceptionimportjava.nio.ByteBufferclassVideoDecoder{companionobject{privateconstvalTA......