Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中正确加载位图_Android_Bitmap - Fatal编程技术网

在Android中正确加载位图

在Android中正确加载位图,android,bitmap,Android,Bitmap,我正在创建一个android应用程序,由于位图图像,遇到了OOM问题。我当然需要使图像在内存方面更小,但是我想练习正确的内存消耗并正确加载它们 目前,我的版面包含对res/drawable hdpi文件夹中图像的引用,作为它们的背景。我看了另一个堆栈溢出问题:问这个问题的人和我有同样的问题。我看到答案是,我应该引用java中的位图,然后循环onPause,并在onResume期间将它们重新设置。这是否意味着我不应该先在xml中设置背景,然后在JavaOnCreate中设置背景,然后在onResu

我正在创建一个android应用程序,由于位图图像,遇到了OOM问题。我当然需要使图像在内存方面更小,但是我想练习正确的内存消耗并正确加载它们

目前,我的版面包含对res/drawable hdpi文件夹中图像的引用,作为它们的背景。我看了另一个堆栈溢出问题:问这个问题的人和我有同样的问题。我看到答案是,我应该引用java中的位图,然后循环onPause,并在onResume期间将它们重新设置。这是否意味着我不应该先在xml中设置背景,然后在JavaOnCreate中设置背景,然后在onResume中回收并重新设置背景?另外,我也在研究weakreference,但发现自己被它搞糊涂了。。。有谁能给我一个关于weakreference的好解释吗

我感谢所有的答案

干杯

Jake

在程序执行过程中,如果没有软引用或强引用绑定到弱引用,那么它将首先被垃圾收集。因此,如果内存相当低,或者当垃圾收集器认为合适时,弱引用被垃圾收集,这就是为什么我在代码中包含else语句来显示这种情况的发生。
资料来源:

当你做了一个弱引用时,你告诉GC这个家伙占用的内存需要先被释放。通过调用
System.gc()

关于这一点,还有另一个答案:

维基百科有一个更简单的例子:

在您的例子中,假设您正在加载一个相当大的高清图像作为背景。然后,您需要将更多的数据加载到内存中,等等,这会导致OOM。您可以做的是在
onStop()
中释放此GD映像持有的内存,然后在
onResume()
中加载它。

但是,我认为你还应该研究应用程序中其他可以作为弱引用的内容。

请尝试我的回答,然后再回答一个类似的问题:好的,我现在对弱引用有了更多的了解。但是,如何加载当前用作某些按钮和布局背景的图像?我应该不在xml中引用它们,然后在java中设置背景吗?我理解onStop()和onResume()的理由,但是我不知道它到底是如何正确实现的。这里有一个非常详细的答案:那么你的意思是我不应该将XML视图的背景设置为任何东西。。。我应该像链接中所说的那样引用它们,然后使用Java设置它们?是的。需要时动态加载,不需要时清除