Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android活动生命周期导致视图刷新问题_Android_Multithreading_Android Activity - Fatal编程技术网

Android活动生命周期导致视图刷新问题

Android活动生命周期导致视图刷新问题,android,multithreading,android-activity,Android,Multithreading,Android Activity,我在一个大项目中遇到了一个问题。我会尽量把它归结为(我希望)重要的几点。我有一个由几个活动组成的应用程序,其中一个是其他活动启动的主要导航点 一旦主活动被销毁并重新创建(通过导航到另一个活动并返回),视图更新似乎不起作用。具体来说,我有一个按钮和几个文本视图s。重新创建活动后,我无法更改它们的文本。我尝试过改变活动的背景色,但这也不起作用 我的第一个想法是,在保存/恢复过程中,我错过了一个重要的数据成员。然而,我已经看了很多,我认为这不是问题所在。此外,我尝试过不加载保存的数据并重新启动,但它仍

我在一个大项目中遇到了一个问题。我会尽量把它归结为(我希望)重要的几点。我有一个由几个
活动组成的应用程序,其中一个是其他活动启动的主要导航点

一旦主
活动
被销毁并重新创建(通过导航到另一个
活动
并返回),视图更新似乎不起作用。具体来说,我有一个
按钮
和几个
文本视图
s。重新创建
活动
后,我无法更改它们的文本。我尝试过改变
活动的背景色,但这也不起作用

我的第一个想法是,在保存/恢复过程中,我错过了一个重要的数据成员。然而,我已经看了很多,我认为这不是问题所在。此外,我尝试过不加载保存的数据并重新启动,但它仍然不会更新视图

接下来,我认为我可能没有更新UI线程。我确信这会导致异常,但可以肯定的是,我将刷新发布到了
处理程序
。还是没有骰子

但是,如果将有限的UI更改连接到
onClick()
,则可以看到这些更改。在这种情况下,什么有效,什么无效会引起其他问题(一些数据被破坏),所以现在我集中精力调查这个问题。我会提供一个更新,一旦我得到更多的映射

我还应该看什么

更新:添加一些代码段:

onCreate()

以及它的匹配项onSaveInstanceState()


我希望还有其他成员应该保存,但它们的影响很小。

根据您所说的,我猜您保留的是不再有效的旧视图对象,但是如果不发布一些代码(特别是您所说的保存/还原代码),很难确定.你确定你的活动被破坏了吗?除非您调用finish,否则当您创建一个新活动时,旧的活动仍然存在,只是停止了。这是我简要考虑过的。也许它值得更多的思考。在我的
onCreate()
中,我使用了典型的
runView=(runView)findViewById(R.id.runView);'语句来设置
View`对象(存储为对象成员,而不是本地方法)。正如所料,
onCreate
确实会在重新创建活动时被调用,因此我希望所有这些
View
对象都是有效的。无论如何,我会用一些代码更新。@toadzky,我肯定。我覆盖了所有常见的
活动
生命周期可疑事件,并放入日志语句来监视它们。通过
onDestroy()
,您可以粘贴一些主要活动中的代码片段,并解释您面临的问题。如果不看代码,就很难猜出这里出了什么问题!!
if (savedInstanceState != null) {
  Log.v(Calculations.log, "Restarting with saved instance state");
  Serializable ser = savedInstanceState.getSerializable("infusion");
  if ((ser != null) && (ser instanceof Infusion)) {
    mInfusion = (Infusion) ser;
  }
  mBeganEditing = savedInstanceState.getBoolean("editing",
    mInfusion != null);
  Log.v(Calculations.log, this.toString());
}
@Override
protected void onSaveInstanceState(Bundle outState) {
    Log.v(Calculations.log, "StageInfusion::onSaveInstanceState()");
    Log.v(Calculations.log, this.toString());
    outState.putSerializable("infusion", mInfusion);
    outState.putBoolean("editing", mBeganEditing);
    outState.putBoolean("resume", true);
    ServerManager.stopListening();

    super.onSaveInstanceState(outState);
}