Android方向更改异常

时间:2011-05-30 13:00:28

标签: java android

我在Android中遇到屏幕方向很难。我有一个活动,在用户在设备上绘制签名后捕获签名。对于那个活动,我传递了一个可以参与的对象,我在oncreate中得到它。当活动更改方向时,活动有时无法获取parceable对象并给出异常。我尝试使用静态对象作为parceable对象,但没有用。我尝试了onsaveinstance状态方法和onRetainNonConfigurationInstance方法。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.signature_capture_view);
    Bundle bundle = getIntent().getExtras(); 
    info = bundle.getParcelable("info");
    logo= (Bitmap) bundle.get("logo");
}

我的保存实例状态方法是这样的;

@Override
 protected void onSaveInstanceState(Bundle outState) {
 outState.putParcelable("info", info);
 super.onSaveInstanceState(outState);
 }

从onconfiguration changed方法我调用setcontentview方法来设置一个新的布局。

@Override
public void onConfigurationChanged(Configuration newConfig) {
    setContentView(R.layout.signature_capture_view);
    super.onConfigurationChanged(newConfig);
}

有时当方向更改时,setcontentview方法会发生内存不足异常。

非常感谢任何帮助。提前致谢。

4 个答案:

答案 0 :(得分:2)

尝试在AndroidManifest.xml文件中设置以下android:configChanges属性:

  <activity android:name=".MyActivity"
                  android:label="@string/app_name"
                  android:configChanges="orientation|keyboardHidden">

如果您希望将应用程序修复为以纵向或横向模式打开,则在活动标记内添加android:screenOrientation:

   <activity android:name=".MyActivity"
              android:label="@string/app_name"
              android:configChanges="orientation|keyboardHidden"
              android:screenOrientation="portrait">

答案 1 :(得分:1)

如果要更改横向/纵向视图,则应按照以下步骤解决内存不足错误。

  1. 在活动代码
  2. 的清单中设置此项
      

    机器人:configChanges = “取向”

    1. in Anctivity put
    2.   

      public void onConfigurationChanged(Configuration newConfig){

          super.onConfigurationChanged(newConfig);
      
          this.recreate();
      }
      

答案 2 :(得分:0)

尝试在活动标记的清单中设置此内存错误:

android:configChanges="orientation"

答案 3 :(得分:0)

我终于找到了内存不足的答案。在我的签名图纸视图中,我没有检查视图中的位图是否为null,每次设备更改方向时它会在视图中创建位图。它会产生OOM。所以我为位图插入了一个空检查,并且oom消失了。谢谢你的快速回复。