创建定时任务

2017-06-13  本文已影响59人  gogoingmonkey

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();
上一篇 下一篇

猜你喜欢

热点阅读