【问题标题】:Android app works on real phone but not on the emulator - Android Development?Android 应用程序可在真机上运行,​​但不能在模拟器上运行 - Android 开发?
【发布时间】:2013-09-18 00:59:59
【问题描述】:

我已经在我的索尼 x8 手机上测试了我的应用程序,它运行良好,但是它在模拟器中不起作用,我尝试重新安装 android 模拟器,删除等等...

这很烦人。我打开我的应用时在模拟器上说的错误是意外停止。

请帮忙。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/mainbgg"
android:orientation="vertical"
tools:context=".MainActivity" >

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="220dp"
    android:layout_height="50dp"
    android:layout_gravity="left"
    android:layout_marginLeft="0dp"
    android:layout_marginTop="10dp"
    android:scaleType="centerCrop"
    android:src="@drawable/headingmain" />

<ImageView
    android:id="@+id/imageView2"
    android:layout_width="300dp"
    android:layout_height="20dp"
    android:layout_marginLeft="102dp"
    android:layout_marginTop="0dp"
    android:scaleType="centerCrop"
    android:src="@drawable/headingby" />

<ImageView
    android:id="@+id/imageView3"
    android:layout_width="120dp"
    android:layout_height="125dp"
    android:layout_gravity="center_horizontal"
    android:layout_marginLeft="0dp"
    android:layout_marginTop="27dp"
    android:scaleType="centerCrop"
    android:src="@drawable/ballmain" />

<LinearLayout
    android:id="@+id/MainMenu"
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_marginTop="10dp"
    android:layout_weight="0.35"
    android:gravity="center"
    android:orientation="vertical" >

    <ImageButton
        android:id="@+id/imageButton1"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:layout_marginTop="12dp"
        android:background="@drawable/playbutton"
        android:src="@drawable/playbutton" />

    <ImageButton
        android:id="@+id/imageButton2"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:layout_marginTop="12dp"
        android:background="@drawable/helpbutton"
        android:src="@drawable/helpbutton" />

    <ImageButton
        android:id="@+id/imageButton3"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:layout_marginTop="12dp"
        android:background="@drawable/aboutbutton"
        android:src="@drawable/aboutbutton" />
</LinearLayout>

这里是activity.java:

package com.sunny.studios.marton.seoul.uefaquiz;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

 public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

    }

还有日志猫:

Don't you think the problem is : java.lang.RuntimeException: Unable to start activity  this????

09-17 20:32:26.892: D/dalvikvm(296): GC_EXTERNAL_ALLOC freed 801 objects / 58504 bytes in 56ms
09-17 20:32:28.333: E/dalvikvm-heap(296): 19180800-byte external allocation too large for this process.
09-17 20:32:28.333: E/GraphicsJNI(296): VM won't let us allocate 19180800 bytes
09-17 20:32:28.333: D/AndroidRuntime(296): Shutting down VM
09-17 20:32:28.343: W/dalvikvm(296): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
09-17 20:32:28.543: E/AndroidRuntime(296): FATAL EXCEPTION: main
09-17 20:32:28.543: E/AndroidRuntime(296): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sunny.studios.marton.seoul.uefaquiz/com.sunny.studios.marton.seoul.uefaquiz.MainActivity}: android.view.InflateException: Binary XML file line #19: Error inflating class <unknown>
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.os.Handler.dispatchMessage(Handler.java:99)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.os.Looper.loop(Looper.java:123)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.app.ActivityThread.main(ActivityThread.java:4627)
09-17 20:32:28.543: E/AndroidRuntime(296):  at java.lang.reflect.Method.invokeNative(Native Method)
09-17 20:32:28.543: E/AndroidRuntime(296):  at java.lang.reflect.Method.invoke(Method.java:521)
09-17 20:32:28.543: E/AndroidRuntime(296):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-17 20:32:28.543: E/AndroidRuntime(296):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-17 20:32:28.543: E/AndroidRuntime(296):  at dalvik.system.NativeStart.main(Native Method)
09-17 20:32:28.543: E/AndroidRuntime(296): Caused by: android.view.InflateException: Binary XML file line #19: Error inflating class <unknown>
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.view.LayoutInflater.createView(LayoutInflater.java:513)
09-17 20:32:28.543: E/AndroidRuntime(296):  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
09-17 20:32:28.543: E/AndroidRuntime(296):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.app.Activity.setContentView(Activity.java:1647)
09-17 20:32:28.543: E/AndroidRuntime(296):  at com.sunny.studios.marton.seoul.uefaquiz.MainActivity.onCreate(MainActivity.java:12)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
09-17 20:32:28.543: E/AndroidRuntime(296):  ... 11 more
09-17 20:32:28.543: E/AndroidRuntime(296): Caused by: java.lang.reflect.InvocationTargetException
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.widget.ImageView.<init>(ImageView.java:108)
09-17 20:32:28.543: E/AndroidRuntime(296):  at java.lang.reflect.Constructor.constructNative(Native Method)
09-17 20:32:28.543: E/AndroidRuntime(296):  at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.view.LayoutInflater.createView(LayoutInflater.java:500)
09-17 20:32:28.543: E/AndroidRuntime(296):  ... 22 more
09-17 20:32:28.543: E/AndroidRuntime(296): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.graphics.Bitmap.nativeCreate(Native Method)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.graphics.Bitmap.createBitmap(Bitmap.java:468)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.graphics.Bitmap.createBitmap(Bitmap.java:435)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:340)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:488)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:462)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:323)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.content.res.Resources.loadDrawable(Resources.java:1709)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
09-17 20:32:28.543: E/AndroidRuntime(296):  at android.widget.ImageView.<init>(ImageView.java:118)
09-17 20:32:28.543: E/AndroidRuntime(296):  ... 26 more

