在 Service 中啟動 Activity(如彈出「啟用裝置管理員」頁面)時,新 Activity 顯示瞬間即被原 Activity 覆蓋,導致閃爍或無法正常互動。
Service 啟動 Activity 需加入 FLAG_ACTIVITY_NEW_TASK 標誌,但若原有 Activity 仍在前景且未結束,新 Activity 可能會被系統視為同一任務堆疊中的一部分,導致顯示異常。此外,若 Service 與 UI 執行緒處理不當,也會造成畫面閃爍。
在啟動新 Activity 之前,先結束(finish())當前顯示的 Activity,確保新 Activity 成為任務堆疊的頂層。
// 在 Service 中
Intent intent = new Intent();
intent.setAction(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
// 關鍵:先結束當前 Activity(需持有 Context 或 Activity 參考)
if (currentActivity != null) {
currentActivity.finish();
}
context.startActivity(intent);
android:launchMode="singleTop" 或 singleTask。SYSTEM_ALERT_WINDOW 權限或符合例外情況。透過在啟動前結束舊 Activity,可有效避免畫面閃爍與覆蓋問題,確保使用者體驗流暢。