1. 程式人生 > >hander同步技巧 利用post之後的訊息是最後完成的,實現同步。關鍵看waitDone的實現。帶面精簡Camera應用。

hander同步技巧 利用post之後的訊息是最後完成的,實現同步。關鍵看waitDone的實現。帶面精簡Camera應用。

    private void testWait(){
		HandlerThread ht = new HandlerThread("Camera Handler Thread");
        ht.start();
        mCameraHandler = new CameraHandler(ht.getLooper());
        mCameraHandler.obtainMessage(OPEN_CAMERA, 1, 0).sendToTarget();
        boolean ret = false;
        ret = mCameraHandler.waitDone();
        Log.v(TAG, "ret = " + ret);
    }
    
    private class CameraHandler extends Handler {
        CameraHandler(Looper looper) {
            super(looper);
        }

        /**
         * Waits for all the {@code Message} and {@code Runnable} currently in the queue
         * are processed.
         *
         * @return {@code false} if the wait was interrupted, {@code true} otherwise.
         */
        public boolean waitDone() {
            final Object waitDoneLock = new Object();
            final Runnable unlockRunnable = new Runnable() {
                @Override
                public void run() {
                    synchronized (waitDoneLock) {
                    	Log.v(TAG, " notifyAll start");
                        waitDoneLock.notifyAll();
                    }
                }
            };

            synchronized (waitDoneLock) {
                mCameraHandler.post(unlockRunnable);
                try {
                	Log.v(TAG, "start wait");
                    waitDoneLock.wait();
                } catch (InterruptedException ex) {
                    Log.v(TAG, "waitDone interrupted");
                    return false;
                }
            }
            return true;
        }

        /**
         * This method does not deal with the API level check.  Everyone should
         * check first for supported operations before sending message to this handler.
         */
        @Override
        public void handleMessage(final Message msg) {
                switch (msg.what) {
                case OPEN_CAMERA:
					try {
						Log.v(TAG, "start sleep 4s");  
						Thread.sleep(4000);
						Log.v(TAG, "end sleep 4s"); 
					} catch (InterruptedException e) {
						// TODO 自動生成的 catch 塊
						e.printStackTrace();
					}

                    default:
                }
          
        }
    }

相關推薦

hander同步技巧 利用post之後訊息最後完成實現同步關鍵waitDone實現精簡Camera應用

