Android之创建定时任务

来源:互联网 发布:潘多拉优化中心 编辑:程序博客网 时间:2024/06/05 14:23

核心代码及思想

   setContentView(R.layout.activity_main);        //设置一个任务十分钟以后执行        AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);        long triggerAtTime = SystemClock.elapsedRealtime() + 10*1000;        //第一个参数整型参数,用于指定AlarmManager的工作类型        /**         * 有四种值可以选         * ELAPSED_REALTIME  让定时任务的触发时间从系统开机算起,但不会唤醒CPU         * ELAPSED_REALTIME_WAKEUP  让定时任务的触发时间从系统开机算起,会唤醒CPU         * RTC 定时任务的触发时间是从1970年1月1日算起,但不会唤醒CPU         * RTC_WAKEUP  定时任务的触发时间是从1970年1月1日算起,会唤醒CPU         * 使用SystemClock.elapsedRealtime()方法可以获取系统开机至今所经历的时间的毫秒数         * 使用System.currnetTimeMillis()方法可以获取到1970年1月1日0点至今天所经历的毫秒数         */        //第二个参数 就是定时任务触发的时间,以毫秒为单位        //第三个参数 我们一般会调用getService()方法或者getBroadcast()方法获取一个能够执行服务        // 或者广播的Pending-Intent. 这样当定时任务被触发的时候,服务的onStartCommand()方法        // 或者广播的onReceive()方法就可以执行        manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,triggerAtTime, pendingIntent);

MainActivity.java

package com.sdutacm.alarm;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;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);        startActivity(intent);    }}

LongRunningService.java

package com.sdutacm.alarm;import android.app.AlarmManager;import android.app.PendingIntent;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.os.SystemClock;import android.support.annotation.Nullable;/** * Created by bummer on 2017/8/10. */public class LongRunningService extends Service {    @Nullable    @Override    public IBinder onBind(Intent intent) {        return null;    }    @Override    public int onStartCommand(final Intent intent, int flags, int startId) {        new Thread(new Runnable() {            @Override            public void run() {            }        }).start();        AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);        int anHour = 60*60*1000; //这是一小时的毫秒数        long triggerAtTime = SystemClock.elapsedRealtime() + anHour;        Intent i = new Intent(this,LongRunningService.class);        PendingIntent pi = PendingIntent.getService(this,0,i,0);        manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,triggerAtTime,pi);        return super.onStartCommand(intent, flags, startId);    }}
原创粉丝点击