- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在调试我的应用程序时遇到问题。这是一个数据收集应用程序,每个“作业”大约需要 15 分钟才能完成,其中快速连续完成多个作业是一个正常用例。
我看到的症状如下:
应用程序运行 20 到 90 分钟后,应用程序会显示一条 ANR 消息。我说 20 到 90 之间是因为 ANR 出现的时间是可变的;有时它会在第二份作业中弹出,有时您可以在它弹出之前进入作业 8。
一旦 ANR 出现,我选择“等待”并且对话框被关闭,所以我继续工作......现在每 5 分钟(没有失败!)ANR 不断重新出现。每次我选择“等待”,5 分钟后它又回来了。
我的应用程序中没有按 5 分钟计划触发的 postDelayed 或 AlarmManager 或 TimerTask。 ANR 消息特别指出“SHADE 没有响应”,我的应用名为 SHADE,因此 Android 肯定认为是我的应用导致了问题。
我已按照建议打开 StrictMode,但无济于事,日志在 ANR 发生时附近没有任何违反 StrictMode 的情况。
10-16 17:11:28.390 D/StrictMode(29898): StrictMode policy violation; ~duration=8 ms: android.os.StrictMode$StrictModeDiskWriteViolation: policy=2335 violation=1
10-16 17:14:09.180 D/CrashAnrDetector( 869): Subject: Executing service com.ancoris.shade/.ShadeService
10-16 17:19:22.560 D/CrashAnrDetector( 869): Subject: Executing service com.ancoris.shade/.ShadeService
10-16 17:24:30.010 D/CrashAnrDetector( 869): Subject: Executing service com.ancoris.shade/.ShadeService
10-16 17:29:39.860 D/CrashAnrDetector( 869): Subject: Executing service com.ancoris.shade/.ShadeService
10-16 17:34:46.860 D/CrashAnrDetector( 869): Subject: Executing service com.ancoris.shade/.ShadeService
最后一次违规发生在 ANR 之前。而且我不确定还有什么其他方法可以确定导致 ANR 发生的原因。
我只能在目标设备上重现该问题:三星 Galaxy Tab Active 4 16GB
samsung/rubensltexx/rubenslte:4.4.4/KTU84P/T365XXU1AOA3:user/release-keys
该问题不会出现在 Nexus 7 或 Nexus 9(均运行 5.1.1)上。
更新:好的,所以我使用 DDMS 获取方法配置文件,下面的文件是在大约 10 分钟的时间内捕获的,其中一条 ANR 消息显示在中途,然后在最后再次显示,两次我都按下“等待”消息。
配置文件似乎根本没有提及我的任何 com.ancoris.shade 文件或方法。
https://drive.google.com/file/d/0B8JuL0rVSQEKZUJPYmFIR3dDMkE/view?usp=sharing
更新 2:
我刚刚在其中一个日志 (data/anr/traces.tx) 中看到了这一点。这是正常的还是这是我的问题的原因?如果是,当堆栈跟踪中甚至没有提到我的代码时,我应该如何调试这样的东西?
"main" prio=5 tid=1 SUSPENDED
| group="main" sCount=1 dsCount=0 obj=0x4188cea0 self=0x4177c008
| sysTid=16094 nice=0 sched=0/0 cgrp=apps handle=1074479444
| state=S schedstat=( 0 0 0 ) utm=8522 stm=1572 core=0
at android.widget.TextView.restartMarqueeIfNeeded(TextView.java:~5762)
at android.widget.TextView.onDraw(TextView.java:6474)
at android.view.View.draw(View.java:15551)
at android.view.View.draw(View.java:15436)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15434)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15434)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15554)
at android.widget.FrameLayout.draw(FrameLayout.java:472)
at android.widget.ScrollView.draw(ScrollView.java:2418)
at android.view.View.draw(View.java:15436)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15434)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15434)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15434)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15434)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15434)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15434)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15434)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15554)
at com.android.internal.widget.ActionBarOverlayLayout.draw(ActionBarOverlayLayout.java:471)
at android.view.View.draw(View.java:15436)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15554)
at android.widget.FrameLayout.draw(FrameLayout.java:472)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2623)
at android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:2956)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2869)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2707)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2275)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1297)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6775)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:813)
at android.view.Choreographer.doCallbacks(Choreographer.java:613)
at android.view.Choreographer.doFrame(Choreographer.java:583)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:799)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5756)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at dalvik.system.NativeStart.main(Native Method)
最佳答案
分析是通过在您的应用程序中的某处添加 2 个方法调用来完成的,当您使用分析运行您的应用程序时会生成一个 .trace 文件。
要添加的代码:Debug.startMethodTracing("profileName");
//放在你想开始分析的地方,即。应用程序.onCreate
Debug.stopMethodTracing();
//把它放在你希望跟踪结束的地方
运行您的应用(在分析时它会运行得相当慢。
当应用程序已经超过您停止配置文件的点后,转到终端并运行
adb pull/sdcard/profileName.trace
打开Android Device Monitor(在Studio中:tools->Android->Android Device Monitor)
文件打开轨迹
观察轨迹,单击一行将允许您深入了解子调用,这将有助于识别减速。
关于java - 如何调试 ANR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33175826/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!