【问题标题】:Why onCreate is called on Activity when rotating android tablet?为什么在旋转android平板电脑时在Activity上调用onCreate?
【发布时间】:2012-10-23 02:08:26
【问题描述】:

每当屏幕旋转时,都会在 Activity 上调用 onCreate 方法。是再次调用 onCreate 还是重新创建整个活动?

【问题讨论】:

    标签: android android-activity


    【解决方案1】:

    这不仅仅是 onCreate()。当屏幕旋转时,Activity 会暂停、停止和重新启动。有关更多信息,请参阅此问题: Activity lifecycle - onCreate called on every re-orientation

    如果问题是“为什么会发生这种情况?”答案与 Android 活动和窗口中的功能有关。更具体地说,当方向改变时,android 目前没有办法移动、调整大小和重新布局每个视图。为了使处理这种情况成为可能,我们实施了简单的实现,即拆除活动并将其以不同的方向重新启动。

    【讨论】:

    • 感谢您的回答。题外话:当屏幕方向改变时,如何在活动之间发送或保存数据?而且有一个转折点,它不能存储在数据库或文件中,因为它有敏感数据。
    • @jM2.me 看到这个问题,如果您有新的具体问题,请随时发布新问题stackoverflow.com/questions/151777/…
    【解决方案2】:

    当方向改变时,onDistroy 方法将调用,这表明 Activity 已关闭,并再次创建具有新高度和宽度的新 Activity。

    当方向改变时,Activity 类中的所有对象都将销毁,当 Activity 重新启动时,它们将再次创建,如果有大量数据,则需要更多时间再次加载所有数据.. 所以它更喜欢分开和将所有数据存储在非活动类中,并通过创建非活动类的对象在活动类中使用..

    当方向改变时onSaveInstanceState方法也被调用
    通过使用 onSaveInstanceState 数据将在活动销毁和重新创建时设置或存储一些值

        protected void onSaveInstanceState(Bundle icicle) {
          super.onSaveInstanceState(icicle);
          icicle.putLong("param", value);
    
        }
    

    当活动再次重新启动 on create 方法调用时,Bundle 将返回您保存在 onSaveInstanceState 中的值

    public void onCreate(Bundle icicle) {
      if (icicle != null){
        value = icicle.getLong("param");
      }
    }
    

    【讨论】:

    • 所以我可以通过 onSaveInstanceState 传递给由于旋转而创建的新活动?我可以使用 onSaveInstanceState 将列表从旧活动传递到新活动吗?
    • 在将值添加到 Bundle 之前,您必须调用 super.onSaveInstanceState(bundle) 方法。
    • 天哪,这毁了我的一天。我是 android 新手,我刚刚发现我需要编写大量代码才能允许屏幕旋转。非常非常糟糕
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 2012-09-13
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多