You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android内存变量清空时,指定模块重启至Activity A的实现方案

Android特定模块缓存失效后重启至入口页方案

核心思路

针对指定模块的页面(A->B->C->D),通过基类统一校验缓存有效性,当静态缓存因内存回收失效时,自动清理当前模块的任务栈并重启至Activity A,且仅作用于该模块内的页面。

具体实现步骤

1. 定义模块专属基类

创建该模块所有Activity的基类,统一处理缓存校验与重启逻辑,避免重复代码:

public abstract class TargetModuleBaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 校验缓存有效性,若失效且当前不是入口页A,则重启至A
        if (!AppCache.isCacheValid() && !(this instanceof ActivityA)) {
            restartToActivityA();
            finish();
            return;
        }
    }

    private void restartToActivityA() {
        Intent intent = new Intent(this, ActivityA.class);
        // 清除Activity A之上的同栈页面,确保栈中仅保留A
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        // 携带重启标识,方便A页面做针对性处理
        intent.putExtra("RESTART_TRIGGER", "CACHE_RECYCLED");
        startActivity(intent);
    }
}

2. 统一缓存校验逻辑

封装静态缓存的有效性判断,集中管理避免分散判断:

public class AppCache {
    // 模块内使用的静态缓存变量
    public static ModuleCacheData staticCache;

    // 统一校验缓存是否有效
    public static boolean isCacheValid() {
        // 根据实际缓存内容调整判断逻辑,比如检查核心字段是否为空
        return staticCache != null && staticCache.getCoreData() != null;
    }
}

3. 模块页面继承基类

让模块内的B、C、D页面继承上述基类,自动拥有缓存校验能力:

public class ActivityD extends TargetModuleBaseActivity {
    // 业务代码正常编写,无需额外处理缓存校验
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_d);
        // 原本使用缓存的逻辑不变,缓存失效时已被基类拦截重启
    }
}

4. 配置入口页Activity A

在Manifest中给Activity A设置singleTask启动模式,确保重启时不会创建新实例,且清理栈顶页面:

<activity
    android:name=".ActivityA"
    android:launchMode="singleTask">
    <!-- 其他配置如intent-filter等 -->
</activity>

5. 处理Activity A的重启场景

在Activity A中根据重启标识,重新初始化缓存与页面状态:

public class ActivityA extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initCacheAndPage();
        handleRestartTrigger(getIntent());
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        handleRestartTrigger(intent);
    }

    private void initCacheAndPage() {
        // 从数据源加载数据并初始化静态缓存
        AppCache.staticCache = loadModuleData();
        // 初始化页面UI等操作
    }

    private void handleRestartTrigger(Intent intent) {
        if ("CACHE_RECYCLED".equals(intent.getStringExtra("RESTART_TRIGGER"))) {
            // 缓存失效重启时的特殊处理,比如重置筛选条件、刷新页面
            refreshPageForRestart();
        }
    }
}

边界控制说明

  • 仅继承TargetModuleBaseActivity的页面会触发该逻辑,其他模块页面不受影响;
  • 缓存校验逻辑集中在AppCache中,可根据业务灵活调整判断规则;
  • 通过FLAG_ACTIVITY_CLEAR_TOP确保仅清理当前模块的任务栈,不会影响应用内其他模块的页面栈。

内容的提问来源于stack exchange,提问作者Ujjwal Kumar Maharana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 05:03:36