Android开发:如何让onResume仅在Activity第二次进入时执行?
实现思路与代码示例
嘿,这个需求其实很好实现,不用额外的生命周期方法,核心就是加个状态标记来区分首次和非首次进入Resumed状态~我给你分两种常见场景讲清楚:
场景1:Activity未被系统销毁(比如从其他Activity返回)
这种情况最简单,只需要在Activity类里定义一个成员变量来记录是否是首次进入Resumed状态即可:
public class YourActivity extends AppCompatActivity { // 标记是否是第一次进入Resumed状态 private boolean isFirstResume = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); // 这里放你首次进入时需要执行的onCreate专属操作 initViews(); loadInitialData(); } @Override protected void onResume() { super.onResume(); if (!isFirstResume) { // 第二次及以后进入Resumed状态时,执行你的特定操作 refreshContent(); showWelcomeBackTip(); } else { // 首次进入后,把标记置为false,下次就会触发上面的逻辑 isFirstResume = false; } } // 示例方法,替换成你自己的业务逻辑 private void initViews() { /* 初始化视图 */ } private void loadInitialData() { /* 加载初始数据 */ } private void refreshContent() { /* 刷新内容 */ } private void showWelcomeBackTip() { /* 显示返回提示 */ } }
场景2:考虑Activity被系统销毁重建(比如横竖屏切换、内存不足)
如果你的Activity可能因为系统原因被销毁重建,上面的成员变量会被重置为true,这时候就需要用持久化存储来保存标记状态,比如SharedPreferences:
public class YourActivity extends AppCompatActivity { private static final String PREFS_NAME = "YourActivityPrefs"; private static final String KEY_IS_FIRST_ENTER = "is_first_enter"; private boolean isFirstResume; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); // 从SharedPreferences读取首次进入标记 SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); isFirstResume = prefs.getBoolean(KEY_IS_FIRST_ENTER, true); // 首次进入时执行onCreate操作,并更新标记 if (isFirstResume) { initViews(); loadInitialData(); prefs.edit().putBoolean(KEY_IS_FIRST_ENTER, false).apply(); } } @Override protected void onResume() { super.onResume(); if (!isFirstResume) { // 第二次及以后进入Resumed状态时执行特定操作 refreshContent(); showWelcomeBackTip(); } } // 示例方法,替换成你自己的业务逻辑 private void initViews() { /* 初始化视图 */ } private void loadInitialData() { /* 加载初始数据 */ } private void refreshContent() { /* 刷新内容 */ } private void showWelcomeBackTip() { /* 显示返回提示 */ } }
关键说明
- 核心逻辑就是用标记变量区分首次和非首次进入Resumed状态,不需要额外的生命周期方法,
onResume()完全够用。 - 选择哪种实现取决于你的业务场景:如果Activity不会被频繁销毁重建,第一种简单方案就足够;如果需要应对系统销毁的情况,就用第二种持久化方案。
内容的提问来源于stack exchange,提问作者TheAlmac2
相关产品推荐
相关产品推荐

