BroadcastReceiver 的執行時間最好不要超過 5s,否則會讓 Android 系統判定為 Timeout,並顯示錯誤對話視窗。BroadcastReceiver 被註冊後並不會在背景執行,而是當事件觸發才會執行。所以過多的 BroadcastReceiver 並不會影響系統運作,但是仍會佔用一些記憶體,還是不要太多才好。

implement

public class BroadcastReceiverDemo extends BroadcastReceiver { @Override public void onReceive(Context arg0, Intent arg1) { } }

register

IntentFilter filter = new IntentFilter("NEW_BROADCAST"); BroadcastReceiverDemo receiver = new BroadcastReceiverDemo(); BroadcastReceiverDemoActivity.this.registerReceiver(receiver, filter); 或是在 AndroidManifest.xml 的 application 標籤內加入下列程式碼 <receiver android:name=".BroadcastReceiverDemo"> <intent-filter > <action android:name="NEW_BROADCAST" /> </intent-filter> </receiver>

在 AndroidManifest.xml 內註冊必須是一個 public 的非 inner class,也就是單獨的 class file 且宣告成 public。

unregister

BroadcastReceiverDemoActivity.this.unregisterReceiver(receiver);

unregisterReceiver() 不可卸載一個空物件或是一個已卸載的 receiver,重覆卸載會產生錯誤。所以在 unregister 後把物件設成 null,在 register 前先判斷是否為 null 再註冊。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()