问题描述
该应用程序似乎在其他设备上运行良好,但在三星 galaxy Note4 上崩溃了。问题指向我的主要活动,其中有一个“登录”和“注册”选项。
java.lang.RuntimeException:
at android.app.ActivityThread.performlaunchActivity (ActivityThread.java:3253)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3349)
at android.app.ActivityThread.access$1100 (ActivityThread.java:221)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1794)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:158)
at android.app.ActivityThread.main (ActivityThread.java:7225)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1120)
Caused by: android.view.InflateException:
at android.view.LayoutInflater.inflate (LayoutInflater.java:551)
at android.view.LayoutInflater.inflate (LayoutInflater.java:429)
at android.view.LayoutInflater.inflate (LayoutInflater.java:380)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView (AppCompatDelegateImpl.java:699)
at androidx.appcompat.app.AppCompatActivity.setContentView (AppCompatActivity.java:195)
at com.app.MyApp.MainActivity.onCreate (MainActivity.kt:17)
at android.app.Activity.performCreate (Activity.java:6876)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1135)
at android.app.ActivityThread.performlaunchActivity (ActivityThread.java:3206)
Caused by: android.view.InflateException:
at android.view.LayoutInflater.createView (LayoutInflater.java:657)
at com.android.internal.policy.PhoneLayoutInflater.onCreateView (PhoneLayoutInflater.java:58)
at android.view.LayoutInflater.onCreateView (LayoutInflater.java:706)
at android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:774)
at android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:716)
at android.view.LayoutInflater.inflate (LayoutInflater.java:498)
Caused by: java.lang.reflect.InvocationTargetException:
at java.lang.reflect.Constructor.newInstance (Native Method)
at android.view.LayoutInflater.createView (LayoutInflater.java:631)
Caused by: java.lang.OutOfMemoryError:
at dalvik.system.vmruntime.newNonMovableArray (Native Method)
at android.graphics.BitmapFactory.nativeDecodeAsset (Native Method)
at android.graphics.BitmapFactory.decodeStream (BitmapFactory.java:856)
at android.graphics.BitmapFactory.decodeResourceStream (BitmapFactory.java:675)
at android.graphics.drawable.Drawable.createFromresourceStream (Drawable.java:2228)
at android.content.res.Resources.loadDrawableForCookie (Resources.java:4215)
at android.content.res.Resources.loadDrawable (Resources.java:4089)
at android.content.res.Resources.loadDrawable (Resources.java:3939)
at android.content.res.TypedArray.getDrawable (TypedArray.java:886)
at android.view.View.<init> (View.java:4225)
at android.view.ViewGroup.<init> (ViewGroup.java:589)
at android.widget.RelativeLayout.<init> (RelativeLayout.java:249)
at android.widget.RelativeLayout.<init> (RelativeLayout.java:245)
at android.widget.RelativeLayout.<init> (RelativeLayout.java:241)
我的主要活动允许用户在登录或注册之间进行选择。 这就是我的 activity_main xml 的样子:(这在大多数设备上都可以正常工作)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/uititle"
tools:context=".MainActivity">
<ImageView
android:layout_width="250dp"
android:layout_height="265dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="70dp"
android:src="@drawable/loginbackground"/>
<Button
android:id="@+id/firstloginBtn"
android:layout_width="162dp"
android:layout_height="63dp"
android:background="@drawable/ovallogbuttons"
android:layout_centerHorizontal="true"
android:layout_marginTop="340dp"
style="@style/loginbtn"
android:text="@string/login"
android:textColor="@color/grey"
app:backgroundTint="@color/whitedark"
android:paddingLeft="1dp"/>
<Button
android:id="@+id/registerBtn"
android:layout_width="162dp"
android:layout_height="63dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="440dp"
style="@style/registerbtn"
android:background="@drawable/ovallogbuttons"
android:text="Register"
android:textColor="@color/grey"
app:backgroundTint="@color/whitedark"
android:paddingLeft="1dp"/>
</RelativeLayout>
解决方法
在imageView中使用uititle drawable,让它更好的控制图片的内存分配。最好使用像 picasso 或 glide 这样的第三方图像加载器库来让它们处理内存管理。