Android定时任务

前言

我们在平常的开发中可能会遇到一些需求,比如说,每日定时提醒,定时更新数据等等,反正就是周期性任务,碰到这类需求,我们就可以叫做定时任务。以前我们可以通过使用线程Handler来实现,现在既然是在android手机里面,那就更加好办了,android给我们提供了一个AlarmManager这个玩意。它是一种系统级别的定时提示服务,并且可以运行在app的生命周期之外,还是比较强大的吧。


需求

假如说我们现在有个需求,就是每天早上7点要执行一个任务,并且每隔一段时间又会执行一次。

编码

首先肯定是需要个Receiver(广播)来执行那个任务,这里面内容比较简单,就是Toast一句话

public class AlramReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context,"定时任务开始了",Toast.LENGTH_SHORT).show();    }}

别忘了,在AndroidManifest中配置它。

接下来在我们的主界面去开启这个定时任务

public class MainActivity extends AppCompatActivity {    private Button mOpen;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mOpen= (Button) findViewById(R.id.open_btn);        mOpen.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                 AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);        Calendar calendar=Calendar.getInstance();        calendar.set(Calendar.MINUTE, 0);        calendar.set(Calendar.SECOND, 0);        calendar.set(Calendar.MILLISECOND, 0);        calendar.set(Calendar.HOUR_OF_DAY,7);        int interval=1000*60*60;//一个小时的间隔        long triggerAtTime = System.currentTimeMillis();        Intent i = new Intent(this, AlramReceiver.class);        PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);        manager.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtTime,interval, pi);            }        });    }}

接下来我将详细的解释下AlarmManager里面一些方法
1.set(int type,long startTime,PendingIntent pi);

该方法用于设置一次性闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟执行时间,第三个参数表示闹钟响应动作。

2.setRepeating(int type,long triggerAtTime,long intervalTime,PendingIntent pi);

该方法用于设置重复闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟首次执行时间,第三个参数表示闹钟两次执行的间隔时间, 第三个参数表示闹钟响应动作。

3.setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi);

该方法也用于设置重复闹钟,与第二个方法相似,不过其两个闹钟执行的间隔时间不是固定的而已。

type:闹钟类型,有五个可选值

1.ELAPSED_REALTIME:以手机开机的时间为基准2.ELAPSED_REALTIME_WAKEUP:以手机开机的时间为基准,并且可以在休眠时发出广播3.RTC:以UTC标准时间为基准4.RTC_WAKEUP:以UTC标准时间为基准,并且可以在休眠时发出广播。这种方式是最常见的形式。5.POWER_OFF_WAKEUP:关机状态下也能进行提示

long startTime:

表示闹钟第一次执行的时间,可以自己设置,也可以使用系统当前时间,以毫秒为单位。本属性与第
一个属性(type)密切相关,如果第一个参数对 应的闹钟使用的是相对时间(ELAPSED_REALTIME和ELAPSED_REALTIME_WAKEUP), 那么本属性就得使用相对时间(相对于 系统启动时间来
说),比如当前时间就表示为:SystemClock.elapsedRealtime(); 如果第一个参数对应的闹钟使用的是绝对时间 (RTC、RTC_WAKEUP、POWER_OFF_WAKEUP),那么本属性就得使用绝对时间, 比如当前时间就表示 为:System.currentTimeMillis()。

long intervalTime:
闹钟的间隔时间,也是毫秒为单位。

PendingIntent pi:
这个就是我们可以执行的动作,可以去启动一个service,发送一个广播,启动一个activity,方法一看就明白了。
最后一个小提示:
Calendar.HOUR_OF_DAY (24小时)
Calendar.HOUR (12小时)

更多相关文章

  1. Android ICS系统是支持通过互联网时间同步的
  2. android闹钟开发详解总结
  3. Android实现长时间等待界面
  4. 一个没有停止的android闹钟,一旦开始就要把歌唱完 .
  5. 关于webservice服务器接收不到Android传递过来的参数的问题
  6. android开机启动时间优化:系统初步评估
  7. [置顶] Android开发:在onTouchEvent中处理任意时间的长按事件
  8. Android 如何动态设置View参数,LayoutParams.addRules详解,TypedVa
  9. 获取Android设备常规参数信息(SN,IMEI)及定制信息

随机推荐

  1. Supporting Multiple Screens(支持Androi
  2. Android摄像头编程及注意事项
  3. android 4.0 (Ice Cream Sandwich) 已经开
  4. android content provider
  5. Android中Intent传值
  6. Android(安卓)加载大图片是出现的 OutOfM
  7. android中使用SQLite进行CRUD操作的实例
  8. Android的pagerAdapter源码,在线查看网址
  9. android 图片的浏览、缩放、拖动和自动居
  10. 设置 Toolbar(ActionBar) 上的按钮颜色