GC_CONCURRENT freed ... 7% free:堆內存佔用極高,GC 頻繁回收效果差,主線程頻繁阻塞導致 ANR/無響應。System.exit(0) 強制退出導致 onDestroy 不執行:繞過生命周期,資源洩漏、數據未保存。Activity/Context 殘留實例。onSaveInstanceState(Bundle) 保存關鍵 UI 狀態(輸入文本、滾動位置、選中項)。onPause/onStop 釋放重型資源(Bitmap、數據庫連接、網絡請求取消、傳感器註銷)。onDestroy 做關鍵清理(進程被殺時不調用)。
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
// 保存 UI 狀態
outState.putString("input_text", editText.getText().toString());
outState.putInt("scroll_position", listView.getFirstVisiblePosition());
outState.putParcelable("selected_item", selectedItem);
// 保存業務數據
outState.putSerializable("draft_model", draftModel);
}
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
editText.setText(savedInstanceState.getString("input_text"));
listView.setSelection(savedInstanceState.getInt("scroll_position"));
selectedItem = savedInstanceState.getParcelable("selected_item");
draftModel = (DraftModel) savedInstanceState.getSerializable("draft_model");
}
public class MyApp extends Application {
private final List activities = new ArrayList<>();
public void registerActivity(Activity activity) {
activities.add(activity);
}
public void unregisterActivity(Activity activity) {
activities.remove(activity);
}
public void exitApp() {
// 副本遍歷,避免 ConcurrentModificationException
for (Activity activity : new ArrayList<>(activities)) {
if (!activity.isFinishing()) {
activity.finish(); // 正常調用 finish(),走完生命周期
}
}
// 不要 System.exit(0)!讓系統自然回收進程
}
}
// BaseActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((MyApp) getApplication()).registerActivity(this);
}
@Override
protected void onDestroy() {
((MyApp) getApplication()).unregisterActivity(this);
super.onDestroy();
}
鎖屏後無響應 + 高佔用 GC = **嚴重內存洩漏**。
1. 用 LeakCanary/Profiler 定位洩漏點並修復。
2. 正確實現 onSaveInstanceState 保存狀態,onPause 釋放資源。
3. **禁止 System.exit(0)**,用 finish() 讓 Activity 走完生命周期,系統自動管理進程。
4. 後台長運行任務用 WorkManager/Foreground Service,而非常駐 Activity。