问题标签 [android-profiler]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何减少内存分配?
我正在编写一个安卓应用程序。由于目标,我必须(插入)将我的 10 mb 大小的用户列表缓存到 sqlite db。当用户触发 api 调用时,我将输入流发送到 BufferedReader 并char[] buffer = new char[2048];
用作块,因为如果我逐行读取输入流,则脚本不会继续(我认为这导致我的 10mb 正文是单行并且它太大而无法读取)。当这种情况发生时,我的内存使用量从 10mb 稳定增加到 90mb。代码如下
1_为什么当我从 apicall 红色 10 mb 正文时为什么我的应用程序内存使用量(java)增加了 80mb 而不是 10mb 和解决方案?
在此方法返回字符串结果后,我使用它来初始化 json 对象。然后我使用那个 json 来初始化我的对象实例。在此操作之后,内存使用量减少到 320 mb。
2_如果原因是我主要使用字符串字段,我该如何释放这些字符串字段。我认为即使我用某种方法清除它们,它们也会继续生活。
我尽可能使用 System.gc() ,但它对内存使用没有影响。
android - 如何使用 Android Profiler 在 Android 中查找不需要的引用
我正在努力更好地寻找 Android 中的内存泄漏。
我发现了 Android Profiler 并学习了如何执行堆转储以及如何确定内存中给定对象的实例是否过多。
我已经读过,找到一个不需要的对象仍然存在的根源的方法之一是突出显示它并“查看哪些对象仍然持有对它的引用,并追溯到最初的原因。”
所以......在这个屏幕截图中,您可以看到不希望的情况:我有三个 MainActivity 实例......并且所有三个实例在“深度”列中都有一个数字,表明它们确实是泄漏。
如果有问题的对象是我自己创建的一个类,那么这个过程会更直接,但是由于我们在这里处理的是一个实际的 Activity,当我突出显示这三个中的任何一个时,就会有一个庞大的列表引用它的对象(列表远远超出屏幕截图)。
当然,其中大部分都是正常/良性的参考——我应该如何判断哪些值得研究?
有什么线索?是“ this$0 ”吗?还是保留列中的海量数字?与相关对象匹配的深度数?我只是在猜测这一点。
当然,我不希望自己仔细考虑整个列表,“不……不可能是那个……这是 Android 框架 X、Y 和 Z 的正常部分……”
android - 什么占用了 Android Profiler 中的图形内存?
当我使用 Android 分析器时,我注意到图形占用了大量内存(169 mb),这使得应用程序非常慢,我认为这是由位图引起的,所以我删除了应用程序中的所有位图并再次尝试..
我注意到图形仍然占用 60 - 100 mb 的 RAM,我想知道除了位图之外还有什么会导致内存耗尽?(如果有帮助,我的应用程序会使用谷歌地图)
android - 使用 Android Profiler 优化 Android 性能
我知道 Android Profiler 和 Traceview,但我想知道是否可以准确检查哪一行代码导致我的应用程序的高性能使用。
非常感谢!
android - Android Camera 处理 previewCallback 中的帧数据导致越来越多的本机内存
我使用camera.addCallbackBuffer(data);
重用缓冲区以避免内存不足。我在 previewCallback 中的代码就像
checkFace(data, camera);
camera.addCallbackBuffer(data);
在方法 checkFace 中,只需将数据转换为位图,然后使用 FaceDetector 来检查人脸。而且我在转换数据后尝试使用camera.addCallbackBuffer(data);
,但是Android Studio分析器中显示的本机内存就像
在我的应用程序运行大约 10 分钟后,“本机”从 10MB 增加到 250MB。
当我的应用程序运行大约 4 小时时,它会崩溃并 Logcat 打印:
E/IMemory (17967): 无法映射 BpMemoryHeap (binder=0x11515160), size=462848, fd=70 (Out of memory)
我想可能是因为越来越多的“原生”记忆
代码:
...
那么,我该怎么做才能解决它???
android - Fresco 高内存使用
我们使用此处文档中提到的步骤设置了 Fresco - http://frescolib.org/docs/configure-image-pipeline.html。
根据需要在应用程序 onCreate 中设置一次。来自网络的图像很少,无法匹配大小,因此我们必须使用 setDownsampleEnabled 和 resize 选项。
以下是用于加载图像的代码 -
控制器在 Recyclerview 的 onViewDetachedFromWindow 和 onViewRecycled 方法中设置为 null。
在运行应用程序的几分钟内,使用的内存非常高。
Profiler 内存图看起来并不漂亮。
附上堆转储以供参考。
还检查了 Fresco 的日志。该日志提到多次对同一图像进行下采样。我已经验证了对图像的请求只进行了一次。
附上 Logcat 快照
android - Android Studio Profiler 的能耗
在 Android Studio 3.2 中,有一个Profiler可以让您了解应用程序的能耗。
我们怀疑由于我们的应用程序会减少几个小时的电池续航时间,导致缓慢的能量泄漏。
使用 Profiler,我们可以说当应用程序处于后台并且手机处于睡眠模式(待机)时没有 CPU、内存和网络活动。但是我们可以在图表上注意到大约每 5 秒消耗一次非常轻的能量消耗。
我想知道这种轻微的能量消耗(图表上的紫色)是否正常,或者是否值得担心。
我尝试选择图表的一部分以查看与此能量条相关的事件,但它显示“没有所选范围或过滤器的系统事件”,如下面的打印屏幕所示。
您是否知道这种能量从何而来,是否与我们的应用程序代码实现有关?