Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android使用Thread加Handler實現計時與保持屏幕喚醒不熄滅

Android使用Thread加Handler實現計時與保持屏幕喚醒不熄滅

編輯:關於Android編程

這兩天工作比較忙,沒有時間更新博客。今天難得閒下來,總結一下之前寫的一個Demo,用到了兩個小知識點:一是使用Thread加Handler實現計時,二是控制屏幕喚醒不熄滅。

首先是計時,首先我使用單純的Handler來實現計時,代碼如下:

Handler handler = new Handler();
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            timeSec ++;
            mTimeCount.setText("" + timeSec);
            handler.postDelayed(this, 1000);
        }
    };

但是這樣有個弊端,當我的主線程裡有Thread.Sleep延時操作時,這個時候計時就會暫停。所以需要在另外一個Thread裡來進行計時:

new Thread(new TimeThread()).start();

final Handler handler = new Handler() {         
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 1:
                    timeSec++;
                    if (timeSec < 60) {  // 1分鐘以下情況
                        mTimeCount.setText("總耗時:" + timeSec + "秒");
                    } else if (timeSec < 3600) {  // 1小時以下情況
                        int minutes = timeSec / 60;
                        int second = timeSec % 60;
                        mTimeCount.setText("總耗時:" + minutes + "分" + second + "秒");
                    } else {
                        int hours = timeSec / 3600;
                        int minutes = (timeSec - hours * 3600) / 60;
                        int second = timeSec % 60;
                        mTimeCount.setText("總耗時:" + hours + "時" + minutes + "分" + second + "秒");
                    }

            }
            super.handleMessage(msg);
        }
    };
這樣UI在阻塞時,雖然我們的mTimeCount這個TextView沒有實時更新,但是計時函數還是在進行的,當UI線程的Thread.Sleep()結束時,就會更新。


下面看一下保持屏幕喚醒的邏輯:

private static PowerManager.WakeLock wakeLock;

  public static void keepScreenOn(Context context, boolean on) {
        if (on) {
            PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            wakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, "==KeepScreenOn==");
            wakeLock.acquire();
        } else {
            if (wakeLock != null) {
                wakeLock.release();
                wakeLock = null;
            }
        }
    }

在應用destory的時候得把wakeLock給release掉:

  @Override
    protected void onDestroy() {
        super.onDestroy();
        keepScreenOn(Main.this, false);
    }



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved