真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android實現(xiàn)定時器的方法有哪些

這篇文章將為大家詳細講解有關(guān)Android實現(xiàn)定時器的方法有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

舞陽ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

正文

我用到的幾種實現(xiàn)定時器的類:Handler, Timer, Thread, AlarmManager。

AlarmManager

AlarmManager是系統(tǒng)開放的鬧鐘功能,使用方式和普通的manager沒有區(qū)別。

AlarmManager am = (AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE); 
// Schedule the alarm! 
Intent intent = new Intent(XXXXX);
PendingIntent sender = PendingIntent.getBroadcast(mcontext,requestCode, intent, 0); 
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
             firstTime, 30*1000, sender);

上面就是定時器的基本用法,先獲取manager,然后定義鬧鐘的flag,循環(huán)時間,到指定時間發(fā)出的pendingIntent。

一般都發(fā)出的pendingIntent都是廣播,我們自定義一個廣播接收器,就可以通過接收這個廣播,來處理自己的功能邏輯了。

這里需要注意在獨立進程中配置,這是android所定義的

優(yōu)點總結(jié)##

1,Alarm定時不需要程序自身去維護,而又系統(tǒng)來維護,使得程序更好避免了容易出錯問題,更是占用系統(tǒng)資源,cpu占有率。

2,即使程序退出后,程序自身不會有任何煩惱的問題,系統(tǒng)到時間自動調(diào)用對應(yīng)組件執(zhí)行定義好的邏輯

3,定時的多樣性,包括一次定時,循環(huán)定時(在xx年x月x日執(zhí)行,周一至周五執(zhí)行,每天幾點幾分執(zhí)行。。。)

適用場景##

個人覺得比較適用于獨立的功能邏輯,例如如果app需要定時從服務(wù)器抓取最新的數(shù)據(jù),使用獨立的service會與主體的功能分離、便于維護,關(guān)鍵是耗電低,不易出錯。

Handler

Handler可以幫助我們在子線程中操作UI線程,例如子線程解析數(shù)據(jù),解析結(jié)束后通知UI刷新界面。他本身也可以實現(xiàn)定時器。

private Handler handler = new Handler() {
    public void handleMessage(android.os.Message msg) {
      switch (msg.what) {
      case 0:
        // 移除所有的msg.what為0等消息,保證只有一個循環(huán)消息隊列再跑
        handler.removeMessages(0);
        // app的功能邏輯處理
        ...
        // 再次發(fā)出msg,循環(huán)更新
        handler.sendEmptyMessageDelayed(0, 1000);
        break;

      case 1:
        // 直接移除,定時器停止
        handler.removeMessages(0);
        break;

      default:
        break;
      }
    };
  };

只要在啟動定時器的時候,Handler.sendEmptyMessage(0),定時器就啟動了。繼續(xù)循環(huán)和停止的方法,注釋上已經(jīng)寫了。

優(yōu)點總結(jié)##

每次循環(huán)都是在主線程中操作,避免了子線程和主線程之間的穿插交互,個人覺得比timer好控制,功能實現(xiàn)也很簡單。

適用場景##

個人覺得比較適用連續(xù)更新UI,不做復(fù)雜耗時的處理的情況,例如在播放器中,我們需要更新當(dāng)前播放進度的時間的顯示,僅僅是更新了文字顯示,用handler就是個不錯的選擇。

Timer

Timer是Android直接啟動定時器的類,也是我最早接觸可以實現(xiàn)定時器的功能的工具類。

他的用法一般人都知道:

// 初始化定時器
Timer timer = new Timer();
timer.schedule(new TimerTask() {

  @Override
  public void run() {
    Log.e("lzp", "timer excute");
  }
}, delay, period);

// 停止定時器
private void stopTimer(){
  if(timer != null){
    timer.cancle();
    // 一定設(shè)置為null,否則定時器不會被回收
    timer = null;
  }
}

delay : 從定時器初始化成功 開始啟動 的延遲時間。

period:定時器的間隔時間。

優(yōu)點總結(jié)##

Timer的使用很簡單,TimerTask是一個子線程,方便處理一些比較復(fù)雜耗時的功能邏輯,經(jīng)常與handler結(jié)合使用。

適用場景

跟handler自身實現(xiàn)的定時器相比,Timer可以做一些復(fù)雜的處理,例如,需要對有大量對象的list進行排序,在TimerTask中執(zhí)行不會阻塞子線程,常常與handler結(jié)合使用,在處理完復(fù)雜耗時的操作后,通過handler來更新UI界面。

**特別吐槽:對于部分手機,如果你在TimerTask直接更新了UI線程是不會報錯的,而且運行正常,但是一定注意,更新UI一定要在主線程中執(zhí)行,否則排查錯誤的時候你懂得。而且這個東西特別耗電,特別耗電,特別耗電,重要的事情說三遍,一定在不使用的時候關(guān)閉,慎用。
**

Thread##

Thread實現(xiàn)定時器是創(chuàng)建一個子線程,在里面while循環(huán),可以通過handler來更新UI。個人覺得Thread和Timer沒區(qū)別,只是長得不一樣。

private MyThread thread;

  private class MyThread extends Thread {

    public boolean stop;

    public void run() {
      while (!stop) {
        // 處理功能

        // 通過睡眠線程來設(shè)置定時時間
        try {
          Thread.sleep(1000);
        } catch (InterruptedException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
    };
  };

  /**
   * 啟動線程
   * */
  private void start() {
    if (thread == null) {
      thread = new MyThread();
      thread.start();
    }
  }

  /**
   * 停止線程
   * */
  private void stop() {
    if (thread != null) {
      thread.stop = true;
      thread = null;
    }
  }

優(yōu)點總結(jié)

覺得跟Timer差不多,沒什么特殊優(yōu)點

適用場景

跟Timer差不多吧 ,多線程如果考慮不周經(jīng)常會出問題,經(jīng)常會出現(xiàn)多個相同功能的線程同時存在,android本身對于子線程的使用使用數(shù)量是有限制的,而且一個app同時跑多個線程是一個很可怕的事情,所以和Timer一樣,使用的時候一定要謹慎考慮。

關(guān)于“Android實現(xiàn)定時器的方法有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。


網(wǎng)頁題目:Android實現(xiàn)定時器的方法有哪些
網(wǎng)站URL:http://weahome.cn/article/gceejh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部