无明显原因的方向更改后应用程序崩溃

     2023-03-10     217

关键词:

【中文标题】无明显原因的方向更改后应用程序崩溃【英文标题】:Application crashes after an orientation change for no apparent reason 【发布时间】:2011-06-30 03:23:00 【问题描述】:

编辑版主,请随时删除此问题。问题在于我的背景图像大小,而不是实际的方向变化。


请多多包涵-我不相信这个问题/问题已经用这种简单的术语得到了回答。

我有一个应用程序,其中包含多个活动和 2 个布局资源,每个活动具有相同的 XML 文件名称,存储在 res/layout-land 和 res/layout-port 中。

问题是,当我在 Nexus One(我使用的是 Android 2.3)上启动应用程序时,应用程序启动时没有问题,但如果我尝试旋转屏幕(更改方向),它就会崩溃。澄清一下,如果我以手机横向样式启动 Activity,应用程序会向我显示 res/layout-land 资源布局,反之亦然,但如果我尝试在运行时更改方向,它会崩溃。

我相信如果有 2 个 XML 布局,保存在 -port 和 -land 文件夹中,那么 Android 应该销毁该活动并使用另一个同名布局重新创建它,对吗?

这是我的清单,如有必要,我很乐意粘贴更多代码。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="dominion.game"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="9" />
    <application android:icon="@drawable/icon" android:label="@string/app_name" debuggable="true">
        <activity android:name="dominion.game.DominionMenu"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="dominion.game.CreateMenu"
                  android:label="@string/app_name">
        </activity>
        <activity android:name="dominion.game.AdvancedMenu"
                  android:label="@string/app_name">
        </activity>
        <activity android:name="dominion.game.ShuffleResult"
                  android:label="@string/app_name">
        </activity>
    </application>
</manifest>

这里是 onCreate 方法的开始:

      @Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mainmenu);
    //...Lots of onClick listeners for the 4 buttons...
    

其余部分是动作侦听器,如果单击每个按钮,它就会启动另一个活动的意图。主菜单布局对应于 res/layout-land/mainmenu & res/layout-port/mainmenu,至少理论上是这样。

我查看了 DDMS 错误,但没有任何链接指向我的代码中存在错误的某个地方。

编辑:请求错误日志(所有红色的东西,直到强制关闭)-

07-01 00:23:41.082: ERROR/dalvikvm-heap(11182): 9864000-byte external allocation too large for this process.
07-01 00:23:41.109: ERROR/GraphicsJNI(11182): VM won't let us allocate 9864000 bytes
07-01 00:23:41.109: DEBUG/dalvikvm(11182): GC_FOR_MALLOC freed <1K, 52% free 2598K/5379K, external 19819K/19819K, paused 15ms
07-01 00:23:41.117: DEBUG/AndroidRuntime(11182): Shutting down VM
07-01 00:23:41.117: WARN/dalvikvm(11182): threadid=1: thread exiting with uncaught exception (group=0x40015560)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182): FATAL EXCEPTION: main
07-01 00:23:41.128: ERROR/AndroidRuntime(11182): java.lang.RuntimeException: Unable to start activity ComponentInfodominion.game/dominion.game.DominionMenu: android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1622)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:2796)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.app.ActivityThread.access$1600(ActivityThread.java:117)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:932)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.os.Looper.loop(Looper.java:123)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.app.ActivityThread.main(ActivityThread.java:3647)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at java.lang.reflect.Method.invokeNative(Native Method)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at java.lang.reflect.Method.invoke(Method.java:507)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at dalvik.system.NativeStart.main(Native Method)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.view.LayoutInflater.createView(LayoutInflater.java:518)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.view.LayoutInflater.inflate(LayoutInflater.java:386)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.app.Activity.setContentView(Activity.java:1657)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at dominion.game.DominionMenu.onCreate(DominionMenu.java:28)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1586)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     ... 12 more
07-01 00:23:41.128: ERROR/AndroidRuntime(11182): Caused by: java.lang.reflect.InvocationTargetException
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at java.lang.reflect.Constructor.constructNative(Native Method)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at java.lang.reflect.Constructor.newInstance(Constructor.java:415)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.view.LayoutInflater.createView(LayoutInflater.java:505)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     ... 22 more
07-01 00:23:41.128: ERROR/AndroidRuntime(11182): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.graphics.Bitmap.nativeCreate(Native Method)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.graphics.Bitmap.createBitmap(Bitmap.java:477)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.graphics.Bitmap.createBitmap(Bitmap.java:444)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:349)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:488)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:463)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:326)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.content.res.Resources.loadDrawable(Resources.java:1709)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.view.View.<init>(View.java:1951)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.view.View.<init>(View.java:1899)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.view.ViewGroup.<init>(ViewGroup.java:286)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     at android.widget.LinearLayout.<init>(LinearLayout.java:120)
07-01 00:23:41.128: ERROR/AndroidRuntime(11182):     ... 25 more
07-01 00:23:41.144: WARN/ActivityManager(113):   Force finishing activity dominion.game/.DominionMenu

