24

我正在开发一个简单的 android 应用程序,刚刚完成了主屏幕。现在,如果屏幕的方向变化超过两次,它就会抛出错误并且应用程序会突然崩溃。

这是我的Java类:

public class PasswordActivity extends Activity implements OnClickListener {
  Button login;  
  Button forgot;
  Button register;  

  private static final String PREFERENCES = "prefs";
  private static final String PREFERENCES_NAME = "pref_name"; 
  SharedPreferences settings;
  private Cursor c;

  @Override 
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main); 
      login=(Button)findViewById(R.id.login_login);
      login.setOnClickListener(this);
      register=(Button)findViewById(R.id.login_register);
      register.setOnClickListener(this);
     
  }
  public void onClick(View v) {
  } 
}

这是我的 XML 代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="vertical"    
  android:background="@drawable/listpic">

  <LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:paddingTop="5dp"
    android:paddingLeft="3dp"
    android:paddingRight="3dp">  

    <TextView 
     android:layout_width="fill_parent"
     android:layout_weight="0.75"
     android:layout_height="wrap_content"
     android:text="@string/login_user_name"
     android:textStyle="bold"/>

    <EditText 
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:layout_weight="0.25"
     android:id="@+id/login_user_name"
     android:inputType="text"/>
  </LinearLayout>

  <LinearLayout 
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal"
     android:paddingLeft="3dp"
     android:paddingRight="3dp">  

     <TextView 
      android:layout_width="fill_parent"
      android:layout_weight="0.75"
      android:layout_height="wrap_content"
      android:text="@string/login_password"
      android:textStyle="bold"/>

     <EditText 
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_weight="0.25"
      android:inputType="textPassword"
      android:id="@+id/login_password"/>
  </LinearLayout>

  <LinearLayout 
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal"
     android:paddingLeft="3dp"
     android:paddingRight="3dp">  

     <Button 
      style="@style/left_button"
      android:text="@string/login_submit"
      android:id="@+id/login_login"/>

     <Button 
       style="@style/right_button"
       android:id="@+id/login_register"
       android:text="@string/register"/>

  </LinearLayout>
</LinearLayout>

日志猫详细信息:

