在 Android 開發中,遇到一個經典問題:同一個登錄頁面 Activity,第一次啟動時背景圖片正常顯示,但從另一個入口(如通知欄、其他 Activity)再次啟動時,背景圖片卻無法加載,顯示為純黑色背景。
經過排查,問題通常源於圖片資源本身。當更換為其他圖片時可正常加載,說明原圖片可能存在以下問題:
建議對背景圖片進行壓縮處理,可使用以下方法:
// 使用 inSampleSize 進行壓縮加載
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2; // 根據螢幕密度調整
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bg_login, options);
推薦使用 Glide 或 Picasso 等成熟框架,它們能自動處理記憶體管理和圖片縮放:
Glide.with(this)
.load(R.drawable.bg_login)
.apply(new RequestOptions().override(screenWidth, screenHeight))
.into(backgroundImageView);
確認 AndroidManifest.xml 中 Activity 的 launchMode 設置,避免因 singleTop 或 singleTask 模式導致 onCreate 不重複調用而未重新加載資源。
開發階段應針對不同螢幕密度提供多套圖片資源 (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi),並在代碼中合理使用 BitmapFactory.Options 進行解碼優化,從源頭避免此類問題。