本质上,我的问题是:需要采取哪些步骤才能使自动屏幕方向更改起作用?我以为我都做了……

非常感谢任何帮助或建议,在此先感谢!


@Rahul Sharma- 这停止了​​崩溃,但不是切换到另一个布局,它只是在不同的方向上使用相同的布局。

@Asyncronos 我在 2.3 而不是 2.1 但这是一个值得考虑的有趣错误,当然。我不认为我正在使用这些对象。

好的-你们会生气的,但问题是我的背景图像很大-接近 30 英寸 x 30 英寸。所以我把它缩小到大约 7x7 英寸,没有问题......

【问题讨论】:

它崩溃 不是一个充分的错误描述。发布堆栈跟踪。 崩溃的意思是你得到一个Force-Close弹出框?如果是这种情况,你肯定会得到一个 logcat 错误:你可能需要在命令行运行 adb logcat 并观察它以查看错误,但肯定会有一个错误是你的问题的原因。 【参考方案1】:

在你的 AndroidManifest.xml 中放

android:configChanges="orientation|keyboardHidden" 在您的所有活动标签中

例如

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="dominion.game"
    android:versionCode="1"
    android:versionName="1.0">
    <uses-sdk android:minSdkVersion="9" />
    <application android:icon="@drawable/icon" android:label="@string/app_name" debuggable="true">
        <activity android:name="dominion.game.DominionMenu" android:label="@string/app_name" android:configChanges="orientation|keyboardHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="dominion.game.CreateMenu"
              android:label="@string/app_name" android:configChanges="orientation|keyboardHidden">
        </activity>
        <activity android:name="dominion.game.AdvancedMenu"
              android:label="@string/app_name" android:configChanges="orientation|keyboardHidden">
        </activity>
        <activity android:name="dominion.game.ShuffleResult"
              android:label="@string/app_name" android:configChanges="orientation|keyboardHidden">
        </activity>
    </application>
</manifest>

希望这会有所帮助:-)

【讨论】:

【参考方案2】:

我的应用程序上也发生了这种情况,请检查是否在 Orientation 更改或其他内容上创建了活动。它肯定与活动生命周期有关

【讨论】:

【参考方案3】:

我的 Nexus One 也遇到过类似的屏幕方向更改问题。也许您遇到了这个记录在案的错误?

http://code.google.com/p/android/issues/detail?id=6191

【讨论】:

【参考方案4】:

在您的清单中,在应用程序标签中插入 android:configChanges="keyboardHidden|orientation|screenSize" 以克服由于方向更改而导致的崩溃。这对我的申请有所帮助。

【讨论】:

调用 setViewControllers:animated 后方向更改崩溃:

...无法找出问题所在。上下文:我正在创建一个UISplitViewiPad应用程序,该应用程序在主视图中有一个UINaviga 查看详情

使用 iAd 时,iOS 7 上的方向更改会导致应用程序崩溃(发送到实例的选择器无法识别)

】使用iAd时,iOS7上的方向更改会导致应用程序崩溃(发送到实例的选择器无法识别)【英文标题】:OrientationchangecrashesapponiOS7whenusingiAd(unrecognizedselectorsenttoinstance)【发布时间】:2013-12-0121:27:56【问题描述】:集成iAd后,只要方... 查看详情

方向更改时应用程序崩溃

】方向更改时应用程序崩溃【英文标题】:Applicationcrashedwhenorientationchange【发布时间】:2012-01-0409:15:07【问题描述】:实际上我的问题与发布的问题相同:thesameproblem但是还没有答案..这是我遇到的问题:我刚刚使用senchatouch&p... 查看详情

在方向更改后重新创建活动之前更改意图包数据

...消息。然后该消息在活动的onCreate函数中显示给用户。当应用程序由于方向改变而重新启动时,消息会再次显 查看详情

abb示教器触屏无反应,外屏换后还是无反应,电路板上看无明显异常,请问该怎么处理?

abb机器人示教器故障现象及对应解决方案分析故障:ABB示教器触摸无反应  现象:触摸屏幕时鼠标箭头无任何动作,没有发生位置改变。原因:造成此现象产生的原因很多,下面逐个说明:①表面声波触摸屏四周边上的声波反... 查看详情

