android后台执行的定时任务
2016-05-24 18:19
489 查看
在写后台执行任务之前,首先我们要知道的一点就是Alarm机制,理解了Alarm机制后,相信后面的Service的内容我们再熟悉不过了,下面我们先讲下Alarm机制如何实现!
Android中的定时任务一般有两种实现方式:
1、Timer 类 (不适合长期在后台运行,这点不讲)
2、Alarm
类(通常用这个)Alarm机制的使用方法:
1. 通过getSystemService(Context.ALARM_SERVICE)来获得一个AlarmManager的实例manager;
2. 设置定时任务的触发时间:
a. SystemClock.elapsedRealtime(): 手机开机至今的时间
b. System.currentTimeMillis(): 计算机至今的时间(1970.1.1.0时开始)
3. AlarmManager调用方法set()来设置一个定时任务(有三个参数):
第一个参数是整形参数:用于指定AlarmManager的工作类型,有四种,分别是
AlarmManager.ELAPSED_REALTIME、AlarmManager.ELAPSED_REALTIME_WAKEUP、
AlarmManager.RTC、AlarmManager.RTC_WAKEUP(一般使用
wakeup的两种,因为只有这两种才会唤醒);
第二个参数是定时任务的触发时间,返回long类型;
第三个参数是PendingIntent,它的getService(),
getBroadCast(), getActivity() 方法用于获得相应的对象;
下面是一段代码演示:
好了,讲完了Alarm机制的使用后,我们就开始来写一个后台执行的定时任务。功能是:后台每隔10秒启动一次后台。
1、创建一个LongRinningService和一个ServiceReceiver类,通过LongRinningService里的pendingIntent执行发送
一个广播给ServiceReceiver接收,在ServiceReceiver的onReceive()方法里继续调用LongRinningService类,因此这
两个循环调用。
2、LongRinningService的第一次启动在MainActivity里边启动。
3、因为LongRinningService服务是不能执行耗时操作的,所以要在服务类的onStartCommand()创建一个子线程执行
一些耗时操作。
代码如下:
Android中的定时任务一般有两种实现方式:
1、Timer 类 (不适合长期在后台运行,这点不讲)
2、Alarm
类(通常用这个)Alarm机制的使用方法:
1. 通过getSystemService(Context.ALARM_SERVICE)来获得一个AlarmManager的实例manager;
2. 设置定时任务的触发时间:
a. SystemClock.elapsedRealtime(): 手机开机至今的时间
b. System.currentTimeMillis(): 计算机至今的时间(1970.1.1.0时开始)
3. AlarmManager调用方法set()来设置一个定时任务(有三个参数):
第一个参数是整形参数:用于指定AlarmManager的工作类型,有四种,分别是
AlarmManager.ELAPSED_REALTIME、AlarmManager.ELAPSED_REALTIME_WAKEUP、
AlarmManager.RTC、AlarmManager.RTC_WAKEUP(一般使用
wakeup的两种,因为只有这两种才会唤醒);
第二个参数是定时任务的触发时间,返回long类型;
第三个参数是PendingIntent,它的getService(),
getBroadCast(), getActivity() 方法用于获得相应的对象;
下面是一段代码演示:
<span style="white-space:pre"> </span>AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); long startTime = System.currentTimeMillis() + 10*1000; Intent intent1 = new Intent(this, AlarmReceiver.class); PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent1, 0); alarmManager.set(AlarmManager.RTC_WAKEUP, startTime, pi);
好了,讲完了Alarm机制的使用后,我们就开始来写一个后台执行的定时任务。功能是:后台每隔10秒启动一次后台。
1、创建一个LongRinningService和一个ServiceReceiver类,通过LongRinningService里的pendingIntent执行发送
一个广播给ServiceReceiver接收,在ServiceReceiver的onReceive()方法里继续调用LongRinningService类,因此这
两个循环调用。
2、LongRinningService的第一次启动在MainActivity里边启动。
3、因为LongRinningService服务是不能执行耗时操作的,所以要在服务类的onStartCommand()创建一个子线程执行
一些耗时操作。
代码如下:
// LongRunningService.java package com.df.zhou.test_longrunningservice; 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.support.annotation.Nullable; import android.util.Log; /** * Created by Administrator on 2016/5/24. */ public class LongRunningService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { new Thread(new Runnable() { @Override public void run() { Log.i("ffffff", "wake up!"); } }).start(); AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); long startTime = System.currentTimeMillis() + 10*1000; Intent intent1 = new Intent(this, AlarmReceiver.class); PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent1, 0); alarmManager.set(AlarmManager.RTC_WAKEUP, startTime, pi); return super.onStartCommand(intent, flags, startId); } } // ServiceReceiver.java package com.df.zhou.test_longrunningservice; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = new Intent(this, LongRunningService.class); startService(intent); } }注意:最后记得要在Manifest.xml对Service和BroadCastReceiver进行注册!!!
相关文章推荐
- 初识MVP以及简单应用
- Android中JNI创建实例
- Android基于cordova3.3的插件开发
- android studio获取SHA1
- Android Handler
- android 自定义控件实现3D画廊效果
- Android支付——改进的支付宝支付
- Android的jni下LOG打印输出
- Android 用MediaCodec实现视频硬解码
- android studio .9 图片问题 Crunching Cruncher
- Android回调机制浅析
- Android 获取系统音量
- 仿格瓦拉@电影Android个人中心背景循环动图
- Android通用流行框架大全
- Android Shape的使用
- android studio导入PullToRefresh
- android实现气泡聊天
- android—sdk遇到的问题- Support Libraries删除后找不到
- Android拍照适配方案
- Android之事件分发机制