android – 当我简单地做setContentView(R.layout.somelayout)时,为什么我会得到内存泄漏?

android – 当我简单地做setContentView(R.layout.somelayout)时,为什么我会得到内存泄漏?,第1张

概述在我的onCreate()中,我只是使用xml作为活动的内容视图.为什么我得到内存泄漏.这是我做错了什么吗? 我的xml只有5个图像按钮,每个图像按钮都有一个statelistdrawable(选择器).每张图片的大小只有16kb. (所以我使用了10个图像 – 按下的状态图像和每个按钮的正常状态图像). 在我的活动中没有使用LayoutInflator .. 从xml设置内容视图时,androi 在我的onCreate()中,我只是使用xml作为活动的内容视图.为什么我得到内存泄漏.这是我做错了什么吗?

我的xml只有5个图像按钮,每个图像按钮都有一个stateListdrawable(选择器).每张图片的大小只有16kb. (所以我使用了10个图像 – 按下的状态图像和每个按钮的正常状态图像).

在我的活动中没有使用LayoutInflator ..
从xml设置内容视图时,android不应该自行回收bimaps吗?

我收到的错误是这样的:

02-17 09:18:39.797: ERROR/AndroIDRuntime(372): Uncaught handler: thread main exiting due to uncaught exception02-17 09:18:39.817: ERROR/AndroIDRuntime(372): java.lang.RuntimeException: Unable to start activity ComponentInfo{***.***.*****.activity/***.***.*****.home.HomeScreenActivity}: androID.vIEw.InflateException: Binary XML file line #2: Error inflating class java.lang.reflect.Constructor02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2401)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.app.ActivityThread.access00(ActivityThread.java:116)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.os.Handler.dispatchMessage(Handler.java:99)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.os.Looper.loop(Looper.java:123)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.app.ActivityThread.main(ActivityThread.java:4203)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at java.lang.reflect.Method.invokeNative(Native Method)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at java.lang.reflect.Method.invoke(Method.java:521)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:549)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at dalvik.system.NativeStart.main(Native Method)02-17 09:18:39.817: ERROR/AndroIDRuntime(372): Caused by: androID.vIEw.InflateException: Binary XML file line #2: Error inflating class java.lang.reflect.Constructor02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.vIEw.LayoutInflater.createVIEw(LayoutInflater.java:512)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at com.androID.internal.policy.impl.PhoneLayoutInflater.onCreateVIEw(PhoneLayoutInflater.java:56)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.vIEw.LayoutInflater.createVIEwFromTag(LayoutInflater.java:562)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.vIEw.LayoutInflater.inflate(LayoutInflater.java:385)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.vIEw.LayoutInflater.inflate(LayoutInflater.java:320)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.vIEw.LayoutInflater.inflate(LayoutInflater.java:276)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at com.androID.internal.policy.impl.PhoneWindow.setContentVIEw(PhoneWindow.java:313)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.app.Activity.setContentVIEw(Activity.java:1620)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at ***.***.*****.home.HomeScreenActivity.onCreate(HomeScreenActivity.java:35)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2364)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     ... 11 more02-17 09:18:39.817: ERROR/AndroIDRuntime(372): Caused by: java.lang.reflect.InvocationTargetException02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.Widget.relativeLayout.<init>(relativeLayout.java:171)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at java.lang.reflect.Constructor.constructNative(Native Method)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at java.lang.reflect.Constructor.newInstance(Constructor.java:446)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.vIEw.LayoutInflater.createVIEw(LayoutInflater.java:499)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     ... 21 more02-17 09:18:39.817: ERROR/AndroIDRuntime(372): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.graphics.BitmapFactory.nativeDecodeAsset(Native Method)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.graphics.BitmapFactory.decodeStream(BitmapFactory.java:439)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:322)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.graphics.drawable.Drawable.createFromresourceStream(Drawable.java:688)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.content.res.Resources.loadDrawable(Resources.java:1710)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.content.res.TypedArray.getDrawable(TypedArray.java:548)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.vIEw.VIEw.<init>(VIEw.java:1846)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.vIEw.VIEw.<init>(VIEw.java:1795)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     at androID.vIEw.VIEwGroup.<init>(VIEwGroup.java:282)02-17 09:18:39.817: ERROR/AndroIDRuntime(372):     ... 25 more

我替换了图像,代码在没有应用程序挂起的情况下工作,但是我的ddms日志因为以下错误而疯狂:

02-17 09:18:37.287: ERROR/(372): VM won't let us allocate 270000 bytes02-17 09:18:37.287: ERROR/dalvikvm-heap(372): 270000-byte external allocation too large for this process.02-17 09:18:37.287: ERROR/(372): VM won't let us allocate 270000 bytes02-17 09:18:37.287: ERROR/dalvikvm-heap(372): 270000-byte external allocation too large for this process.02-17 09:18:37.287: ERROR/(372): VM won't let us allocate 270000 bytes02-17 09:18:37.287: ERROR/dalvikvm-heap(372): 270000-byte external allocation too large for this process.02-17 09:18:37.287: ERROR/(372): VM won't let us allocate 270000 bytes02-17 09:18:37.287: ERROR/dalvikvm-heap(372): 264600-byte external allocation too large for this process.

..
.
.
.
.

虽然该应用程序正在运行,但我想知道我做错了什么.或者它是有缺陷的androID系统中的一个错误?

附上代码:

public class VirtualHomeActivity extends Activity  {    Imagebutton imgbtn1,imgbtn2,imgbtn3,imgbtn4,imgbtn5;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {                super.onCreate(savedInstanceState);        setContentVIEw(R.layout.home);}}

layout home.xml:

<?xml version="1.0" enCoding="UTF-8"?><relativeLayout androID:ID="@+ID/relativeLayout01"    androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent"    xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:layoutAnimation="@anim/home_screen_animation_controller" androID:background="@drawable/bg_application">    <Imagebutton androID:ID="@+ID/imgBtn1"        androID:layout_wIDth="340dip" androID:scaleType="fitCenter" androID:layout_height="100dip" androID:layout_marginleft="20dip" androID:layout_margintop="5dip" androID:background="@drawable/custombutton1"></Imagebutton>    <Imagebutton androID:layout_below="@ID/imgBtn1"        androID:ID="@+ID/imgBtn2" androID:layout_wIDth="340dip" androID:scaleType="fitCenter" androID:layout_height="100dip" androID:layout_margintop="5dip" androID:layout_marginleft="20dip" androID:background="@drawable/custombutton2"></Imagebutton>    <Imagebutton androID:layout_below="@ID/imgBtn2      androID:ID="@+ID/imgBtn3" androID:scaleType="fitCenter" androID:layout_wIDth="340dip" androID:layout_height="100dip" androID:layout_marginleft="20dip" androID:layout_margintop="5dip" androID:background="@drawable/custombutton3"></Imagebutton><Imagebutton androID:layout_below="@ID/imgBtnS3" androID:ID="@+ID/imgBtn4" androID:scaleType="fitCenter" androID:layout_height="100dip" androID:layout_wIDth="340dip" androID:layout_marginleft="20dip" androID:layout_margintop="5dip" androID:background="@drawable/custombutton4"></Imagebutton><Imagebutton androID:layout_below="@ID/imgBtn4"    androID:ID="@+ID/imgBtn5" androID:scaleType="fitCenter"    androID:layout_height="100dip" androID:layout_wIDth="340dip"    androID:layout_marginleft="20dip" androID:layout_margintop="5dip" androID:background="@drawable/custombutton5"></Imagebutton></relativeLayout>

选择器是:(custombutton1.xml)

<?xml version="1.0" enCoding="UTF-8"?><selector xmlns:androID="http://schemas.androID.com/apk/res/androID">    <item androID:state_pressed="true" androID:drawable="@drawable/img_clicked" />    <item androID:drawable="@drawable/img_unclicked" /> </selector>

我从活动中删除了所有其他代码,以检查我是否正在创建内存泄漏.但是在这里我将Jsut设置内容视图作为我的布局文件,而且我的ddms说VM不会让我们分配270000字节

我不认为我试图在这里管理任何活动生命周期.

解决方法 您的内存泄漏可能在其他地方,也许是您管理活动生命周期更改的方式.看看文章 Avoiding Memory Leaks. 总结

以上是内存溢出为你收集整理的android – 当我简单地做setContentView(R.layout.somelayout)时,为什么我会得到内存泄漏?全部内容,希望文章能够帮你解决android – 当我简单地做setContentView(R.layout.somelayout)时,为什么我会得到内存泄漏?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1124178.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存