android中一種不常見的函數調用方式

android中一種不常見的函數調用方式:

此 demo 中只是做了一件很簡單的事,創建一個目錄。
調用流程:
initializeFirstTime() --> addIdleHandler() -->  ensureOSXCompatible ()

         private void addIdleHandler() {
             MessageQueue queue = Looper.myQueue();
             queue.addIdleHandler( new MessageQueue.IdleHandler() {
                 @Override
                 public boolean queueIdle() {
                     Storage. ensureOSXCompatible();
                     Storage. ensureQQShortVideoCompatible();
                     return false;
                 }
             });
         }

     /**
     * OSX requires plugged -in USB storage to have path /DCIM/NNNAAAAA to be
     * imported. This is a temporary fix for bug#1655552.
     */
    public static void ensureOSXCompatible () {
        File nnnAAAAA = new File( DCIM, "100ANDRO");
        if (!( nnnAAAAA.exists() || nnnAAAAA.mkdirs())) {
            Log.e( TAG, "Failed to create " + nnnAAAAA.getPath());
        }
    }


關鍵點在 addIdleHandler() 函數中,會先獲主線程的消息隊列,向消息隊列中添加一個新的MessageQueue.IdleHandler。
當調用IdleHandler.queueIdle()返回false時,此MessageQueue.IdleHandler會自動的從消息隊列中移除。
或者調用removeIdleHandler(MessageQueue.IdleHandler)也可以從消息隊列中移除MessageQueue.IdleHandler。
addIdleHandler這個函數的具體釋義可以參見:http://developer.android.com/reference/android/os/MessageQueue.html

addIdleHandler 一般是在 onCreate() 函數或者 initializeFirstTime() 函數當中調用。
在這裏可以套用此模式,做任何你想做的事。也可以在此處創建一些UI界面等。
         private void addIdleHandler() {
             MessageQueue queue = Looper.myQueue();
             queue.addIdleHandler( new MessageQueue.IdleHandler() {
                 @Override
                 public boolean queueIdle() {
                     // TODO Auto-generated method stub
                     //你想做的任何事情
                     //........
                     //........
                     return false;
                 }
             });
         }



發佈了112 篇原創文章 · 獲贊 32 · 訪問量 141萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章