我只想知道是否有任何方法通过触发任何事件函数或至少捕获它来获取ANR通知。尽管在单独的线程中运行长进程,但仍有可能存在ANR.so所有我想要的当应用程序检测到ANR时,它必须自动处理某些功能。请帮助我如何实现此目的。谢谢。在应用程序中全局捕获ANR
1
A
回答
1
您可以使用监听日志(使用线程)的服务(最好是前台服务),并且如果存在指示ANR的日志,请处理它。
这里是导致ANR一个应用程序的一个小样本:
...
findViewById(R.id.button).setOnClickListener(new OnClickListener()
{
@Override
public void onClick(final View v)
{
try
{
Thread.sleep(10000);
}
catch(final InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
...
下面是我从logcat中得到了时,我得到了ANR日志:
08-03 13:02:37.746: E/ActivityManager(158): ANR in com.example.anr (com.example.anr/.MainActivity)
08-03 13:02:37.746: E/ActivityManager(158): Reason: keyDispatchingTimedOut
08-03 13:02:37.746: E/ActivityManager(158): Load: 6.19/2.37/0.86
08-03 13:02:37.746: E/ActivityManager(158): CPU usage from 5598ms to 0ms ago:
08-03 13:02:37.746: E/ActivityManager(158): 2.6% 158/system_server: 2.5% user + 0.1% kernel/faults: 86 minor
08-03 13:02:37.746: E/ActivityManager(158): 0.5% 298/com.android.phone: 0.3% user + 0.1% kernel/faults: 15 minor
08-03 13:02:37.746: E/ActivityManager(158): 0% 35/rild: 0% user + 0% kernel
08-03 13:02:37.746: E/ActivityManager(158): 4.6% TOTAL: 3.9% user + 0.6% kernel
08-03 13:02:37.746: E/ActivityManager(158): CPU usage from 2029ms to 2654ms later:
08-03 13:02:37.746: E/ActivityManager(158): 11% 158/system_server: 4.8% user + 6.4% kernel/faults: 2 minor
08-03 13:02:37.746: E/ActivityManager(158): 11% 192/InputDispatcher: 4.8% user + 6.4% kernel
08-03 13:02:37.746: E/ActivityManager(158): 1.6% 163/Compiler: 1.6% user + 0% kernel
08-03 13:02:37.746: E/ActivityManager(158): 1.6% 193/InputReader: 0% user + 1.6% kernel
08-03 13:02:37.746: E/ActivityManager(158): 18% TOTAL: 9.3% user + 9.3% kernel
所以,是的,我想这是可能的。
+1
由于你不能读取日志来自其他进程或操作系统。此外,阅读日志不是Android SDK的一部分。 – CommonsWare 2012-08-03 13:24:59
+0
correct.since我没有JB,我无法看到是否有任何解决方法。他们在google IO中表示,即使现在它不能工作,也可以阅读你自己的应用程序的日志,所以我不知道这样的事情是否被认为是在应用程序内部(我猜这不是)无论如何,这个解决方案从一开始就是一种解决方法。它应该适用于目前约99%的设备。 – 2012-08-03 13:59:19
相关问题
- 1. 在C#Windows应用程序中捕获全局触摸事件
- 2. C#应用程序中的全局键盘捕获
- 3. ANR应用程序
- 4. VC++应用程序中的全局未捕获异常处理程序?
- 5. 应用MediaRecorder程序ANR
- 6. ANR在应用程序重启期间
- 7. 在Web应用程序中捕获HTML
- 8. 两个“全局”/应用程序布局
- 9. 捕捉全局异常并防止应用程序崩溃
- 10. WPF应用程序中的全局KeyHook
- 11. 如何捕获并记录WebAPI 2应用程序的全局异常/错误?
- 12. 在Phonegap应用程序上捕获应用程序退出?
- 13. 进入ANR模式的应用程序
- 14. ANR调试应用程序时崩溃
- 15. 全局异常捕获只能在调试的WinForms应用
- 16. 捕获在Windows应用程序
- 17. 在反应应用程序中使用全局配置对象
- 18. 布局在某些设备上使用ANR崩溃应用程序
- 19. Task.Factory.Start的全局未捕获异常处理程序新任务
- 20. 使用java.awt.Toolkit捕获全局按键
- 21. VB.net中的全局热键捕获
- 22. 如何在Windows 8应用程序中创建全局应用程序栏?
- 23. 应用程序和小应用程序的全局值
- 24. Java Web应用程序:全局应用程序范围对象
- 25. 在反应应用程序中共享全局/单例数据
- 26. 在MVC应用程序的JS文件中使用全局常量引发的未捕获TypeError
- 27. 应用程序全局变量
- 28. 全局Web应用程序参数
- 29. 全局钩子DLL的应用程序
- 30. 访问全局应用程序设置
“尽管在单独的线程中运行了很长的进程,但仍有ANR的可能性” - 然后修复应用程序中的错误。 – CommonsWare 2012-08-03 13:25:29
我认为[我对这个问题的回答](http://stackoverflow.com/a/17883242/1269640)可以帮助你 – 2013-07-26 13:57:56