DialogFragment 方向更改崩溃与 getActivity()

...的问题是,如果在对话框打开时我的手机方向发生变化,应用程序就会开始表现得很奇 查看详情

C++ omp 无明显改善

】C++omp无明显改善【英文标题】:C++ompnosignificantimprovement【发布时间】:2020-02-1901:11:36【问题描述】:我在MSVC2019上使用默认编译器。我正在处理的代码是Mandelbrot图像。我的代码的相关部分如下所示:#pragmaompparallelforfor(inty=0;y<... 查看详情

显示弹出框时更改方向时应用程序崩溃。

】显示弹出框时更改方向时应用程序崩溃。【英文标题】:Applicationcrashesonchangingorientationwhilepopoverisdisplayed.【发布时间】:2012-08-2308:59:17【问题描述】:朋友们,单击工具栏按钮时,会出现我的弹出视图。当我将模拟器旋转到横... 查看详情

iOS 8.3 支持的方向崩溃

...我有很多崩溃总是相同的错误:由于未捕获的异常而终止应用程序\'UIApplicationInvalidInterfaceOrientation\',原因:\'支持方向与应用程序没有共同的方向,并且[...shouldAutorota 查看详情

ViewPager内的MapFragment在改变方向时崩溃

...】:2014-10-0414:49:10【问题描述】:当我更改屏幕方向时,应用程序崩溃。错误出现在map.java的第23行。事实上,如果我删除这一行,当我更改屏幕方向时应用程序不会崩溃,但如果我转到Tab3然后返回到Map(Tab)。有人知道这个问题... 查看详情

Unity iOS 应用程序因不明原因而崩溃

】UnityiOS应用程序因不明原因而崩溃【英文标题】:UnityiOSappcrashesforunclearreasons【发布时间】:2020-09-0904:33:13【问题描述】:我正在尝试修复我的应用程序中经常发生的崩溃。终止应用程序的进程(通过点击设备的主页按钮两次... 查看详情

更改字体样式后,Android 应用程序在三星设备上崩溃

】更改字体样式后,Android应用程序在三星设备上崩溃【英文标题】:AndroidappcrashedonSamsungdevicesafterchangeoffontstyle【发布时间】:2015-10-2217:00:42【问题描述】:当我尝试更改设备的字体(SamsungGalaxyTab3)时,我遇到了一个应用程序... 查看详情

如何找到切换按钮崩溃的原因?

...情况:如果我将切换按钮的状态从Off更改为On突然,整个应用程序崩溃并显示“YourAppisnotResponding”。我不知道代码中的错误是什么。我是Android应用程序开发的新手。所以,我不知道 查看详情

ce6下无明显针对mfc的组件,m$已经准备放弃mfc了

如果想用MFC,需要手工将MFC加入到系统中。1:在VS2005目录下找到MFCDLL。在我的电脑上目录是D:/ProgramFiles/MicrosoftVisualStudio8/VC/ce/Dll/x86。因为我用的平台是基于CEPC,所以选择x86目录。2:复制MFCDLL到%WINCE_ROOT%/OSDesigns/MFC目录。将x86下的... 查看详情

迁移后更改核心数据时崩溃

...我希望有人可以读取崩溃数据。大约一个月前,我为一个应用程序构建了一个核心数据模型。它有12个实体,每个实体与其他实体有多种关系。大约两周前(试飞后),我想更新模型。我对模型进行了版本化,将两个标志(NSMigra... 查看详情

屏幕方向更改后继续活动 - Android

...水平或纵向,它就会重新启动。倾斜屏幕后,如何使我的应用程序从中断的地方继续?请注意,我不希望我的应用固定在纵向/横向位置。PublicvoidPlay()Audi 查看详情

替换片段和方向更改

...43【问题描述】:我正在开发一个面向2.x和3.0设备的Android应用程序,因此我使用的是兼容API。我正在Android2.0上进行测试。我正在尝试将显示的片段替换为另一个片段(带有搜索结果的搜索表单),当显示第二个(结果)片段时... 查看详情

ActionBarSherlock:方向更改 ICS 时可折叠项目崩溃

】ActionBarSherlock:方向更改ICS时可折叠项目崩溃【英文标题】:ActionBarSherlock:CollapsibleitemcrashonorientationchangeICS【发布时间】:2012-07-2413:33:11【问题描述】:我有一个在XML中定义的可折叠菜单项,如下所示:<itemandroid:id="@+id/search... 查看详情