方向更改导致应用程序到FC

时间:2012-01-16 16:51:17

标签: android orientation saving-data android-dialog forceclose

我正在开发一个扫描条形码的应用程序,当它成功扫描时,它会显示一个带有扫描代码的Dialog,根据条形码/二维码中包含的内容,它会显示一个打开的按钮在显示对话框时,如果屏幕改变方向,它会崩溃。我已经让它工作到崩溃之前方向可以改变几次,但是当我检查LogCat它说NullPointerException导致FC。在我实施@CommonsWare的建议之前,我可以让它在崩溃之前旋转任意次数,但是因为我已经实现了它,所以FC在第二个方向上总是会改变。当我在debug mode中启动时,我可以根据需要随意旋转手机,但是一旦我在正常模式下启动它,它总会崩溃。

类字段:

private String currentType;

我实施了onSaveInstanceState()

@Override
public void onSaveInstanceState(Bundle outState){
    super.onSaveInstanceState(outState);    
    outState.putString("savedType", currentType);
}

另外onRestoreInstanceState()

@Override
public void onRestoreInstanceState(Bundle savedInstanceState){
    super.onRestoreInstanceState(savedInstanceState);
    currentType = savedInstanceState.getString("savedType");
}

更新


根据@ CommonsWare的建议,我已将上述代码更新为目前的代码。我还编辑了我的完整性帖子。

我也使用CM7(Android版本 - 2.3.7,内核版本 - 2.6.37.6-cyanogenmod-g0799e00 android @ portatile#1,Mod版本 - CyanogenMod-7-11152011-NIGHTLY-N1,内部版本号 - GWK74 )。

1 个答案:

答案 0 :(得分:1)

  

在onPause()中,我使用this.onRetainNonConfigurationInstance()试图解决这个问题,但它似乎没有什么区别。

您不会致电onRetainNonConfigurationInstance()。 Android调用onRetainNonConfigurationInstance()

  

根据我阅读的有关处理方向变化的所有帖子,我想在我看来这也应该有效。

您需要使用更好的资源。

尝试修复代码:

步骤1:从清单

中的android:configChanges删除<activity>属性

第2步:删除onConfigurationChanged()方法

步骤3:将您的onResume()逻辑移至onCreate()以填充currentType,或者不要在currentType onResume() >

更好的方法是将onRetainNonConfigurationInstance() / getLastNonConfigurationInstance()替换为onSaveInstanceState() / onRestoreInstanceState(),将String放入Bundle

Here is a sample project演示使用onSaveInstanceState()Here is a sample project演示了onRetainNonConfigurationInstance()的使用情况。