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

Android 廣播將資料傳遞給 Activity 的完整實作指南

     編輯:程式設計綜合問答

核心機制

Android 廣播(Broadcast)屬於系統級訊息總線,元件之間透過 Intent 攜帶資料進行跨進程通訊。要將廣播資料傳遞給 Activity,需完成「發送廣播 → 註冊接收器 → 在接收器中啟動/更新 Activity」三步驟。

實作步驟

1. 發送帶有資料的廣播

Intent intent = new Intent("com.example.CUSTOM_ACTION");
intent.putExtra("key_message", "來自廣播的資料");
intent.putExtra("key_number", 123);
sendBroadcast(intent); // 或 sendOrderedBroadcast() 依需求

2. 動態註冊 BroadcastReceiver(在 Activity 中)

private BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if ("com.example.CUSTOM_ACTION".equals(intent.getAction())) {
            String msg = intent.getStringExtra("key_message");
            int num = intent.getIntExtra("key_number", 0);
            // 更新 UI 或儲存資料
            runOnUiThread(() -> tvResult.setText(msg + " / " + num));
        }
    }
};

@Override
protected void onResume() {
    super.onResume();
    IntentFilter filter = new IntentFilter("com.example.CUSTOM_ACTION");
    registerReceiver(mReceiver, filter);
}

@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(mReceiver);
}

3. 靜態註冊(AndroidManifest.xml)並啟動 Activity

<receiver android:name=".MyBroadcastReceiver" android:exported="true">
    <intent-filter>
        <action android:name="com.example.CUSTOM_ACTION" />
    </intent-filter>
</receiver>

在 MyBroadcastReceiver.onReceive() 中啟動目標 Activity:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent actIntent = new Intent(context, TargetActivity.class);
        actIntent.putExtras(intent); // 直接透傳 Bundle
        actIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(actIntent);
    }
}

進階技巧

  • LocalBroadcastManager:應用內部通訊,更安全、效能更好,不跨進程。
  • 有序廣播:sendOrderedBroadcast() 可讓接收器按優先級處理,並可攔截或修改資料。
  • 黏性廣播(已棄用):Android 5.0+ 不再支援,改用 LiveData/Flow 等架構元件保存最新狀態。

常見坑點

問題解決方案
動態註冊未在 onPause 解除導致記憶體洩漏、重複接收;務必成對呼叫 register/unregister
靜態接收器啟動 Activity 缺少 FLAG_ACTIVITY_NEW_TASK非 Activity context 啟動 Activity 必須加此旗標
Intent Extra 型別不匹配發送端與接收端使用相同鍵值與型別,建議定義常數類別

總結

廣播傳遞資料給 Activity 的關鍵在於:Intent 搭載 Bundle → BroadcastReceiver 解析 → 更新 UI 或啟動 Activity。根據使用場景選擇動態或靜態註冊,並注意生命週期管理與執行緒安全。

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