- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一段开启了 Android 严格模式、VmPolicy detectAll 和 Penalty Death 的代码。这在应用程序中打开。
所以它可以帮助我检测内存泄漏。我的代码很简单,2 个 Activity (几乎是空白)。 MainActivity 有一个按钮单击以打开 SubActivity。 SubActivity 只有一个 EditText。
代码可以在这里获得https://github.com/elye/issue_edittextleak
如果您运行代码,从 MainActivity 转到 SubActivity,然后返回 MainActivity(使用返回键),然后转到 SubActivity,然后返回...它会崩溃
E/StrictMode: class com.elyeproj.edittextleak.SubActivity; instances=2; limit=1
android.os.StrictMode$InstanceCountViolation: class com.elyeproj.edittextleak.SubActivity; instances=2; limit=1
at android.os.StrictMode.setClassInstanceLimit(StrictMode.java:1)
这是因为它检测到 SubActivity 已泄漏。
为什么SubActivity会泄露,因为它有EditText。移除它会导致它不再泄漏。
这发生在 Samsung S5 Lollipop 5.0 (v21) 上。它还在 KitKat (v19) 上泄漏。它不会发生在 Samsung S7 Marshmallow 和 Nexus 6 (Nougat) 上。
在 Emulated Nexus 5 Lollipop 5.0.2 (v21) 上不会发生这种情况。但是发生在 Emulated Nexus 5 的 v19 上。
我查了很多stackoverflow,都找不到解决办法。您将在 https://medium.com/@elye.project/hell-level-4-unleashed-by-android-strict-mode-dare-you-challenge-it-1dc9048bb4fb#.aiffbdikn 中阅读有关此问题的更多详细信息和我的探索。
那我想要什么?我认为 Lollipop 5.0.2 及更高版本的内存泄漏问题已得到解决。但是对于之前的版本,我如何在拥有 editText 的情况下防止泄漏?
最佳答案
我认为这个问题与编辑文本无关,因为来自严格模式日志 SubActivity;实例=2; limit=1
很明显,您有两个 subActivity 实例。发生这种情况是因为在每次启动 subActivity 时您都在创建它的一个新实例,这个问题可以通过在启动 subActivity 时使用启动模式标志 singleInstance
或 singleTask
来解决。保证只能存在一个 Activity 实例。
编辑 1:
我试过你的代码,发现这个问题在 Emulated Nexus 5 的 v19 上可以重现。我很清楚这个问题与编辑文本无关,因为即使 subActivity 没有与之相关的 View 。正如此 Stack Oveflow 中的回答帖子,正如该链接指出的那样,这可能是严格模式下的错误
If an Activity is started, and exited and restarted very quickly, you can get a StrictMode.InstanceCountViolation.
However this is simply because the garbage collector has not yet finalized the first instance of the Activity, meaning there are temporarily 2 (or more) instances in memory.
Calling System.gc() before startActivity() or startActivityForResult() will stop the StrictMode.InstanceCountViolation
来自安卓DOcs
Don't feel compelled to fix everything that StrictMode finds. In particular, many cases of disk access are often necessary during the normal activity lifecycle. Use StrictMode to find things you did by accident. Network requests on the UI thread are almost always a problem, though.
关于android - EditText 导致 Activity 泄漏。当前的 stackoverflow 答案没有帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38670844/
IntentReceiver 正在泄漏 由于 onDetachedFromWindow 在某些情况下未被调用。 @Override protected void onDetachedFromWind
好吧,我很难追踪这个内存泄漏。运行此脚本时,我没有看到任何内存泄漏,但我的 objectalloc 正在攀升。 Instruments 指向 CGBitmapContextCreateImage >
我编写了一个测试代码来检查如何使用 Instrument(Leaks)。我创建了一个单一 View 应用程序,单击按钮后我加载了一个像这样的新 View ... - (IBAction)btn_clk
我正在使用这个简单的代码并观察单调增加的内存使用量。我正在使用这个小模块将内容转储到磁盘。我观察到它发生在 unicode 字符串上而不是整数上,我做错了什么吗? 当我这样做时: >>> from u
我有以下泄漏的代码。 Instruments 表示,泄漏的是 rssParser 对象。我“刷新”了 XML 提要,它运行了该 block 并且发生了泄漏...... 文件.h @interface
我在我编写的以下代码片段中发现了内存泄漏 NSFileManager *fileManager=[[NSFileManager alloc] init]; fileList=[[fileManager
因此,我正在开发HTML5 / javascript rts游戏。观察一直有几种声音在播放。因此,对我来说,是一段时间后声音听起来像是“崩溃”,并且此浏览器选项卡上的所有声音都停止了工作。我只能通过重
下面是我正在使用的一段代码及其输出。 my $handle; my $enterCount = Devel::Leak::NoteSV($handle); print "$date entry $en
在这篇关于 go-routines 泄漏的帖子之后,https://www.ardanlabs.com/blog/2018/11/goroutine-leaks-the-forgotten-sende
我想知道为什么在执行 ./a.out 后随机得到以下结果。有什么想法我做错了吗?谢谢 http://img710.imageshack.us/img710/8708/trasht.png 最佳答案 正
我正在 Swift 中开发一个应用程序,在呈现捕获我放在一起的二维码的自定义 ViewController 后,我注意到出现了巨大的内存跳跃。 该代码本质上基于以下示例:http://www.appc
下面是我的 javascript 代码片段。它没有按预期运行,请帮我解决这个问题。 function getCurrentLocation() { console.log("insi
我们在生产环境中部署了 3 个代理 Kafka 0.10.1.0。有些应用程序嵌入了 Kafka Producer,它们将应用程序日志发送到某个主题。该主题有 10 个分区,复制因子为 3。 我们观察
我正在使用仪器来检测一些泄漏,但有一些泄漏我无法解决; NSMutableString *textedetails = [[NSMutableString alloc] init];
如果我使用性能工具测试我的代码 - 泄漏,它没有检测到任何泄漏。这是否意味着代码没有泄漏任何内存? 我有一个越狱的 iPhone,我可以监控可用内存。如果有人知道,那就是 SBSettings。我测试
我在从 AddressBook 中获取图像时遇到了很大的问题,下面我粘贴了我的代码。此 imageData 从未被释放,在我的 Allocations Instruments 上它看起来总是在内存中它
- (NSMutableArray *)getArrayValue:(NSArray *)array{ NSMutableArray *valueArray = [NSMutableArra
Instruments 工具说这是一个泄漏,有什么想法吗? 我在 for 循环结束时释放变量对象 在上述方法的开头,这就是我设置变量对象的方式,即自动释放; NSMutableArray *varia
我正在跟踪我的 iOS 应用程序的内存泄漏,我有一个奇怪的泄漏导致我的应用程序崩溃......负责的框架是:CGImageMergeXMPPropsWhithLegacyProps。在某些时候,我的应
我正在尝试使用 NSOperationQueue 在后台线程中执行一个方法,如下所示: NSOperationQueue *queue = [NSOperationQueue new]; NS
我是一名优秀的程序员,十分优秀!