Android中的定时任务实现方式有两种,一种是Java API 里提供的Timer类,一种是Android的Alarm机制,Java里面的timer (不适合长期在后台运行的定时任务, 为了能让电量长时间在不操作的时候耐用,都有自己的休眠策虐,安卓是让CPU睡眠,就可能不执行Timer ),Alarm 机制具有唤醒CPU的功能。这里的唤醒CPU不是唤醒屏幕。
AlarmManager manager = (AlarmManager)getSystemService(content.ALARM_SERVICE);
第三个参数pengdingIntent ,一般调用getService()或者getBroadcast()方法获取能执行一个服务或者广播的pendingIntent.当定时任务被执行时,服务的onstartCommand()和广播的onRecived()就可以执行。
public class LongTime 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() {
//执行具体的操作
}
}).start();
AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
int anhours = 60*60*1000;
long l = SystemClock.elapsedRealtime() + anhours;
Intent in = new Intent(this,LongTime.class);
PendingIntent service = PendingIntent.getService(this, 0, in, 0);
manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,l,service);
return super.onStartCommand(intent, flags, startId);
}
}
值得注意的是Android4.4开始系统出发时间会变得不准确,系统耗电性能优化,系统会自动检测当前有几个Alarm,然后把相近的任务集中到一起,大幅度减少CPU被唤醒。但是也可以通过setextra();
网友评论