24

私は簡単なAndroidアプリケーションを開発していて、ホーム画面を完成させました。これで、画面の向きが2回以上変わると、エラーがスローされ、アプリケーションが突然クラッシュします。

これが私の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は必要に応じて(画面サイズと解像度に基づいて)画像のサイズを変更します。内部でサイズ変更を行うためにビットマップを使用します。これは明らかにメモリを大量に消費します(ちょっと狂ったようにメモリを割り当てます)。このような問題を解決する簡単な方法の1つは、すべての描画可能なファイルを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 に答える