2012-10-23 36 views

回答

8

它不只是onCreate()。当屏幕旋转时,活动暂停,停止并重新启动。看到这个问题的更多信息: Activity lifecycle - onCreate called on every re-orientation

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

+0

谢谢你的答案值。 Offtopic问题:当屏幕方向更改时,如何在活动之间发送或保存数据?并且存在一个转折,它不能存储在数据库或文件中,因为它具有敏感数据。 –

+0

@ jM2.me看到这个问题,并随时发布一个新的问题,如果你有一个新的具体问题http://stackoverflow.com/questions/151777/saving-activity-state-in-android – spatulamania

2

当方向更改时,onDistroy方法将调用哪个指示Activity已关闭,并且再次创建具有新高度和宽度的新活动。

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

时的取向变化的onSaveInstanceState方法也称为并
使用的onSaveInstanceState数据将设置或存储时的某些值活动销毁并重新创建

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

    } 

活动时,重新开始上创建方法调用,这一次的包返回你的onSaveInstanceState中保存

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

所以与onSaveInstanceState我可以传递给由于旋转而创建的新Activity?我可以使用onSaveInstanceState将旧活动的列表传递给新的列表吗? –

+0

在将值添加到Bundle之前,您必须调用super.onSaveInstanceState(bundle)方法。 – goetzc

相关问题