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

Android Studio Java开发静态整数变量丢失、跳转卡顿及日志报错问题

问题原因分析

  • 静态变量被重置
    核心有两个原因:
    1. 你在BeginAfter的onFinish方法中调用startActivity(new Intent(BeginAfter.this, Begin.class)),不是回退到已有的Begin实例,而是新建了一个Begin实例。如果应用触发过页面重建、后台被系统回收,静态变量num会被重新初始化为默认值1。
    2. 你只在点击按钮时把num的值存入SharedPreferences,但从未在Begin的onCreate生命周期中读取存储的值赋值给num,每次新建Begin实例都会重置num为初始值。
  • 页面转场卡顿
    反复调用startActivity启动新的Begin实例会导致Activity回退栈不断堆积实例,占用内存越来越高,同时新实例初始化需要走完整的页面创建流程,开销远高于回退到已有页面,自然会出现卡顿。
  • Unknown bits set in runtime_flags: 0x8000报错
    这个日志是Android系统层面的输出,和你的业务代码无关,一般出现在特定版本的模拟器、定制ROM上,不会影响应用运行,无需处理。

修复方案

  1. 调整BeginAfter的onFinish逻辑,不要新建Begin实例,直接调用finish()回到上一级已有的Begin实例即可:
@Override
public void onFinish() {
    // 不要启动新的Begin实例,直接销毁当前页回到已有的Begin
    finish();
}
  1. 在Begin的onCreate方法中添加从SharedPreferences读取存储值的逻辑,保证页面重建时num的值不会丢失:
@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_begin);
    // 新增:读取SharedPreferences中存储的num值
    sharedpreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
    String savedNum = sharedpreferences.getString(NUM, "1");
    num = Integer.parseInt(savedNum);
}
  1. 可选优化:如果需要避免CountDownTimer内存泄漏,可以在BeginAfter的onDestroy生命周期中调用cancel()销毁计时器:
// 先把CountDownTimer声明为成员变量
private CountDownTimer countDownTimer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_begin_after);
    textView = findViewById(R.id.timer);
    long duration = TimeUnit.MINUTES.toMillis(1);
    countDownTimer = new CountDownTimer(duration, 1000) {
        // 原有onTick、onFinish逻辑保持不变
        @Override
        public void onTick(long l) {
            String sDuration = String.format(Locale.ENGLISH, "%01d", TimeUnit.MILLISECONDS.toSeconds(l) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(l)));
            textView.setText(sDuration);
        }

        @Override
        public void onFinish() {
            finish();
        }
    }.start();
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (countDownTimer != null) {
        countDownTimer.cancel();
    }
}

内容的提问来源于stack exchange,提问作者user16240688

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:36:01