代码之家  ›  专栏  ›  技术社区  ›  David

应用程序生命周期。如何仅在应用程序启动时运行某些内容

  •  0
  • David  · 技术社区  · 16 年前

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

    我不能为类使用静态的,甚至不能创建应用程序类,因为我无法确定“应用程序”何时消失。即使在销毁了唯一的活动之后,应用程序显然仍然是活动的。

    是否有一种方法可以确定由于键盘被扩展或调用了横向模式而调用了OnCreate?

    谢谢

    3 回复  |  直到 16 年前
        1
  •  3
  •   Robby Pond    16 年前

    在OnSaveInstanceState中,可以存储一个标志,指示它是否已运行。如果应用程序正在还原,那么在onCreate(bundle savedinstancestate)中,savedinstancestate将具有变量,以便您可以检查savedinstancestate是否存在!=null和saveInstanceState.get(“正在还原”)!=空,则不显示对话框。

        2
  •  3
  •   David    16 年前

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

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

    android:configChanges="orientation|keyboardHidden"
    

    然后在我添加的活动中,

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

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

        3
  •  0
  •   Samuh    16 年前

    有办法确定吗 调用OnCreate的原因是 正在扩展的键盘或 是否调用了横向模式?

    有一种方法可以:
    1。检查键盘是否正在扩展
    2。检查当前方向(横向或纵向)的方法

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

    您可以在onCreate()中设置一个签入,以确定这是第一次运行还是由于配置更改而重新启动,方法是从1、2和该标志中的值中提取一些意义。

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