Android定時任務

來源:互聯網
上載者:User

標籤:執行時間   int   mil   實現   power   ota   instance   rri   任務   

前言

我們在平常的開發中可能會遇到一些需求,比如說,每日定時提醒,定時更新資料等等,反正就是週期性任務,碰到這類需求,我們就可以叫做定時任務。以前我們可以通過使用線程Handler來實現,現在既然是在android手機裡面,那就更加好辦了,android給我們提供了一個AlarmManager這個玩意。它是一種系統層級的定時提示服務,並且可以運行在app的生命週期之外,還是比較強大的吧。

需求

假如說我們現在有個需求,就是每天早上7點要執行一個任務,並且每隔一段時間又會執行一次。

編碼

首先肯定是需要個Receiver(廣播)來執行那個任務,這裡面內容比較簡單,就是Toast一句話

public class AlramReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context,"定時任務開始了",Toast.LENGTH_SHORT).show();    }}

別忘了,在AndroidManifest中配置它。

接下來在我們的主介面去開啟這個定時任務

public class MainActivity extends AppCompatActivity {    private Button mOpen;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mOpen= (Button) findViewById(R.id.open_btn);        mOpen.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                 AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);        Calendar calendar=Calendar.getInstance();        calendar.set(Calendar.MINUTE, 0);        calendar.set(Calendar.SECOND, 0);        calendar.set(Calendar.MILLISECOND, 0);        calendar.set(Calendar.HOUR_OF_DAY,7);        int interval=1000*60*60;//一個小時的間隔        long triggerAtTime = System.currentTimeMillis();        Intent i = new Intent(this, AlramReceiver.class);        PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);        manager.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtTime,interval, pi);            }        });    }}

接下來我將詳細的解釋下AlarmManager裡面一些方法
1.set(int type,long startTime,PendingIntent pi);

該方法用於設定一次性鬧鐘,第一個參數表示鬧鐘類型,第二個參數表示鬧鐘執行時間,第三個參數表示鬧鐘響應動作。

2.setRepeating(int type,long triggerAtTime,long intervalTime,PendingIntent pi);

該方法用於設定重複鬧鐘,第一個參數表示鬧鐘類型,第二個參數表示鬧鐘首次執行時間,第三個參數表示鬧鐘兩次執行的間隔時間, 第三個參數表示鬧鐘響應動作。

3.setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi);

該方法也用於設定重複鬧鐘,與第二個方法相似,不過其兩個鬧鐘執行的間隔時間不是固定的而已。

type:鬧鐘類型,有五個可選值

1.ELAPSED_REALTIME:以手機開機的時間為基準2.ELAPSED_REALTIME_WAKEUP:以手機開機的時間為基準,並且可以在休眠時發出廣播3.RTC:以UTC標準時間為基準4.RTC_WAKEUP:以UTC標準時間為基準,並且可以在休眠時發出廣播。這種方式是最常見的形式。5.POWER_OFF_WAKEUP:關機狀態下也能進行提示

long startTime:

表示鬧鐘第一次執行的時間,可以自己設定,也可以使用系統目前時間,以毫秒為單位。本屬性與第
一個屬性(type)密切相關,如果第一個參數對 應的鬧鐘使用的是相對時間(ELAPSED_REALTIME和ELAPSED_REALTIME_WAKEUP), 那麼本屬性就得使用相對時間(相對於 系統啟動時間來
說),比如目前時間就表示為:SystemClock.elapsedRealtime(); 如果第一個參數對應的鬧鐘使用的是絕對時間 (RTC、RTC_WAKEUP、POWER_OFF_WAKEUP),那麼本屬性就得使用絕對時間, 比如目前時間就表示 為:System.currentTimeMillis()。

long intervalTime:
鬧鐘的間隔時間,也是毫秒為單位。

PendingIntent pi:
這個就是我們可以執行的動作,可以去啟動一個service,發送一個廣播,啟動一個activity,方法一看就明白了。
最後一個小提示:
Calendar.HOUR_OF_DAY (24小時)
Calendar.HOUR (12小時)

Android定時任務

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.