【问题标题】:Retaining variable value when stopping android activity停止android活动时保留变量值
【发布时间】:2017-01-13 14:52:13
【问题描述】:

我有两个Activity,A和B。Activity B可以通过在Activity A中按一个按钮来打开。

在活动 B 中,我有一个整数变量,当我从 A 返回到活动 B 时,我想保留它。我的问题是当我按下后退按钮从 B 转到 A 时,活动被破坏。

我已将 onBackPressed 方法改写为:

@Override public void onBackPressed(){ Intent i = new Intent(this, Game.class); startActivity(i); }

我可以从我的日志中看到,在按下后退按钮后,活动 B 处于 onStop() 状态,但是,没有调用 onRestart(),因此由于内存原因,活动必须被终止。

我已阅读建议我使用 onSaveInstanceState() 的其他帖子的答案,但是当我尝试访问 onCreate() 中的包时,该包为空。方法 onRestoreInstanceState() 没有被调用。

 protected void onSaveInstanceState(Bundle savedInstanceState){
    Log.i(LOG, "instance saving");
    super.onSaveInstanceState(savedInstanceState);
    savedInstanceState.putInt("score", userScore);
}

我也尝试过 SharedPreferences,但这没有用,因为我不希望我的数据在活动/应用程序被故意破坏时保留。

【问题讨论】:

    标签: java android android-intent


    【解决方案1】:

    我认为您的问题在于了解整个 Task 生态系统。当您按下后退按钮时,您会从任务中弹出您的活动,因为它被销毁并调用onDestroyed()
    总而言之,我认为您每次都会获得全新的活动。 onSaveInstanceState() 未被调用,因为活动被用户杀死,而不是被 OS 杀死。
    深入了解这位开发者tutorial
    另外我认为这两个一定有帮助:meme

    【讨论】:

      【解决方案2】:

      您可以将变量存储在应用程序类https://developer.android.com/reference/android/app/Application.html 中,或者您可以为此创建自己的单例类 https://www.tutorialspoint.com/design_pattern/singleton_pattern.htm

      【讨论】:

        【解决方案3】:

        onBackPressed 上启动Activity - A 肯定会杀死当前的Activity - B。无需再次启动 Activity,只需在 Activity - B 中调用 onBackPressed 并添加一个名为 onResume() 的阶段,当您从 A 恢复到 Activity B 时调用该阶段

        删除这个:

        @Override
        public void onBackPressed(){
            Intent i = new Intent(this, Game.class);
            startActivity(i);
        }
        

        有了这个:

        @Override
        public void onBackPressed(){
            super.onBackPressed();
        }   
        

        当您从 A 回到 B 时,在 B @Override 阶段 onResume() 中,您可以在从 Activity A 回来时保存值。

        在活动 B 中添加这个:

        @Override
        protected void onResume() {
            super.onResume();
            // save values here for resume
        }
        

        查看活动生命周期:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多