【问题讨论】:

  • 我认为这将是“Caused by: java.lang.OutOfMemoryError: bitmap...”在你的 logcat 底部附近。设备与模拟器的不和谐相处得很好。
  • 创建虚拟设备时,可以设置内存大小。可能还不够大。尝试使内存大小更大。

标签: java android eclipse android-layout emulation


【解决方案1】:

打开 Android 虚拟设备管理器 -> 新建或编辑 -> 内存选项。检查 RAM 和 VM Heap 是否足够大?

【讨论】:

  • 是的,它可以工作,非常感谢你是最棒的,但在一些较旧的安卓手机上会不会是个问题?
【解决方案2】:

你不觉得问题出在哪里

不一定。在真实设备上进行测试要好得多。我会尝试在与模拟器尝试模拟的设备接近的真实设备上进行测试。

这一行

   at com.sunny.studios.marton.seoul.uefaquiz.MainActivity.onCreate(MainActivity.java:12)

会让我想看看第 12 行,看看是否有任何可疑之处。您还会收到OutOfMemoryException。如果您经常使用位图,那么您将需要查看Using Bitmaps Efficiently。否则,我会在几个不同的设备上进行测试,看看你是否有任何问题。也许您没有为模拟器分配太多内存。除非我错过了什么。

【讨论】:

    【解决方案3】:

    实际上问题在于您尝试加载的图像。它的大小非常大,模拟器的虚拟机内存有限,但设备有更多。所以它适用于真实设备但不适用于模拟器。尝试减小图像的大小。

    问题来了。

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

    【讨论】:

    • 但是图片只有300kb!是不是太大了?
    • 还是要增加模拟器的sd内存?
    • 不行,你需要增加虚拟机的大小,sd内存就像一个外部卡内存。
    • 它的作品非常感谢你hh!但您认为这会导致某些旧手机出现问题吗?
    • 希望不会。
    【解决方案4】:

    图片的实际分辨率是多少?仅仅因为它是 300kb 压缩的,如果它是 1920x1080,那就是 2 兆像素,即 8MB 的未压缩位图 (RGBA),以及 (IIRC) 16MB 的占用空间,这是由于 Android 处理覆盖的方式。

    将其缩小到有意义的程度,并利用 drawable-ldpi drawable-mdpi 等目录 - 这样您可以将不同的设备定向到不同的大小 - 具有大屏幕的设备将具有大量 RAM,因此它们可以例如,处理从 drawable-xhdpi 加载图像。

    对于 -ldpi 设备,您可以轻松地将其缩小到 320x240 像素,因为这是此类设备中最常见的屏幕分辨率。

    http://developer.android.com/guide/practices/screens_support.html

    【讨论】:

      【解决方案5】:

      我也面临同样的情况。我禁用了我的防病毒软件 (Quickheal),它开始工作了。 Quickheal 一直阻止我的模拟器图像。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-08
        • 2016-09-02
        • 2017-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-12
        相关资源
        最近更新 更多