我希望在冷启动我的应用程序时获得方法跟踪.
根据CPU Profiler文档,我需要点击上的Record按钮CPU Profiler开始方法跟踪录制,但是我希望从新应用程序进程开始的瞬间在应用程序上进行此录制.
我尝试使用"配置文件"工具栏按钮而不是"运行"按钮运行我的应用程序,但这似乎没有做任何事情,我没有开始录制.
我仍然可以使用旧的方法跟踪使用Debug.startMethodTracing()/ Debug.stopMethodTracing()但是生成与Studio中的旧接口兼容的跟踪文件,我如何对新接口执行相同的操作?
android profiling android-studio android-studio-3.0 android-profiler
我的应用运行完美.
但logcat每次运行我的应用程序时,我都会给出错误:
12-11 20:45:42.539 946-1547/package E/StudioProfiler:Studio Profilers遇到意外错误.考虑报告一个错误,包括下面的logcat输出.
另请参阅:https: //developer.android.com/studio/report-bugs.html#studio-bugs
无法捕获应用程序
这个错误是什么意思?
为什么每次都会发生?
我使用的是Android studio 3.0.1和Gradle 3.0.1.
我正在尝试打开Profiler,但由于无法顺利加载而无法正常工作,我安装了Android Studio 3.3。
探查器卡在加载中

我正在使用这个真实的设备。

在Android Studio Profiler中,有两个位置显示应用程序占用的本机内存大小.
第一个位于水平栏中.Profiler 文档将其描述为:"Native:来自C或C++代码分配的对象的内存".
第二个位置是app heap dump,Native Size列.在文档中描述:"本机大小:此对象类型使用的本机内存总量(以字节为单位)"
在我的例子中,水平条显示30.12 MB,堆转储"本机大小"列显示大约9.28 MB(这是应用程序堆中具有非零本机大小列的所有对象的总和)
为什么这两种尺寸不同?
当用户第一次打开它时,我的应用程序使用75MB内存.
我使用Android Studio中的Android Profiler工具来检查我的Android应用程序的内存使用情况.当主屏幕打开时,应用程序开始使用75MB内存,即使主活动不会创建任何需要太多内存的对象.没有位图或任何大数组等.
40MB来自"代码"部分,19MB来自"本机",我们在此活动中不加载任何本机库.我们在用户打开另一个Activity之后加载.我试图减少内存使用量,我想知道如何从"代码"和"本机"部分减少.
Android Profiler的屏幕截图
我正在尝试使用Android Profiler分析应用程序的内存泄漏。大多数在线教程(以及此站点上的答案)都说要创建堆转储,将其保存为.hprof扩展名,然后在Android Studio中将其打开。我能够做到这一点,但是找不到这些教程引用的“ Analyzer Tasks”窗格,如下面的屏幕截图所示:
我尝试到处寻找。这就是我最后看到的一切:
在哪里可以找到它?
我正在尝试学习如何在我的应用程序中识别和处理内存泄漏.我正在阅读这篇很棒的文章,但我对如何在Android Studio 3.0附带的新"Android Profiler"工具中应用它感到困惑.
我有一个测试应用程序,LeakCanary指出我的应用程序有内存泄漏.
事实上,当我运行探查器并按"dump java heap"时,我可以看到我的MyCollectionActivity有4个实例,当我点击这些实例时,我可以看到详细信息:
但是文章中显示的工具有我在"Android Profiler"中看不到的选项:
我不会深入探讨如何浏览庞大的内存堆.相反,我会将您的注意力转移到下面屏幕截图右上角的Analyzer Tasks.要检测上述示例中引入的内存泄漏,您只需检查检测泄漏活动,然后按播放以使泄露的活动显示在分析结果下.
例如,在新工具中,"分析器任务"和"分析结果"显示泄漏的实例?
如果我们选择泄漏的活动,我们会看到一个参考树,其中可以识别保持活动存活的参考.通过查找深度为零的实例,我们发现位于位置管理器中的实例mListener是我们的活动无法被垃圾收集的原因.
Android Profiler的图像也没有显示参考树,它显示了参考,但它似乎并不是非常有用.
android memory-leaks leakcanary android-studio-3.0 android-profiler
我正在努力更好地寻找 Android 中的内存泄漏。
我发现了 Android Profiler 并学习了如何执行堆转储以及如何确定内存中给定对象的实例是否过多。
我已经读过,找到一个不需要的对象为什么仍然存在的根源的方法之一是突出显示它并“查看哪些对象仍然持有对它的引用并追溯到原始原因。”
所以...在此屏幕截图中,您可以看到不良情况:我有三个 MainActivity 实例...并且所有三个实例在“深度”列中都有一个数字,表明它们确实是泄漏。
如果有问题的对象是我自己创建的一个类,那么这个过程会更直接,但由于我们在这里处理的是一个实际的 Activity,当我突出显示这三个中的任何一个时,有一个大量的列表引用它的对象(列表远远超出屏幕截图)。
当然,其中大部分都是正常/良性参考——我该如何判断哪些值得研究?
有什么线索?是“ this$0 ”吗?还是保留列中的海量数字?与相关对象匹配的深度数字?我只是在猜测这一点。
当然,我不希望自己仔细阅读整个列表,“不......不可能是那个......这是Android Framework X,Y和Z的正常部分......”
android-profiler ×10
android ×8
memory-leaks ×2
debugging ×1
leakcanary ×1
memory ×1
performance ×1
profiling ×1