Android App自动检测更新--时间随机

AbsAlarmChecker

public abstract class AbsAlarmChecker {
    /** 一小时 ms */
	public static final long HOUR = 3600000l;
    public static final long DEFAULT_REPEAT_INTERVAL = 1000l;

	private Context mContext;
	private PendingIntent mPendingIntent;
	private AlarmManager mAlarmManager;
    private long mRepeatInerval = DEFAULT_REPEAT_INTERVAL;

    private boolean mIsStarted = false;

	public AbsAlarmChecker(Context context) {
		// TODO Auto-generated constructor stub
		mContext = context.getApplicationContext();
		init();
	}

    public Context getContext(){
        return mContext;
    }

    /**
     * 初始化
     */
	protected void init(){
        mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
		mPendingIntent = getPendingIntent();
	}

    /**
     * 获取延迟操作命令
     * @return
     */
    protected abstract PendingIntent getPendingIntent();

    /**
     * 设置重复时间, 设置 -1 则一次性操作
     * @param repeat
     */
    public void setRepeatInterval(long repeat){
        mRepeatInerval = repeat;
    }

    /**
     * 是否已经启动
     * @return
     */
    public boolean isStarted(){
        return mIsStarted;
    }

    /**
     * 开始
     */
	public void start(){
		cancel();
		//long repeat = onStartGetRepeatInterval();
		long repeat = getRepeatInterval();
		long trigger;
        trigger = onStartGetTrigger();
        if (repeat > 0l){
            mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, trigger, repeat, mPendingIntent);
        }else {
            // 一次性的
            mAlarmManager.set(AlarmManager.RTC_WAKEUP, trigger, mPendingIntent);
        }
        mIsStarted = true;
	}

    /**
     * 重复间隔
     * @return 大于0则重复,小于0则只触发一次
     */
	protected long getRepeatInterval(){
		return 0l;
	}

    /**
     * 获取开始重置间隔
     * @return
     */
//    protected long onStartGetRepeatInterval(){
//        return mRepeatInerval;
//    }

    /**
     * 获取第一次触发的时间.<br>
     * 默认是当前时间延迟10秒
     * @return
     */
    protected long onStartGetTrigger(){
        return System.currentTimeMillis() + 10000l;
    }

    /**
     * 取消
     */
	public void cancel(){
        mIsStarted = false;
		mAlarmManager.cancel(mPendingIntent);
	}
}

AlarmUpdateChecker

public class AlarmUpdateChecker extends AbsAlarmChecker {

    /** 触发的小时 时间点 */
    final int mTriggerHour = 9;

    public static final long CHECK_INTERVAL = 12l * SettingManager.Time.HOUR;

    private Context mContext;
    private PendingIntent mPendingIntent;

    public AlarmUpdateChecker(Context context) {
        super(context);
        init();
    }

    @Override
    protected PendingIntent getPendingIntent() {
        Intent scan = new Intent(getContext(), FlushService.class);
        scan.setAction(NotifyUpdateChecker.ACTION_CHECK_UPDATE);
        return PendingIntent.getService(getContext(), 9527, scan, PendingIntent.FLAG_UPDATE_CURRENT);
    }


    private long getDelay(){

        Date now = new Date();
        Calendar trigger = Calendar.getInstance(Locale.getDefault());
        trigger.set(Calendar.HOUR_OF_DAY,getRandomHour(12,1));
        trigger.set(Calendar.MINUTE, getRandomHour(59,1));
        trigger.set(Calendar.SECOND, getRandomHour(59,1));
        trigger.set(Calendar.MILLISECOND, 0);
        if (trigger.getTime().before(now)) {
            trigger.add(Calendar.HOUR_OF_DAY, 12);
        }
        return trigger.getTimeInMillis();
    }

    /**
     * 取随机数
     * m - n之间的整数
     * @return
     */
    private int getRandomHour(int n,int m){
        int d = (int)(Math.random()*(n-m)+m);
        //Logger.d("update checker alarm :"+d);
        return  d;
    }

    @Override
    protected long onStartGetTrigger() {
        return getDelay();
    }


    @Override
    protected long getRepeatInterval() {
        return CHECK_INTERVAL;
    }
}

SettingManager

 public class SettingManager {
        
    public static interface Time {
        public static final long SECOND = 1000l;
        public static final long MINUTES = 60 * SECOND;
        public static final long HOUR = 60 * MINUTES;
        public static final long DAY = 24 * HOUR;    } 
 }
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值