android - 为什么我的 Android 应用程序在更改方向时崩溃?

标签 android xml layout orientation

我在我的一项 Activity 中针对不同方向集成了不同的 xml 布局。在 Android 4.0 上,当我更改方向时一切正常,但在 1.6 上它会崩溃。为什么?有什么解决办法吗?

这是我的日志猫:

        10-06 17:49:07.539: I/ActivityManager(51): Displayed activity com.xyz.android.test/.MainActivity: 4038 ms (total 4038 ms)
        10-06 17:49:17.139: I/WindowManager(51): onOrientationChanged, rotation changed to 1
        10-06 17:49:17.139: I/WindowManager(51): Setting rotation to 1, animFlags=0
        10-06 17:49:17.169: I/WindowManager(51): Config changed: { scale=1.0 imsi=0/0 loc=en_US touch=3 keys=1/1/2 nav=3 orien=2 layout=34}
        10-06 17:49:17.269: D/StatusBar(51): updateResources
        10-06 17:49:17.569: D/dalvikvm(255): GC freed 177 objects / 10496 bytes in 45ms
        10-06 17:49:18.009: D/dalvikvm(255): GC freed 65 objects / 2600 bytes in 42ms
        10-06 17:49:18.369: E/dalvikvm-heap(255): 589824-byte external allocation too large for this process.
        10-06 17:49:18.369: E/(255): VM won't let us allocate 589824 bytes
        10-06 17:49:18.369: D/AndroidRuntime(255): Shutting down VM
        10-06 17:49:18.379: W/dalvikvm(255): threadid=3: thread exiting with uncaught exception (group=0x4001aa28)
        10-06 17:49:18.379: E/AndroidRuntime(255): Uncaught handler: thread main exiting due to uncaught exception
        10-06 17:49:18.389: E/AndroidRuntime(255): android.view.InflateException: Binary XML file line #40: Error inflating class java.lang.reflect.Constructor
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.view.LayoutInflater.createView(LayoutInflater.java:512)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:562)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:617)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:620)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:313)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.app.Activity.setContentView(Activity.java:1620)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at com.xyz.android.test.MainActivity.onConfigurationChanged(MainActivity.java:55)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.app.ActivityThread.performConfigurationChanged(ActivityThread.java:3607)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.app.ActivityThread.handleConfigurationChanged(ActivityThread.java:3673)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1864)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.os.Handler.dispatchMessage(Handler.java:99)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.os.Looper.loop(Looper.java:123)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.app.ActivityThread.main(ActivityThread.java:4203)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at java.lang.reflect.Method.invokeNative(Native Method)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at java.lang.reflect.Method.invoke(Method.java:521)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at dalvik.system.NativeStart.main(Native Method)
        10-06 17:49:18.389: E/AndroidRuntime(255): Caused by: java.lang.reflect.InvocationTargetException
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.widget.ImageView.<init>(ImageView.java:105)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at java.lang.reflect.Constructor.constructNative(Native Method)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.view.LayoutInflater.createView(LayoutInflater.java:499)
        10-06 17:49:18.389: E/AndroidRuntime(255):  ... 21 more
        10-06 17:49:18.389: E/AndroidRuntime(255): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.graphics.Bitmap.nativeCreate(Native Method)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.graphics.Bitmap.createBitmap(Bitmap.java:468)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.graphics.Bitmap.createBitmap(Bitmap.java:435)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:340)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:476)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:322)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:688)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.content.res.Resources.loadDrawable(Resources.java:1710)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.content.res.Resources.getDrawable(Resources.java:585)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:146)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:779)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.graphics.drawable.Drawable.createFromXml(Drawable.java:720)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.content.res.Resources.loadDrawable(Resources.java:1695)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.content.res.TypedArray.getDrawable(TypedArray.java:548)
        10-06 17:49:18.389: E/AndroidRuntime(255):  at android.widget.ImageView.<init>(ImageView.java:115)
        10-06 17:49:18.389: E/AndroidRuntime(255):  ... 25 more
        10-06 17:49:18.409: I/Process(51): Sending signal. PID: 255 SIG: 3
        10-06 17:49:18.419: I/dalvikvm(255): threadid=7: reacting to signal 3
        10-06 17:49:18.419: E/dalvikvm(255): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
        10-06 17:49:19.139: W/WindowManager(51): Window freeze timeout expired.
        10-06 17:49:19.139: W/WindowManager(51): Force clearing orientation change: Window{43970380 com.xyz.android.test/com.xyz.android.test.MainActivity paused=false}
        10-06 17:49:21.219: D/dalvikvm(51): GC freed 1812 objects / 89840 bytes in 79ms
        10-06 17:49:22.279: W/SurfaceFlinger(51): timeout expired mFreezeDisplay=0, mFreezeCount=1

最佳答案

关键线是这样的:

Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget

它表示您有一个位图需要比您拥有更多的内存。
如果你用模拟器测试过,可能是你没有让它使用足够的内存。
否则,图像太大,您应该降低其质量。

关于android - 为什么我的 Android 应用程序在更改方向时崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12761660/

相关文章:

android - 在 API 级别 19 以下的 Android 中选择文件或图像时,如何限制不显示 Google 驱动器选项?

android - 如何将包含数组的模型发布到 retrofit 车身发布中?

android - 未安装 google+ 时应用强制关闭

php 使用外键将简单的 xml 插入到 mysql 数据库表中

java - 我无法添加另一行按钮

android - 包括 XML 布局

java - Android ComponentInfo RuntimeException 和 NullPointerException

java - 发送 SOAP 请求以使用您自己的服务

jquery - 使用 HTML 和 CSS 的半砖图像布局

html - 如何在网格中正确排列(不同的)正方形?