亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android開發中實現定時器功能的方法有哪些

發布時間:2020-11-24 16:50:44 來源:億速云 閱讀:155 作者:Leah 欄目:移動開發

Android開發中實現定時器功能的方法有哪些?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

一、Timer

Timer是Android直接啟動定時器的類,TimerTask是一個子線程,方便處理一些比較復雜耗時的功能邏輯,經常與handler結合使用。

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

timer.schedule(task, delay,period);

task: TimerTask類型的對象,實現TimerTask的run()方法就是要周期執行的一個任務;

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

period:定時器的間隔時間。

第三個參數就是執行的周期,為long類型。

TimerTask task= new TimerTask() {
   @Override
   public void run() {
    count++;
    Log.i("MainActivity",count + "");
   }
};
new Timer().shedule(task,0,1000);//

以下是幾種調度task的方法:

//time為Date類型:在指定時間執行
timer.schedule(task, time);
//firstTime為Date類型,period為long,表示從firstTime時刻開始,每隔period毫秒執行一次。
timer.schedule(task, firstTime,period);
//delay 為long類型:從現在起過delay毫秒執行一次。
timer.schedule(task, delay);
//delay為long,period為long:從現在起過delay毫秒以后,每隔period毫秒執行一次。
timer.schedule(task, delay,period);
//time為Date類型:在指定時間執行一次。
timer.schedule(task, time);
//firstTime為Date類型,period為long,表示從firstTime時刻開始,每隔period毫秒執行一次。
timer.schedule(task, firstTime,period);
//delay 為long類型:從現在起過delay毫秒執行一次。
timer.schedule(task, delay);
//delay為long,period為long:從現在起過delay毫秒以后,每隔period毫秒執行一次。
timer.schedule(task, delay,period);

注意: 1.taskonDestory()中取消掉,否則可能發生崩潰

2.用TimerTask定時進行某些操作的APP,即使退出了,TimerTask中依然會運行一會,但是不能長時間運行

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

二 、CountDownTimer

CountDownTimer cdt = new CountDownTimer(10000, 100) {
 @Override
 public void onTick(long millisUntilFinished) {
  tv_hello.setText(millisUntilFinished + "");
 }
 @Override
 public void onFinish() {
 }
};
cdt.start();

onTick中的方法一次

直到執行完10000/100次為止,最后會執行onFinish()

三、 AlarmManager

 Intent intent2 = newIntent(ReadLogService.this,TestBroadcast.class);
 PendingIntent pd=PendingIntent.getBroadcast(getApplicationContext(),0,intent2,PendingIntent.FLAG_ONE_SHOT);
 AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
 long triggerTime =SystemClock.elapsedRealtime() + 5*1000;
 am.set(AlarmManager.ELAPSED_REALTIME,triggerTime, pd);

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

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

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

<receiver android:name="com.xxxx.Receiver" android:process=":remote" />

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

2,即使程序退出后,程序自身不會有任何煩惱的問題,系統到時間自動調用對應組件執行定義好的邏輯

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

四、 handler

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

private Handler handler = Handler() {
  public handleMessage(android.os.Message msg) {
   switch (msg.what) {
    :
    // 移除所有的msg.what為0等消息,保證只有一個循環消息隊列再跑
    handler.removeMessages();
    // app的功能邏輯處理
    ...
    // 再次發出msg,循環更新
    handler.sendEmptyMessageDelayed(, );
    break;
    :
    // 直接移除,定時器停止
    handler.removeMessages();
    break;
   default:
    break;
   }
  };
 };

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

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

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

五、Thread

Thread實現定時器是創建一個子線程,在里面while循環,可以通過handler來更新UI。個人覺得Thread和Timer沒區別,只是長得不一樣。

private MyThread thread;
private class MyThread extends Thread {
 public boolean stop;
 public () {
  while (!stop) {
   // 處理功能
   // 通過睡眠線程來設置定時時間
    {
    Thread.sleep();
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
 };
};
/**
 * 啟動線程
 * */
private start() {
  (thread == ) {
  thread = MyThread();
  thread.start();
 }
}
/**
 * 停止線程
 * */
private () {
  (thread != ) {
  thread.stop = ;
  thread = ;
 }
}

覺得跟Timer差不多,沒什么特殊優點

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

關于Android開發中實現定時器功能的方法有哪些問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

天津市| 科技| 虞城县| 清流县| 会理县| 清徐县| 九龙县| 彝良县| 津市市| 原阳县| 北宁市| 化隆| 济南市| 舞钢市| 阿巴嘎旗| 宣汉县| 休宁县| 甘德县| 恩施市| 嘉黎县| 玉山县| 桃园县| 仙居县| 宾阳县| 黄龙县| 铁岭县| 乐安县| 泸州市| 海南省| 荣昌县| 武穴市| 乐业县| 水富县| 鹰潭市| 龙井市| 昭通市| 湾仔区| 勐海县| 乐山市| 铁岭市| 合作市|