膨胀类android.widget.ProgressBar时出错/致命的强制关闭错误-android/Java

膨胀类android.widget.ProgressBar时出错/致命的强制关闭错误-android/Java,android,out-of-memory,fatal-error,forceclose,Android,Out Of Memory,Fatal Error,Forceclose,尝试在android应用程序中显示进度条和图像时出错: 07-02 12:33:55.008: E/AndroidRuntime(1565): FATAL EXCEPTION: main 07-02 12:33:55.008: E/AndroidRuntime(1565): Process: com.example.app, PID: 1565 07-02 12:33:55.008: E/AndroidRuntime(1565): java.lang.RuntimeException: Unab

尝试在android应用程序中显示进度条和图像时出错:

07-02 12:33:55.008: E/AndroidRuntime(1565): FATAL EXCEPTION: main
07-02 12:33:55.008: E/AndroidRuntime(1565): Process: com.example.app, PID: 1565
07-02 12:33:55.008: E/AndroidRuntime(1565): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.app/com.example.app.Download}: android.view.InflateException: Binary XML file line #42: Error inflating class android.widget.ProgressBar
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.os.Handler.dispatchMessage(Handler.java:102)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.os.Looper.loop(Looper.java:136)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.app.ActivityThread.main(ActivityThread.java:5001)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at java.lang.reflect.Method.invokeNative(Native Method)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at java.lang.reflect.Method.invoke(Method.java:515)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at dalvik.system.NativeStart.main(Native Method)
07-02 12:33:55.008: E/AndroidRuntime(1565): Caused by: android.view.InflateException: Binary XML file line #42: Error inflating class android.widget.ProgressBar
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.view.LayoutInflater.createView(LayoutInflater.java:620)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.app.Activity.setContentView(Activity.java:1929)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at com.example.app.Download.onCreate(Download.java:78)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.app.Activity.performCreate(Activity.java:5231)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
07-02 12:33:55.008: E/AndroidRuntime(1565):     ... 11 more
07-02 12:33:55.008: E/AndroidRuntime(1565): Caused by: java.lang.reflect.InvocationTargetException
07-02 12:33:55.008: E/AndroidRuntime(1565):     at java.lang.reflect.Constructor.constructNative(Native Method)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.view.LayoutInflater.createView(LayoutInflater.java:594)
07-02 12:33:55.008: E/AndroidRuntime(1565):     ... 25 more
07-02 12:33:55.008: E/AndroidRuntime(1565): Caused by: java.lang.OutOfMemoryError
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:594)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:429)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.content.res.Resources.loadDrawable(Resources.java:2110)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.content.res.Resources.getDrawable(Resources.java:700)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.graphics.drawable.AnimationDrawable.inflate(AnimationDrawable.java:282)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:937)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.graphics.drawable.Drawable.createFromXml(Drawable.java:877)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.content.res.Resources.loadDrawable(Resources.java:2092)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.widget.ProgressBar.<init>(ProgressBar.java:294)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.widget.ProgressBar.<init>(ProgressBar.java:246)
07-02 12:33:55.008: E/AndroidRuntime(1565):     at android.widget.ProgressBar.<init>(ProgressBar.java:242)
07-02 12:33:55.008: E/AndroidRuntime(1565):     ... 28 more
然而,在这个例子中,应用程序仍然在这样做后崩溃,我不确定为什么

资料来源:

只需将以下代码添加到应用程序标记中的清单文件:
android:largeHeap=“true”


我在android 5或更高版本上测试自己的应用程序时遇到了这个问题

从堆栈跟踪的外观来看,我怀疑您正在尝试加载可用于进度条的自定义位图,它绝对是巨大的。你能报告你与进度条关联的位图以及它有多大吗?button_download=508 x 121 imageView1=1000px×1500px假设深度为每像素24位,你的较大图像在内存中会超过4MB。android应用程序的可用最大堆大小因手机而异,介于16MB和256MB之间。看起来您在尝试加载此布局之前已接近应用程序的最大堆大小。你可以通过在你的清单中指定Android:LaGeHeAP=“true”来解决它,但是我强烈建议预缩放/优化图像拖拉的比特深度,作为限制你的应用程序消耗的内存量的第一步。我该如何进行预缩放?图像是从IMDB下来的-所以它们非常大。。。(我尝试添加Android:LaGeHeAP=“true”作为一个快速创可贴修复-但它仍然崩溃[感谢您的洞察力BTW])我会搜索从URL解码的大小调整位图。在这里有相当多的项目解决了这个问题。
 @Override
        protected void onDestroy() {
        super.onDestroy();

        unbindDrawables(findViewById(R.id.ListView_layout));
        System.gc();
        }

        private void unbindDrawables(View view) {
            if (view.getBackground() != null) {
            view.getBackground().setCallback(null);
            }
            if (view instanceof ViewGroup) {
                for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
                unbindDrawables(((ViewGroup) view).getChildAt(i));
                }
            ((ViewGroup) view).removeAllViews();
            }