Android ActivityControlSurface attachToActivity 簽章變更
摘要
#新的 ActivityControlSurface
方法
void attachToActivity(
@NonNull ExclusiveAppComponent<Activity> exclusiveActivity,
@NonNull Lifecycle lifecycle);
正在取代現在已棄用的方法
void attachToActivity(@NonNull Activity activity, @NonNull Lifecycle lifecycle);
帶有 Activity
參數的現有已棄用方法已在 Flutter 2 中移除。
背景
#為了讓自訂 Activities 也能提供 Flutter 外掛程式預期使用 ActivityAware
介面的 Activity
生命周期事件,FlutterEngine
公開了 getActivityControlSurface()
API。
這允許自訂 Activities 向引擎 (與之具有 (0|1):1
的關係) 發出訊號,表示它正在被附加到引擎或從引擎分離。
但是,先前的 API 存在一個缺陷,它沒有強制在連線到引擎的 activities 之間進行互斥,因此使得 activity 和引擎之間存在 n:1
的關係,從而導致生命週期串擾問題。
變更說明
#在 Issue #21272 之後,請改為使用以下方法將您的 activity 附加到 FlutterEngine
,而不是使用
void attachToActivity(@NonNull Activity activity, @NonNull Lifecycle lifecycle);
API,這個 API 現在已棄用,請改用
void attachToActivity(
@NonNull ExclusiveAppComponent<Activity> exclusiveActivity,
@NonNull Lifecycle lifecycle);
現在期望的是 ExclusiveAppComponent<Activity>
介面,而不是 Activity
。ExclusiveAppComponent<Activity>
提供一個回呼,以防您的獨佔 activity 被另一個附加到 FlutterEngine
的 activity 取代。
void detachFromActivity();
API 保持不變,您仍然需要在您的自訂 activity 被自然銷毀時呼叫它。
遷移指南
#如果您有自己的 activity 持有 FlutterView
,請將對
void attachToActivity(@NonNull Activity activity, @NonNull Lifecycle lifecycle);
的呼叫替換為對
void attachToActivity(
@NonNull ExclusiveAppComponent<Activity> exclusiveActivity,
@NonNull Lifecycle lifecycle);
的呼叫,此呼叫位於您透過呼叫 getActivityControlSurface()
從 FlutterEngine
取得的 ActivityControlSurface
上。
使用 ExclusiveAppComponent<Activity>
包裝您的 activity,並實作回呼方法
void detachFromFlutterEngine();
來處理您的 activity 被另一個附加到 FlutterEngine
的 activity 取代的情況。一般來說,您希望執行與 activity 自然銷毀時相同的分離操作。
時間軸
#已在版本中實作:1.23.0-7.0.pre
在穩定版本中:2.0.0
參考資料
#動機錯誤:Issue #66192—非獨佔 UI 元件附加到 FlutterEngine 會導致事件串擾
除非另有說明,否則本網站上的文件反映了 Flutter 的最新穩定版本。頁面最後更新於 2024-04-04。 檢視原始碼 或 回報問題。