【问题标题】:Application lifecycle. How to run something only when application starts应用程序生命周期。如何仅在应用程序启动时运行某些东西
【发布时间】:2010-03-27 03:42:32
【问题描述】:

我有一个对话框弹出来指示我希望活动运行多长时间。 看起来很简单,但很难确定活动何时真正开始。 如果用户在 G1 上打开键盘并因此进入横向,则会重新运行活动 onCreate 方法。

我无法为该类设置静态数据,甚至无法创建应用程序类,因为我无法确定“应用程序”何时消失。即使在销毁唯一的 Activity 之后,应用程序显然仍然存在。

有没有办法确定 onCreate 是否因为键盘被扩展或横向模式被调用而被调用?

谢谢

【问题讨论】:

    标签: android


    【解决方案1】:

    在 onSaveInstanceState 中,您可以存储一个标志,指示它是否已运行。如果正在恢复应用程序,则在 onCreate(Bundle savedInstanceState) 中,savedInstanceState 将具有变量,因此您可以检查是否 savedInstanceState != null 和 saveInstanceState.get("restoreing") != null 然后不显示对话框。

    【讨论】:

    • 但问题是我不知道它为什么消失了。可能是因为系统停止了活动,或者用户或方向发生了变化。我真正需要的是知道它的发生是因为方向改变。
    【解决方案2】:

    我尝试创建一个应用程序子类,但我仍然无法确定它何时会消失。

    我尝试了另一种方法。 我在活动清单中添加了,

    android:configChanges="orientation|keyboardHidden"
    

    然后在我添加的活动中,

    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    }
    

    这导致我的 onCreate 方法在方向改变或键盘被隐藏时不会被调用。我不确定为什么我的观点在这两种情况下看起来仍然正确,但效果很好。事实上,它甚至可以处理输入到显示对话框中的文本。当方向改变时,文本保持不变。

    【讨论】:

    • 这是最好的方法。通过添加 android:configChanges="..." 行,您已经告诉 Android 在这些情况下,它不需要重新启动活动,而只需重新绘制它们。 (有趣的是,实际上似乎很少有人知道这个功能 - 我知道我直到最近才知道 - 但这是一个非常简单的解决方案!)顺便说一句,如果这个技术解决了你的问题,你能标记你自己的答案吗作为“接受”?这会将这个问题从未解决的问题列表中删除。
    【解决方案3】:

    有没有办法确定 onCreate 已被调用,因为 键盘被扩展或 是否调用横向模式?

    有一种方法:
    1. 检查键盘是否被扩展
    2. 一种检查当前方向(横向或纵向)的方法

    确定是否调用了 onCreate() 将需要您做一些工作。例如,您可以有一个变量来标记 onCreate() 的完成并将其保存在 Activity 的状态包中。

    您可以检查 onCreate() 以确定这是首次运行还是由于配置更改而重新启动,方法是从 1,2 和标志中找出一些意义。

    这只是一个建议;可能存在更好的解决方案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      相关资源
      最近更新 更多