- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序中的多个 Activity
在 ListView
中显示图像,其中 ListView
的每一行都包含一个 ImageView
.
这方面的一个示例是用户搜索、获取结果并显示每个结果的图片的搜索屏幕。
我正在尝试权衡实现全局 LruCache
与让每个 Activity
包含其自己的本地 LruCache
的成本/ yield 。
这是我的两个主要问题。两者都围绕我的应用程序非常大这一事实展开,这意味着有相当多的屏幕显示这些图像。此外,我的应用程序具有流行的侧边菜单导航方式。因此,我可以打开菜单,点击 Activity B
,打开菜单,点击 Activity A
,打开菜单...等等,然后创建一个 ABABABABABABABAB 的 Activity
堆栈无限期。
全局
使用来自全局 LruCache
的 Bitmap
的 Activity
和 ImageView
不会包含对这些的引用位图
?假设用户通过单击某个 Button
离开此 Activity
。该 Activity
现在位于 Activity
堆栈中,并且仍然保留对那些 Bitmaps
的引用。如果 LruCache
弹出一个 Bitmap
,那么当 ImageView
在某些 中时,那个
持有对它的引用?Bitmap
真的可以回收吗堆栈上的 Activity
我之前创建了自己的自定义缓存。如果我在 Bitmap
上调用了 recycle()
,然后用户点击后退按钮返回到堆栈上的某个 Activity
,其中包含ImageView
设置为那个 Bitmap
,应用程序会崩溃。这就是为什么我相信堆栈上 Activity
上的 ImageView
仍然包含对 Bitmap
的引用。
本地
正如我之前提到的。我的应用程序非常大,侧边菜单导航样式允许用户创建相当大的 Activity
堆栈。这会创建很多 LruCache
。而且,由于您必须在初始化时声明 LruCache
的大小,因此似乎没有任何选择大小的好方法。
想法?有什么建议吗?
此时我觉得我要做global,但是我不知道如何解决Activity
栈引用问题。我无法想象这不是许多应用程序都没有遇到过的问题。我不知道为什么我找不到相关信息。
最佳答案
I'm trying to weigh the cost/benefits of implementing a global LruCache vs having each Activity contain its own local LruCache.
全局 LruCache 是前进的方式,因为在不同的 Activity 实例中可能会引用同一组位图。 LruCache 可以定义为 Application 的一部分.如果 Activity 堆栈可以托管同一 Activity 的多个实例(如 ABABABAB..),那么在该 Activity 中本地创建 LruCache 将不是一个好主意。很快就会出现内存不足的情况,因为每个 Activity 实例中的 LruCache 都会保留 Dalvik VM 中定义的内存量。假设,应用程序内存为 32Mb,您将 LruCache 大小确定为 4Mb,即 1/8。现在当我们创建将近7个Activity A的实例时,那么内存消耗将达到7*4=28Mb,这本身就可能触发OOM。
Won't Activitys with ImageViews using Bitmaps from a global LruCache contain references to these Bitmaps?
是的,ImageView 也会对位图有强引用。如果在 LruCache 中维护引用,那么此时引用计数将为 2。
If the LruCache pops a Bitmap off, can that Bitmap really be reclaimed when an ImageView in some Activity on the stack holds a reference to it?
不能回收位图内存,因为仍然有一些 ImageView 对它有强引用。
At this point I think I have to do global, but I don't know how to solve the Activity stack reference problem.
LruCache 主要作用是持有对使用频率较高的位图的强引用。因此,如果任何 ImageView 都没有强引用,位图就不会被垃圾回收。
另外请记住,对于Android 2.3.3及以下版本,您需要实现引用计数机制,以便回收位图。
关于android - 实现全局 LruCache 与许多本地 LruCache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25628734/
我的应用程序中有一个 settings.php 页面,它使用 $GLOBALS 来存储网络应用程序中使用的配置。 例如,他是我使用的一个示例设置变量: $GLOBALS["new_login_page
我正在尝试编译我们在 OS 类上获得的简单操作系统代码。它在 Ubuntu 下运行良好,但我想在 OS X 上编译它。我得到的错误是: [compiling] arch/i386/arch/start
我知道distcp无法使用通配符。 但是,我将需要在更改的目录上安排distcp。 (即,仅在星期一等“星期五”目录中复制数据),还从指定目录下的所有项目中复制数据。 是否有某种设计模式可用于编写此类
是否可以在config.groovy中全局定义资源格式(json,xml)的优先级,而不是在每个Resource上指定?例如,不要在@Resource Annotation的参数中指定它,例如: @R
是否有一些简单的方法来获取大对象图的所有关联,而不必“左连接获取”所有关联?我不能只告诉 Hibernate 默认获取 eager 关联吗? 最佳答案 即使有可能有一个全局 lazy=false(谷歌
我正在尝试实现一个全局加载对话框...我想调用一些静态函数来显示对话框和一些静态函数来关闭它。与此同时,我正在主线程或子线程中做一些工作...... 我尝试了以下操作,但对话框没有更新...最后一次,
当我偶然发现 this question 时,我正在阅读更改占位符文本。 无论如何,我回去学习了占位符。一个 SO 的回答大致如下: Be careful when designing your pl
例如,如果我有这样的文字: "hello800 more text 1234 and 567" 它应该匹配 1234 和 567,而不是 800(因为它遵循 hello 的 o,这不是一个数字)。 这
我一直在尝试寻找一种无需使用 SMS 验证系统即可验证电话号码(Android 和 iPhone)的方法。原因纯粹是围绕成本。我想要一个免费的解决方案。 我可以安全地假设 Android 操作系统会向
解决此类问题的规范 C++ 设计模式是什么? 我有一些共享多个类的多线程服务器。我需要为大多数类提供各种运行时参数(例如服务器名称、日志记录级别)。 在下面的伪 C++ 代码中,我使用了一个日志记录类
这个问题在这里已经有了答案: Using global variables in a function (25 个答案) 关闭 9 年前。 我是 python 的新手,所以可能有一个简单的答案,但我
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Does C++ call destructors for global and class static
我正在尝试使用 Objective-C 中的 ArrayList 的等价物。我知道我必须使用 NSMutableArray。我想要一个字符串列表 (NSString)。关键是我的列表应该可以从我类(c
今天刚开始学习 Android 开发,我找不到任何关于如何定义 Helper 类或将全局加载的函数集合的信息,我会能够在我创建的任何 Activity 中使用它们。 我的计划是创建(至少目前)2 个几
为什么这段代码有效: var = 0 def func(num): print num var = 1 if num != 0: func(num-1) fun
$GLOBALS["items"] = array('one', 'two', 'three', 'four', 'five' ,'six', 'seven'); $alter = &$GLOBALS
我想知道如何实现一个可以在任何地方使用您自己的设置的全局记录器: 我目前有一个自定义记录器类: class customLogger(logging.Logger): ... 该类位于一个单独的
我需要使用 React 测试库和 Jest 在我的测试中模拟不同的窗口大小。 目前我必须在每个测试文件中包含这个beforeAll: import matchMediaPolyfill from 'm
每次我遇到单例模式或任何静态类(即(几乎)只有静态成员的类)的实现时,我想知道这是否实际上不是一种黑客行为,因此只是为了设计而严重滥用类和实例的原则单个对象,而不是设计类和创建单个实例。对我来说,看起
这个问题在这里已经有了答案: Help understanding global flag in perl (2 个回答) 7年前关闭。 my $test = "There was once an\n
我是一名优秀的程序员,十分优秀!