在垂直和水平之间转动手机每次都要调用活动的创建?

时间:2011-03-18 21:02:53

标签: android

如何通过设备的方向更改将活动保持在哪里?如果我在编辑文本视图中单击,键盘会出现,但如果我在此之后将手机转向侧面,键盘就会消失。

我调试了代码,每次更改手机的方向时都会调用onCreate。

非常感谢

2 个答案:

答案 0 :(得分:2)

这是因为Android告诉您硬件/资源/配置已经改变,有许多应用程序可以切换它的布局或调整到新的硬件配置,这些应用程序可以更好地了解用户视图。

每次转动设备时都会调用onCreate方法,因为您可能希望使用响应新配置(屏幕分辨率,即)的布局来构建活动。 Android需要获得新的屏幕分辨率(即)以传递给您的活动并重新构建它们。

没有太多麻烦,因为活动会重新创建,问题是如果你做任何昂贵的操作,那么当轮换发生时,昂贵的方法将一次又一次地运行。

要避免这种情况的更有效的代码是将昂贵的操作结果保存到一个bundle中,当旋转ocurrs然后获得持久化结果时。像这样:

//data is the activity's necessary information to build activity data:
MyData data = new MyData();

@Override   
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
  data = (MyData) getLastNonConfigurationInstance();
  if( data == null ){
    data = new MyData();
    data = performExpensiveOperation;
  }
  buildLayout();
}

现在,buildLayout()将使用数据信息构建布局活动。

将此方法(“onRetainNonConfigurationInstance”)放入您的活动中,您可以保存与活动有关的整个数据...像这样的事情;

@Override
public Object onRetainNonConfigurationInstance() {
  return data;
}

稍后您可以在此处阅读更具体的信息:Faster Screen Orientation

欢呼声

答案 1 :(得分:0)

您有两种选择。

1)使用活动清单条目中的“android:orientation = landscape / portrait”属性将活动锁定到一个方向。

2)通过将应用程序的状态保存在onSaveInstanceState(Bundle)中并在Bundle在重新加载时将其传递到onCreate(Bundle)时恢复配置,从而正确处理配置更改。

有许多资源和文章可以详细说明在Android上保存活动状态。