Android-定時(shí)器

一、AlarmManager介紹

AlarmManager提供了對(duì)系統(tǒng)定時(shí)服務(wù)的訪問接口,使得開發(fā)者可以安排在未來的某個(gè)時(shí)間運(yùn)行應(yīng)用。當(dāng)?shù)竭_(dá)鬧鈴設(shè)定時(shí)間,系統(tǒng)就會(huì)廣播鬧鈴之前注冊(cè)的Intent。如果此時(shí)目標(biāo)應(yīng)用沒有被啟動(dòng),系統(tǒng)還會(huì)幫你自動(dòng)啟動(dòng)目標(biāo)應(yīng)用。即使設(shè)備已經(jīng)進(jìn)入睡眠已注冊(cè)的鬧鈴也會(huì)被保持,只有當(dāng)設(shè)備關(guān)閉或是重啟的時(shí)候會(huì)被清除。

二、AlarmManager用法


    /**
     * 每天早上8:30開啟提醒
     */
    public void startRemind(){

        //得到日歷實(shí)例,主要是為了下面的獲取時(shí)間
        mCalendar = Calendar.getInstance();
        mCalendar.setTimeInMillis(System.currentTimeMillis());

        //獲取當(dāng)前毫秒值
        long systemTime = System.currentTimeMillis();

        //是設(shè)置日歷的時(shí)間,主要是讓日歷的年月日和當(dāng)前同步
        mCalendar.setTimeInMillis(System.currentTimeMillis());
        // 這里時(shí)區(qū)需要設(shè)置一下,不然可能個(gè)別手機(jī)會(huì)有8個(gè)小時(shí)的時(shí)間差
        mCalendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        //設(shè)置在幾點(diǎn)提醒  設(shè)置的為8點(diǎn)
        mCalendar.set(Calendar.HOUR_OF_DAY, 8);
        //設(shè)置在幾分提醒  設(shè)置的為30分
        mCalendar.set(Calendar.MINUTE, 30);
        //下面這兩個(gè)看字面意思也知道
        mCalendar.set(Calendar.SECOND, 0);
        mCalendar.set(Calendar.MILLISECOND, 0);

        //上面設(shè)置的就是8點(diǎn)30分的時(shí)間點(diǎn)

        //獲取上面設(shè)置的13點(diǎn)25分的毫秒值
        long selectTime = mCalendar.getTimeInMillis();

        // 如果當(dāng)前時(shí)間大于設(shè)置的時(shí)間,那么就從第二天的設(shè)定時(shí)間開始
        if(systemTime > selectTime) {
            mCalendar.add(Calendar.DAY_OF_MONTH, 1);
        }

        //AlarmReceiver.class為廣播接受者
        Intent intent = new Intent(getActivity(), AlarmReceiver.class);
        PendingIntent pi = PendingIntent.getBroadcast(getActivity(), 0, intent, 0);
        //得到AlarmManager實(shí)例
        AlarmManager am = (AlarmManager)getContext().getSystemService(ALARM_SERVICE);

        //**********注意??!下面的兩個(gè)根據(jù)實(shí)際需求任選其一即可*********

        /**
         * 單次提醒
         * mCalendar.getTimeInMillis() 上面設(shè)置的13點(diǎn)25分的時(shí)間點(diǎn)毫秒值
         */
        am.set(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), pi);

//        /**
//         * 重復(fù)提醒
//         * 第一個(gè)參數(shù)是警報(bào)類型;下面有介紹
//         * 第二個(gè)參數(shù)網(wǎng)上說法不一,很多都是說的是延遲多少毫秒執(zhí)行這個(gè)鬧鐘,但是我用的刷了MIUI的三星手機(jī)的實(shí)際效果是與單次提醒的參數(shù)一樣,即設(shè)置的13點(diǎn)25分的時(shí)間點(diǎn)毫秒值
//         * 第三個(gè)參數(shù)是重復(fù)周期,也就是下次提醒的間隔 毫秒值 我這里是一天后提醒
//         */
//        am.setRepeating(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), (1000 * 60 * 60 * 24), pi);

    }

三、定時(shí)器--定時(shí)做某事

通過Timer.schedule來調(diào)度TimerTask里面聲明的任務(wù)

public void updateKnowledge() {
        Timer timer=new Timer;
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                Message message = new Message();
                message.what = UPDATE_DRINK_KNOWLEDGE;
                handler.sendMessage(message);
            }//每隔10秒使用handler發(fā)送一下消息,也就是每隔10秒執(zhí)行一次,一直重復(fù)執(zhí)行
        }, 0, TimeConstant.ONE_SEC * 10);

    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容