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

Android 線程中傳遞 Intent Extra 失敗的常見原因與解決方案

     編輯:程式設計綜合問答

問題現象

在 Service 的背景執行緒中建立 Intent、放入 Bundle 並啟動 Activity,但在目標 Activity 的 onCreate 中呼叫 getExtras() 卻得到 null。若將相同代碼移至 onStartCommand 則正常運作。

根本原因分析

  1. 缺少 Action 配對:啟動 Activity 時需呼叫 intent.setAction("唯一動作字串"),且接收端 AndroidManifest.xml 的 <intent-filter> 必須宣告相同 Action。
  2. 資料序列化問題:放入 Bundle 的自訂物件必須實作 java.io.Serializable 或 Parcelable 介面,否則序列化失敗導致資料遺失。
  3. Bundle 大小限制:Android 限制單次 IPC 傳輸資料不超過 256KB,超過會導致資料截斷或拋出 TransactionTooLargeException。

正確範例

// Service 執行緒中
Intent intent = new Intent(this, TargetActivity.class);
intent.setAction("com.example.ACTION_START"); // 必須設定
Bundle bundle = new Bundle();
bundle.putString("DevID", alarmInfo.getDevId()); // 確保字串可序列化
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 非 Activity 啟動需加此旗標
startActivity(intent);

檢查清單

  • Manifest 中目標 Activity 是否宣告 <action android:name="com.example.ACTION_START"/>
  • 所有放入 Bundle 的值是否為基本型別、String、或實作 Serializable/Parcelable
  • 總資料量是否遠小於 256KB
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved