
本文介绍在 Android 中通过 onResume() 生命周期方法结合刷新标志位,高效刷新 Fragment 数据的实践方案,避免使用 recreate() 导致的全量重建开销。
本文介绍在 android 中通过 `onresume()` 生命周期方法结合刷新标志位,高效刷新 fragment 数据的实践方案,避免使用 `recreate()` 导致的全量重建开销。
在 Android 开发中,Fragment 数据需在返回前台时动态更新(例如用户从设置页修改配置后返回主设置页),但直接重载整个 Fragment 或调用 recreate() 会引发界面闪烁、状态丢失及性能损耗。核心原则是:数据刷新 ≠ 视图重建。
✅ 推荐方案:在 onResume() 中按需刷新
onResume() 是 Fragment 回到前台时必然触发的生命周期方法(比 onStart() 更晚,且保证 UI 已就绪),适合作为数据同步入口:
Android文件存取与数据库编程知识,文件操作主要是读文件、写文件、读取静态文件等,同时还介绍了创建添加文件内容并保存,打开文件并显示内容;数据库编程方面主要介绍了SQLite数据库的使用、包括创建、删除、打开数据库、非查询SQL操作指令、查询SQL指令-游标Cursors等知识。
public class TopLevelSettings extends Fragment {
private boolean needRefresh = true; // 默认首次加载需刷新
@Override
public void onResume() {
super.onResume();
if (needRefresh) {
refreshData();
needRefresh = false; // 刷新后重置标志
}
}
private void refreshData() {
// 示例:重新加载 Preference 数据
SupportPreferenceController controller = use(SupportPreferenceController.class);
controller.refreshPreferences(); // 假设该方法触发 UI 更新
// 或手动通知 RecyclerView/Adapter 刷新
// adapter.notifyDataSetChanged();
}
// 外部可调用此方法主动触发刷新(如从子页面返回时)
public void triggerRefresh() {
needRefresh = true;
}
}
? 关键优化点说明
- 标志位控制:needRefresh 防止每次 onResume() 都执行冗余操作(如网络请求、数据库查询),仅在真正需要时刷新;
- 主动触发机制:在 SettingsHomepageActivity 的 onBackPressed() 或跳转逻辑中,可显式调用 fragment.triggerRefresh(),实现精准控制;
- 避免 onRestart() 全局重建:recreate() 会销毁并重建 Activity 及所有 Fragment,导致状态丢失和资源浪费,应严格避免用于单纯数据刷新场景。
⚠️ 注意事项
- 不要在 onCreateView() 或 onViewCreated() 中执行耗时刷新操作,可能阻塞 UI 线程;
- 若使用 ViewModel + LiveData,推荐将数据源观察逻辑放在 onViewCreated(),并通过 observe() 自动响应变更,此时无需手动管理 needRefresh;
- 对于 PreferenceFragmentCompat,建议重写 onResume() 并调用 getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(...) 实现监听式刷新。
通过生命周期精准介入与轻量级状态管理,即可在不牺牲用户体验的前提下,实现 Fragment 数据的可靠、高效刷新。










