问题标签 [android-anr-dialog]
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.
android - 运行临时循环的 Android 代码
我想制作一个 android 应用程序,它将完成它的启动,然后运行一个 while 循环,直到用户完成某个任务。然后代码将运行另一个函数以确保用户已正确完成任务。我该怎么办。我尝试将 while 循环放在 onCreate、onStart 和 onResume 中,并且在所有 while 循环中永远运行而不让 GUI 被绘制,因此使任务无法完成(有时我也会收到 ANR 消息)。我应该将 while 循环放在哪里,以便它在该活动开始后立即运行并且不会干扰启动?
谢谢,
安德鲁吉斯17
编辑 3-31-13 2:45 PST:
所以我接受了 RyPope 的建议并创建了一个新线程,并从主线程调用了一个函数,但它不喜欢那样。这是我的所有代码:
` 公共类 MainActivity 扩展 Activity {
} ` 所以当它运行并且视图尝试请求焦点时它崩溃并且我得到以下 logcat 输出:
03-31 14:46:54.803: E/AndroidRuntime(10922): FATAL EXCEPTION: Thread-4197
03-31 14:46:54.803: E/AndroidRuntime(10922): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4062)
03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.ViewRootImpl.invalidateChild(ViewRootImpl.java:730)
03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:779)
03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.ViewGroup.invalidateChild(ViewGroup.java:4005)
03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.View.invalidate(View.java:8605)
03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.View.onFocusChanged(View.java:3884)
03-31 14:46:54.803: E/AndroidRuntime(10922): at android.widget.TextView.onFocusChanged(TextView.java:8281)
03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.View.unFocus(View.java:3814)
03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.ViewGroup.requestChildFocus(ViewGroup.java:530)
03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.View.handleFocusGainInternal(View.java:3706)
03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.View.requestFocus(View.java:5402)
03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.View.requestFocus(View.java:5352)
03-31 14:46:54.803: E/AndroidRuntime(10922): at android.view.View.requestFocus(View.java:5330)
03-31 14:46:54.803: E/AndroidRuntime(10922): at com.thirteenbit.driveSafe.MainActivity.checkInputs(MainActivity.java:51)
03-31 14:46:54.803: E/AndroidRuntime(10922): at com.thirteenbit.driveSafe.MainActivity$1.run(MainActivity.java:26)
03-31 14:46:54.803: E/AndroidRuntime(10922): at java.lang.Thread.run(Thread.java:856)
有人有解决这个困境的办法吗?
android - Galaxy S2 上的 ANR TextureView(GPU 驱动程序问题?)
我在播放 opengl 视频流的 ListView 中有多个 TextureView。该代码在 Nexus 4 (4.2)、Galaxy S3 (4.1) 和 HTC One (4.0.3) 上运行良好。但是,当我在 opengl 线程运行(死锁)时尝试在 S2(SPH-D710VMUB,Virgin Mobile,4.0.4)上滚动列表视图时,会发生 ANR。下面提供了 ANR 跟踪(listview 上的 isHardwareAccelerated() = true)。
另请注意,如果 GLSurfaceView 用于处理相同的 openGL 代码,它可以正常工作,但 Z 顺序会与 ICS 设备的同一窗口中的多个 SurfaceView 混淆。GLTextureView 是通过从 GLSurfaceView 转换为 TextureView 的指令转换的(通过 GLTextureView)
编辑 1:尝试了 GLTextureView 的另一种实现,能够找到确切的行。“eglSwapBuffers(EGLDisplay 显示,EGLSurface 表面);” 由于某种原因会阻塞 S2。
有人注意到:http : //vec.io/posts/a-workaround-to-fix-opengl-eglswapbuffers-freezing glFinish(); 是需要的。任何的想法?
编辑 2:添加 glFinish() 或 eglWaitGL() 没有帮助。:( 怀疑他们无论如何都会立即返回......
编辑 3:使用https://github.com/eaglesakura/gltextureview重现它:参见https://github.com/eaglesakura/gltextureview/issues/1
编辑 4:如果有人想知道,这是我对 GLTextureView 的实现(https://github.com/edisonw/jjm peg/tree/jjmpeg-1.0-dev/jjmpeg-android/src/com/edisonwang/android/player ) 它还包括 FFMpeg 播放内容。
编辑 5:结果可能是 Qualcomm Adreno 200 系列错误:https ://developer.qualcomm.com/forum/qdevnet-forums/mobile-gaming-graphics-optimization-adreno/11525
关于如何调试这个或为什么会发生的任何想法?
android - 可以在 UI Thread 上查询 DownloadManager 吗?
DownloadManager 有一个方法query()。我的问题是是否可以在 UI 线程上调用此方法,或者是否应该只从后台线程调用它?
调用它会导致 ANR 吗?
android - 当 OnClickListener.onClick 中出现 NullPointerException 时 Android 冻结(其他任务无法启动)
我有一个简单的设置:
CrashHandler
- 一个实现的类Thread.UncaughtExceptionHandler
;CrashActivity
- 可以发送用户报告的活动;MainActivity
- 用户应该与之交互的主应用程序。
MainActivity
当线程或任何线程中存在未捕获的异常时,CrashHandler
拦截它并创建一个通知以启动CrashActivity
:
与此同时,Android 显示“应用程序崩溃”消息,用户单击确定,应用程序关闭,然后用户可能会单击notification
. 如果notification
单击 ,则CrashActivity
启动并显示。
这段代码已经在许多不同的情况下工作了很长时间(主线程崩溃, ahandler
崩溃,后台崩溃thread
......)。但是,我最近发现,如果在OnClickListener.onClick
附加button
到MainActivity
. 情况如下:
- 我执行的代码故意抛出
NullPointerException
; CrashHandler
拦截它并创建一个notification
(如图所示);- Android 不显示任何消息(例如,没有“应用程序崩溃”,应该是可见的);
- 被
MainActivity
冻结; - 如果用户单击通知以启动
CrashActivity
,则会显示黑屏并且一切都冻结(未显示所需的活动)。
Logcat
表明启动有超时,甚至在OnCreate
我的代码之前或任何代码之前:
- 如果在单击
notification
I kill the app from之前ADB
,notification
效果很好。 如果在点击之前
/li>notification
我在冻结的应用程序上做了一些点击和手势,几秒钟后我收到一条消息ANR
:如果我单击“是,杀死它”,然后单击
notification
,它可以完美运行。- 如果我在创建通知后添加
System.exit
(-1)CrashHandler
,应用程序会立即退出并且通知工作正常(不幸的是,我无法在生产中使用此解决方案)。
我有两个问题:
- 为什么一个
NullPointer exception
inOnClickListener.onClick
不会导致应用程序崩溃,而是将其与操作系统一起冻结并阻止其他活动启动? - 一般来说,如何避免它,或者至少,如何
CrashActivity
在这些条件下开始?
android - 开发控制台中的 ANR,我的应用程序没有任何痕迹
在我的开发控制台中收到低于 ANR 报告,但它不包含对我的应用程序的任何跟踪,此报告仅收到一次,所以我不太担心,但仍然很好奇导致此 ANR 的原因。任何指针将不胜感激。
android - 如何通过打开新屏幕来修复我的 ANR
当我用按钮打开一个新屏幕时,我的应用程序不会响应并显示 ANR,因为我的应用程序需要很长时间才能加载页面,但我不知道如何解决我的问题。
它适用于较旧的 android 设备,但在我的设备上,该应用程序已停止:'(
如果您需要更多信息,请询问;)
我有一个在最新版本的 android 4.1.1 上运行的 HTC one X 我有一个应用程序,您可以免费收听和下载音乐,我在 1 个布局上有很多视图,超过 80 个视图,这就是问题所在。
我可以给你代码,但我所有的代码都可以正常工作,因为在 android 3.3.7 上,三星 Galaxy mini 上一切正常。问题是我想给我的应用程序更多时间来打开新屏幕,因为我已经读到 5 秒后自动弹出 ANR
日志猫:
xml文件:
.java:
安卓清单:
android - 应用程序空闲时如何处理 ANR 问题
我的 BB10 移植的 android 应用程序,如果闲置 15 分钟,我遇到了这个 ANR 问题,如何处理这种情况。
我无法在我的设备中重现,但我在客户端设备中遇到此问题。我无法重现此问题。
android - 如何将 logcat 文本导入 Android Eclipse
如何在我以编程方式获得的 logcat 工具 Android/Eclipse 中打开 logcat 文本。要将其作为普通文本文件读取,很难阅读。我试图找出 ANR 问题的性质,如果我在 logcat 工具中看到它Android Eclipse的,很容易识别。
android - 解释 ANR 堆栈跟踪
我正在使用 Android 中 PAHO 库中的 MQTT 客户端实现。有时,应用程序在尝试发布消息时锁定(我认为),我无法弄清楚发生了什么。
我也提前为所有长篇文章道歉。我真的不知道重要的部分是什么,所以“剧透”标签>!
无法隐藏细节。
MQTT 客户端在单独的线程中工作,但我正在从 UI 线程调用 mqtt 客户端实例。也许这会导致锁定?我是否应该将客户端定义为线程的实例并在线程中调用将操作转发给客户端的方法?
当应用程序挂起时,一段时间后 ANR 会启动并要求关闭应用程序。当我这样做时,我会从 /data/anr/traces.txt 中为我的进程获得以下堆栈跟踪:
我已经打开了严格模式,并且确实得到了一些痕迹,它会警告磁盘写入,但它们都不是特别长。这些是严格模式跟踪:
编辑:这就是我启用 StrictMode 的方式
编辑 2:以供将来参考并添加问题的原因,我认为我应该在此处放置一些内容以供搜索引擎查找。
原来问题出在我们拥有的基于 Node.JS 的代理 mqttjs 上。这可能只是我们的实现,我还没有测试过 mqttjs 开发人员的示例。在发布了一定数量的消息后,代理停止发布和返回令牌。MQTT 客户端在另一个线程中运行,但由于它是从 UI 线程调用的,因此导致了一些问题。
无论如何,我们改用 Mosquitto,现在一切正常。
android - 如何在没有 ANR 的情况下停止 MediaPlayer 的准备工作?
我正在使用 MediaPlayer 播放在线曲目。但我遇到了问题:
在准备第一首曲目时(在onPrepared()之前prepareAsync()之后),我尝试播放第二首曲目,调用mMediaPlayer.reset()时出现ANR,并更改为调用mMediaPlayer.release()但仍然ANR。那么如何在没有 ANR 的情况下阻止 MediaPlayer 的准备工作?有人帮忙。谢谢!