2012-03-18 81 views
2

我發現這個代碼在這裏兩個職位:處理器短信ContentObserver

String url = "content://sms/"; 
Uri uri = Uri.parse(url); 
getContentResolver().registerContentObserver(uri, true, new MyContentObserver(handler)); 

但我不知道這是什麼處理程序MyContentObserver的構造器是。

我想在「content:// sms // sent」中註冊一個ContentObserver,以便在Android發送短信時得到通知,並且在ContentObserver的文檔中說,方法OnChange將從處理傳入的構造函數。

回答

4

A HandlerLooper一起使用以逐一執行任務隊列。對於ContentObserver,它的onChange()方法可能會被多次調用。要排隊這些調用並按順序執行它們,您需要提供一個處理程序。

如果您想要在主線程中執行onChange(),只需創建一個新的處理程序,如:Handler handler = new Handler();並傳遞它。

但是如果你想onChange()到另一個線程來執行,你首先需要使用Looper.prepare();

你不需要主線程創建Looper之所以線程創建Looper是它會自動爲您創建。

對於Handler & Looper如何工作的一個很好的解釋,檢查this article

+0

感謝您的回答 – jonathanrz 2012-03-18 20:39:34

+1

我仍然不明白爲什麼ContentObserver構造函數應該傳遞Handler而Handler對象在類中無用。 – 2015-10-28 11:48:29