zoukankan      html  css  js  c++  java
  • Api demo源码学习(16)App/Activity/Alarm Alarm Controller&&Alarm Service

    本节的两个小应用Alarm Controller 和Alarm Service都是定时启动服务的功能。代码比较容易理解,就不一一粘贴了。分点讲一下涉及到的知识点。

    1.Pendingintent类是对intent的一个包装,可以用来延时处理intent要做的操作。主要和Android特定的的远程服务打交道(短信、通知、闹铃等),通常的应用无需使用。Pendingintent不是直接new出来的,而是通过Pendingintent.getBroadcast() ,PendingIntent.getActivity()以及PendingIntent.getService()的方式获取实例。

    2.Alarm Controller采用的是定时启动广播的方式,按照代码中的注释,这类方式比较适合延时时间较短的一些操作。比如弹出Notification等。代码片段如下:
     1             Intent intent = new Intent(AlarmController.this, OneShotAlarm.class);
    2 PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this, 0, intent, 0);
    3 PendingIntent.getService(context, requestCode, intent, flags)
    4 // We want the alarm to go off 30 seconds from now.
    5 Calendar calendar = Calendar.getInstance();
    6 calendar.setTimeInMillis(System.currentTimeMillis());
    7 calendar.add(Calendar.SECOND, 30);
    8
    9 // Schedule the alarm!
    10 AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
    11 am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
    Alarm Service 采用的是启动服务的方式,比较适合于延长时间较长的一类操作。比如定时启动下载服务进行更新等。代码片段如下:
    1 // We want the alarm to go off 30 seconds from now.
    2 long firstTime = SystemClock.elapsedRealtime();
    3
    4 // Schedule the alarm!
    5 AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
    6 am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 30*1000, mAlarmSender);

    3.注销定时操作,调用的函数是:
    1 AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
    2 am.cancel(sender);//sender即之前得到的PendingIntent
    4.Google的代码习惯值得学习,比如在弹出Toast提示时,用到了如下代码段,值得学习:
    1// Tell the user about what we did.       
    2 if (mToast != null) {
    3 mToast.cancel();
    4 }
    5 mToast = Toast.makeText(AlarmController.this, R.string.repeating_scheduled,Toast.LENGTH_LONG);
    6 mToast.show();

    最后,需要在AndroidManifest.xml中注册BroadcastResolver 和Service。








  • 相关阅读:
    阿里P8架构师谈:阿里双11秒杀系统如何设计?
    秒杀系统设计的知识点
    秒杀系统架构优化思路
    秒杀系统解决方案
    Entity Framework Code First (七)空间数据类型 Spatial Data Types
    Entity Framework Code First (六)存储过程
    Entity Framework Code First (五)Fluent API
    Entity Framework Code First (四)Fluent API
    Entity Framework Code First (三)Data Annotations
    Entity Framework Code First (二)Custom Conventions
  • 原文地址:https://www.cnblogs.com/xutao1988/p/2350302.html
Copyright © 2011-2022 走看看