Android 項目運行時,屏幕邊緣出現紅色邊框(如圖所示),影響界面觀感。

這是 Android 系統的 StrictMode(嚴格模式)視覺提示。當應用在主線程執行耗時操作(網絡請求、數據庫讀寫、文件 I/O 等)或存在內存洩漏時,StrictMode 會在屏幕邊緣繪製紅色邊框作為警告。
在 Application 或主 Activity 的 onCreate() 中添加:
if (BuildConfig.DEBUG) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog() // 僅記錄日誌
.penaltyDeath() // 可選:違規時崩潰
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectAll()
.penaltyLog()
.build());
}
關鍵點:移除 .penaltyFlashScreen()(即紅框顯示),改用 .penaltyLog() 輸出到 Logcat。
Thread、AsyncTask、RxJava、Coroutine 等Handler 分批執行// 僅關閉磁盤讀寫檢測的紅框
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.permitDiskReads()
.permitDiskWrites()
.penaltyLog()
.build());
網上傳聞「修改編譯版本為 user 可解決」是錯誤的。user/userdebug/eng 是系統構建類型,影響的是系統映像權限與預置應用,不影響應用層的 StrictMode 行為。
mStrictModeFlash.setVisibility 的說明這是系統框架內部類 StrictModeFlash 的字段,應用層無法直接訪問(非 SDK 公開 API),嘗試反射修改極不穩定且可能被系統限制。
penaltyLog(),關閉 penaltyFlashScreen(),專注修復 Logcat 中報警的違規點StrictMode 完全禁用(BuildConfig.DEBUG 判斷)CSDN 討論帖第 7 樓正解:Android 紅色邊框問題解決