【问题标题】:Android: activity performing unwanted function during onResume()Android:在 onResume() 期间执行不需要的功能的活动
【发布时间】:2013-01-30 07:23:54
【问题描述】:

我正在制作一个带有闪屏动画的应用。我给了用户取消动画的选项。

主屏幕 (Home) 有一个 TextView (tv) 。我在 onCreate() 期间设置了文本,并在 onResume() 期间再次设置。

与动画一起运行时,流程为:splashscreen -> home screen -> other Activity。 tv 的文本已设置,然后返回主屏幕“重新加载”并设置不同的文本。

动画取消时,从主屏幕开始:主屏幕->其他活动。

问题:当动画被取消时,主屏幕在 onCreate() 期间将文本设置在 tv2 中,然后在 onResume() 中再次设置,即使我添加了一个“if”子句来防止这种情况发生.

代码来了:

public class Home extends Activity {
    public static boolean reload = true;
    EditText tv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    tv= (EditText) findViewById(R.id.textViewFact);
    tv.setText(updateText()); 
    MORE STUFF ....
}

如果用户选择取消动画,则从不同的 Activity 将“重新加载”设置为 false。

现在是 onResume:

public void onResume(){
    super.onResume();
    Log.i("test", "home activity before if: " + Home.reload);

    if(!reload){
        Log.i("test", "home activity inside if: " + Home.reload);

        return;
    }
    else{
        Log.i("test", "home activity inside else: " + Home.reload);

        tv.setText(updateText()); 
    }
}

如您所见,updateText() 在 onCreate() 和 onResume() 中运行,但如果 reload 为假(如您在以下 logcat 输出中看到的那样),它不应该运行updateText() 再次。

01-30 08:44:50.140: I/test(551): home activity before if: false
01-30 08:44:50.140: I/test(551): home activity inside if: false
01-30 08:44:51.170: I/test(551): home activity before if: false
01-30 08:44:51.170: I/test(551): home activity inside if: false

我不知道为什么它会进入 onResume() TWICE(它是,通过日志输出),以及它是如何运行 updateText() 函数的,当它只在 ELSE 子句中时,根据日志输出,没有达到。

【问题讨论】:

  • 我认为您应该需要经历活动的生命周期,然后您才能自己理解为什么会发生。
  • 如果你有一个显示在 Activity 之上的对话框,onResume 将在它恢复焦点后被调用
  • 您了解活动生命周期吗? onResume() 将总是 被调用,它不是 一个关于 onCreate() 的 非此即彼。另外,无论如何,区分有什么好处?
  • 我知道这一点 - 我希望 onResume() 工作 - 请更仔细地阅读我的问题。也许我不够清楚。 onResume 有 2 个选项:更新文本(如果 'reload' 为 true)或不更新文本('reload' false'),虽然 'reload' 为 false,但它无论如何都会更新。
  • 我真的不明白它为什么重要,但您正在记录 Home.reload 并使用 reload。一般来说这是危险的(但我认为它不会在这里造成任何问题..)

标签: android onresume activity-lifecycle


【解决方案1】:

原来 updateText() 再次被调用,不是从 onResume() 而是从 onCreate(),因为调用主屏幕的 Activity 没有正确完成,实际上调用 home Activity 开始两次。

感谢大家的帮助。

【讨论】:

    【解决方案2】:

    我会建议您在首选项中放置和更新您的重新加载标志,并在使用它之前从首选项中获取...

    【讨论】:

    • 我要试一试。
    • 这不起作用。我找到了自己的解决方案(请参阅我的答案)。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2011-08-26
    相关资源
    最近更新 更多