它们是此stackoverflow问题中提到的各种方法:How can I determine if my android app has memory leak?
如果我们依赖工具,StrictMode是否适合检测android中的内存泄漏? StrictMode
public void onCreate() {
if (DEVELOPER_MODE) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
}
super.onCreate();
}
答案 0 :(得分:0)
StrictMode文档没有提及有关内存的任何内容,因此它可能没有。该文档描述了针对磁盘读/写,网络访问等的一些(非绝对)保护。提到的唯一内存是闪存,它与RAMemory不同。
此外,自动检测内存泄漏是一个难题。一个对象挂起,因为该对象具有从GC Root开始的指向自身的路径(例如:从线程堆栈开始的指针)。本文很好地解决了这个问题(http://www.w3resource.com/java-tutorial/garbage-collection-in-java.php)。垃圾收集器不知道沿着该路径的边缘是否可以安全移除。这就是你进来的地方。你引入了应用程序应该如何运行的知识,并找到不应该存在的指针/边缘。
诊断内存泄漏的最佳选择是使用有关如何诊断内存泄漏的现有文章,如How can I determine if my android app has memory leak?。您可以使用许多其他免费工具,如visualvm和jhat。祝你好运!