10-21 12:05:59.982: D/dalvikvm(622): GC_EXTERNAL_ALLOC freed 774 objects / 56240 bytes in 61ms
10-21 12:06:15.031: D/dalvikvm(622): GC_EXTERNAL_ALLOC freed 737 objects / 30992 bytes in 59ms
10-21 12:06:18.022: E/dalvikvm-heap(622): 7596000-byte external allocation too large for this process.
10-21 12:06:18.022: E/GraphicsJNI(622): VM won't let us allocate 7596000 bytes
10-21 12:06:18.043: D/AndroidRuntime(622): Shutting down VM
10-21 12:06:18.043: W/dalvikvm(622): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
10-21 12:06:18.092: E/AndroidRuntime(622): FATAL EXCEPTION: main
10-21 12:06:18.092: E/AndroidRuntime(622): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ravi.password/com.ravi.password.PasswordActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
10-21 12:06:18.092: E/AndroidRuntime(622):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
10-21 12:06:18.092: E/AndroidRuntime(622):  at android.app.ActivityThread.main(ActivityThread.java:4627)
10-21 12:06:18.092: E/AndroidRuntime(622):  at java.lang.reflect.Method.invokeNative(Native Method)
10-21 12:06:18.092: E/AndroidRuntime(622):  at java.lang.reflect.Method.invoke(Method.java:521)
10-21 12:06:18.092: E/AndroidRuntime(622):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-21 12:06:18.092: E/AndroidRuntime(622):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-21 12:06:18.092: E/AndroidRuntime(622):  at dalvik.system.NativeStart.main(Native Method)
10-21 12:06:18.092: E/AndroidRuntime(622): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
10-21 12:06:18.092: E/AndroidRuntime(622):  at android.view.LayoutInflater.createView(LayoutInflater.java:513)
10-21 12:06:18.092: E/AndroidRuntime(622):  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
10-21 12:06:18.092: E/AndroidRuntime(622):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
10-21 12:06:18.092: E/AndroidRuntime(622):  at android.view.LayoutInflater.inflate(LayoutInflater.java:385)
10-21 12:06:18.092: E/AndroidRuntime(622):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
10-21 12:06:18.092: E/AndroidRuntime(622):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
10-21 12:06:18.092: E/AndroidRuntime(622):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
10-21 12:06:18.092: E/AndroidRuntime(622):  at android.app.Activity.setContentView(Activity.java:1647)
10-21 12:06:18.092: E/AndroidRuntime(622):  at com.ravi.password.PasswordActivity.onCreate(PasswordActivity.java:34)
10-21 12:06:18.092: E/AndroidRuntime(622):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-21 12:06:18.092: E/AndroidRuntime(622):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
10-21 12:06:18.092: E/AndroidRuntime(622):  ... 12 more
10-21 12:06:18.092: E/AndroidRuntime(622): Caused by: java.lang.reflect.InvocationTargetException
10-21 12:06:18.092: E/AndroidRuntime(622):  at android.widget.LinearLayout.<init>(LinearLayout.java:115)
10-21 12:06:18.092: E/AndroidRuntime(622):  at java.lang.reflect.Constructor.constructNative(Native Method)
10-21 12:06:18.092: E/AndroidRuntime(622):  at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
10-21 12:06:18.092: E/AndroidRuntime(622):  at android.view.LayoutInflater.createView(LayoutInflater.java:500)
10-21 12:06:18.092: E/AndroidRuntime(622):  ... 22 more
10-21 12:06:18.092: E/AndroidRuntime(622): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget
10-21 12:06:18.092: E/AndroidRuntime(622):  at android.graphics.Bitmap.nativeCreate(Native Method)
10-21 12:06:18.092: E/AndroidRuntime(622):  at android.graphics.Bitmap.createBitmap(Bitmap.java:468)
10-21 12:06:18.092: E/AndroidRuntime(622):  at android.graphics.Bitmap.createBitmap(Bitmap.java:435)
10-21 12:06:18.092: E/AndroidRuntime(622):  at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:340)
10-21 12:06:18.092: E/AndroidRuntime(622):  at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:488)
10-21 12:06:18.092: E/AndroidRuntime(622):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:462)
10-21 12:06:18.092: E/AndroidRuntime(622):  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:323)
10-21 12:06:18.092: E/AndroidRuntime(622):  at android.view.ViewGroup.<init>(ViewGroup.java:285)
10-21 12:06:18.092: E/AndroidRuntime(622):  ... 26 more 

使用的图像非常小,大约 5kb。

4

4 回答 4

73

在运行时,Android 根据需要(基于屏幕大小和分辨率)调整图像大小。它使用位图在内部进行大小调整。显然,这非常占用内存(有点像疯了一样分配内存)。解决此类问题的一种快速方法是将所有可绘制文件复制到 drawable-ldpi、mdpi、hdpi 文件夹。这样,android 只会从这些文件夹中提取文件,而不是调整它们的大小。

它是一种随机的异常,很难修复。

于 2012-10-21T08:36:05.627 回答
3

请按照背景图片大小

对于支持的设备

LDPI:
Portrait: 200x320px
Landscape: 320x200px
MDPI:
Portrait: 320x480px
Landscape: 480x320px
HDPI:
Portrait: 480x800px
Landscape: 800x480px
XHDPI:
Portrait: 720px1280px
Landscape: 1280x720px
于 2014-12-26T08:22:01.080 回答
2

对不起,我的英语不好

我有同样的问题,如果你将任何“ xml ”文件放入“ drawable-24 ”,只需将它们移动到“ drawable ”,这就是我为解决这个问题所做的解决方案

祝你今天过得愉快 :)

在此处输入图像描述

于 2020-04-10T18:00:03.173 回答
0

正如其他人所澄清的那样,部分问题是与我为布局设置的背景图像相关的问题。但是,解决了这个问题后,我一直遇到错误:

不幸的是,应用程序已停止

经过反复试验,我发现问题是由<view>删除它们后的元素引起的,我最终可以运行应用程序。

于 2019-01-20T10:57:23.313 回答