private void testWait(){ HandlerThread ht = new HandlerThread("Camera Handler Thread"); ht.start(); mCameraHandler

接收簡訊訊息介面API使用ajax跨域無重新整理實現根據手機號碼傳送6位簡訊驗證碼

應用場景:登入驗證,註冊賬號,密碼找回,繫結手機號等功能 1. 本介面採用的是聚合資料介面:https://www.juhe.cn/docs/api/id/54 2. 首先,註冊賬號申請快遞單號介面:獲取申請的key 3. 簡訊模板申請 3.1. 因為等會需

Java 線程第三版 第五章 極簡同步技巧 讀書筆記

prev ear ont java else 停止 第三版 不同的 結合 一、能避免同步嗎? 取得鎖會由於下面原因導致成本非常高: 取得由競爭的鎖須要在虛擬機的層面上執行很多其它的程序代碼。 要取得有競爭鎖的線程總是必須等到鎖被釋放後。 1. 寄

利用QEventLoop實現同步等待信號槽返回結果

有一個 str ID 主程 col 一個 例子 就是 pid 在QT中想要實現一個簡單的函數:給定一個網頁地址(http://www.hao123.com),等待返回網頁的html內容。 當然我想到可利用QNetWork相關的類:QNetworkAccessManager

Vue.js 的一個小技巧---利用v-for中的index值實現隔行變色

type 樣式 lin class idt title mes har oct   首先定義好樣式,利用v-for中的index值,然後綁定樣式來實現隔行變色效果。    以下為完整代碼,很簡單,但也是個技巧。 <!DOCTYPE html> &

利用cwRsync客戶端將Windows下文件同步到Linux

txt文件 任務 span gdrive -- 腳本執行 查找 輸入 rsync服務 這裏不描述Linux服務端安裝配置rsync服務的過程,有需要可以在網絡上查找相關教程。 1.安裝cwRsync客戶端下載地址:http://itefix.no/cwrsync/下載文件c

C++多線程同步技巧(一) --- 臨界區

定義 process i++ 線程 del 文件創建 結構 UNC pau 簡介 C++中關於多線程的內容對於構建工程來說是至關重要的,C++本身也對關於多線程的操作提供了很好的支持。本章筆者就來介紹一下C++有關於多線程的重要知識點---臨界區。 臨界區的作用 線程

C++多線程同步技巧(二)--- 事件

create include 解鎖 signed 選擇 參數 bre tdi 人工 簡介 Windows在線程同步方面提供了多種信號處理機制,其中一種便是使用 CreateEvent() 函數創建事件,然後使用信號控制同步。其中將事件變為有信號可使用 SetEvent()

利用ContentProvider實現同步Binder

在Android中跨程序通訊的方式有好多種,比如 Intent Messenger AIDL(Android 介面定義語言) ContentProvider Socket 以AIDL為例,在使用AIDL實現安卓跨程序通訊的時候,通常分為3步:

前端利用Post方式與後臺互動匯出Excel

最近做了一個功能,將頁面查詢的表格資料匯出到excel表格中,利用NOPI的方法做匯出功能。 1.下載NOPI.dll並引用到專案中。 2.前端頁面的匯出方法: //匯出 function btnExport() { var colArr = []; //

技巧:去掉每一行最後一個li的外邊框/是否准許使用者調整文字域的大小

去掉每一行最後一個li的外邊框 1.給每個li起類名單獨去掉;(不建議使用) 2.將ul稍微多設定一點寬度,在ul的父容器中設定正常寬度、高度,並寫overflow:hidden; 3.ul無父元素時可給li寫margin-left:-value;在ul中寫overflow:hidden

ActiveMQ利用ajax收發訊息

準備工作: 後臺需要導包: activemq-all.jar activemq-web.jar jetty-all.jar     如果是maven專案: pom.xml <dependency>   &nb

AJAX中的利用POST傳送資料

  這裡我只寫關鍵語句,其它的就和GET方法一樣的,如果不請楚,請看我前面的文章:Ajax的JSP示例以及相關知識介紹,適合於入門者 function doMyPost() {     //這裡一定要加兩次編碼,具體原因請看:AJAX中利用PO

C++多執行緒同步技巧(二) ---事件

簡介 Windows線上程控制方面提供了多種訊號處理機制,其中一種便是使用 CreateEvent() 函式建立事件,然後使用訊號控制執行緒執行。其中將事件變為有訊號可使用 SetEvent() 函式,將事件訊號復位(變為無訊號)可使用 ResetEvent(

利用Robot製作訊息轟炸機

前段時間跟朋友用QQ聊天,說著說著就鬥起了嘴,我朋友瘋狂給我發 “你是傻子”,於是我也瘋狂的回覆 “你才是大傻子”,大家可以想象我是多麼辛苦的按鍵盤組合鍵【Control+C】,【Control+V】,【Enter】。 頓時覺得自己怎麼那麼傻,身為程式設計師,我幹嘛不做一個

OKHttp get同步請求網路+post非同步請求網路+上傳圖片

導依賴 implementation 'com.squareup.okhttp3:okhttp:3.11.0' implementation 'com.squareup.okhttp3:logging-interceptor:3.11.0'   public

【stark_summer的專欄 】專注於開發分散式任務排程框架、分散式同步RPC、非同步MQ訊息佇列、分散式日誌檢索框架、hadoop、spark、scala等技術 如果我的寫的文章能對您有幫助請您能給點捐助,請首頁置頂

專注於開發分散式任務排程框架、分散式同步RPC、非同步MQ訊息佇列、分散式日誌檢索框架、hadoop、spark、scala等技術 如果我的寫的文章能對您有幫助,請您能給點捐助,請看首頁置頂...

HTML中表單利用 post 提交與利用 get 提交時的區別

先利用HTML的<form>表單寫一個簡單的註冊頁面 HTML程式碼如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtm

SpringBoot利用redis整合訊息佇列

import java.util.concurrent.CountDownLatch; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactor

利用七牛雲解決PC端檔案同步

經常有一些文件需要在公司和家裡的兩地電腦間手工同步,很麻煩,於是利用七牛雲免費的空間來做服務端實現同步功能。 同時,為了文件內容保密,我採用cryptography模組(通過指定一個複雜的字串)對檔案加密,這樣即使別人獲取了七牛雲上的檔案也無法破解。 imp