首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 判斷廣播是否已註冊:捕獲 unregisterReceiver 異常

     編輯:程式設計綜合問答

需求

確認某個 BroadcastReceiver 是否已註冊,未註冊則註冊,保證廣播持續存在。

標準技巧:嘗試註銷捕獲異常


try {
    unregisterReceiver(receiver);
    // 無異常 → 已註冊,可選擇重新註冊或不動
} catch (IllegalArgumentException e) {
    // 拋異常 → 未註冊,執行註冊
    registerReceiver(receiver, filter);
}

原理

  • unregisterReceiver 若接收器未註冊,拋出 IllegalArgumentException: Receiver not registered。
  • 已註冊則正常返回,不拋異常。
  • 利用異常控制流判斷狀態,**無需額外標誌變量**。

最佳實踐

  1. 在 onResume() 中執行上述邏輯(先註銷再註冊),保證單一註冊、生命周期同步。
  2. 靜態註冊(Manifest)無需判斷,系統自動管理。
  3. 動態註冊**必須在 onPause/onDestroy 註銷**,否則洩漏導致崩潰。
@Override
protected void onResume() {
    super.onResume();
    try { unregisterReceiver(receiver); } catch (IllegalArgumentException ignored) {}
    registerReceiver(receiver, new IntentFilter("ACTION"));
}

@Override
protected void onPause() {
    super.onPause();
    try { unregisterReceiver(receiver); } catch (IllegalArgumentException ignored) {}
}

**捕獲 IllegalArgumentException 是判斷動態廣播註冊狀態的標準模式。**

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved