開發一個視頻播放相關項目,要求每個 Activity 界面都持有一個播放窗口,且播放同一視頻流。期望播放窗口在 Activity 切換時不銷毀、不重建、位置狀態保持不變。
Android Activity 採用棧式管理,切換 Activity 會觸發完整生命週期(onPause → onStop → onDestroy),導致播放器被釋放、視頻中斷。即使使用 singleTask 或 singleInstance 啟動模式,也無法實現「窗口始終浮在所有界面之上」的視覺效果。
WindowManager,不隨 Activity 銷毀而銷毀。SYSTEM_ALERT_WINDOW 權限)。<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />Foreground Service 中調用 WindowManager.addView() 添加播放器 View(SurfaceView/TextureView + 控制層)。LayoutParams.TYPE_APPLICATION_OVERLAY(API 26+)或 TYPE_PHONE,設置 FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCH_MODAL | FLAG_WATCH_OUTSIDE_TOUCH 確保不攔截底層觸摸事件。onCreate 初始化播放器,onDestroy 釋放資源並 removeView;提供靜態方法/廣播供 Activity 控制播放/暫停/seek。對於「跨 Activity 持久化播放窗口」的剛性需求,Foreground Service + WindowManager 浮動窗口是唯一穩健、符合 Android 架構的方案。請根據目標 API 級別處理權限適配,並妥善管理播放器資源釋放,避免內存洩漏。