Android后台执行的定时任务

1、在Activity启动服务

public class ServiceActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        Intent intent=new Intent(this,LongRunningService.class);
        startService(intent);
    }
}

2、在Service的onStartCommand()方法创建子线程用于执行具体的逻辑业务,使用AlarmService定时唤醒CPU
然后使用PendingIntent来发广播,广播接受者启动Service

public class LongRunningService extends Service{

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        new Thread(new Runnable() {

            @Override
            public void run() {
                //在子线程里可以执行具体的逻辑操作,简单起见,只是打印一下当前时间
            Log.e("LongRunningSerivce","executed at"+new Date().toString());
            }
        }).start();
        //通过getSystemService()获取AlarmManager的实例
        AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
        //
        int anHour=60*60*1000;//一小时的毫秒数
        //开机至今的时间加上延迟执行时间
        long triggerAtTime=SystemClock.elapsedRealtime()+anHour;
        Intent i=new Intent(this,AlarmReceiver.class);
        //调用getBroadcast()方法来获取一个能执行广播的PendingIntent
        PendingIntent pi=PendingIntent.getBroadcast(this,0,i,0);
        /*set()方法   第一个参数指定AlarmManager的工作类型
        ELAPSED_REALTIME_WAKEUP表示让定时任务的触发时间从系统开机开始算起,会唤醒CPU
        第二个参数  定时任务触发的时间      开机至今的时间加上延迟执行时间
        第三个参数  调用getBroadcast()方法来获取一个能执行广播的PendingIntent

        */
        manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pi);

        return super.onStartCommand(intent, flags, startId);
    }

}
public class AlarmReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent i=new Intent(context,LongRunningService.class);
        context.startService(intent);       
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值