为什么我不能用这段代码强制Android ANR?没有日志消息或弹出.该应用程序只是懒洋洋地推出.
[UPDATE]
我甚至不能在View.setOnClickListener或BroadcastReceiver.onReceive上睡觉!
有诀窍吗?
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
Log.e("Test", "", e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用三星GT-6200L和Android 3.2
我需要从Activity和BroadCastReceiver重现Application Not Responding(ANR)对话框.我试图创建一个简单的按钮点击:
public void makeANRClick(View view){
while (true);
}
Run Code Online (Sandbox Code Playgroud)
有了这段代码,我在android 2.3.7的模拟器上重现了ANR.相同的代码不适用于具有最新Android版本(4+)的真实设备.
另一项尝试如下:
public void onMakeANRClick(View view){
try {
Thread.sleep(15000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
这也没有用.有什么建议?
最近,当从我的活动代码调用时,我开始收到 ANR 错误getExternalFilesDir(null)。这段代码之前可以工作,但是现在,也许在更新 gradle 构建工具之后,出现了这样的问题。清理项目和重建没有帮助。有人也遇到这个问题吗?提前致谢。
代码示例。应用程序冻结并在第一行出现 ANR 对话框File folder = getExternalFilesDir(null);
// check if downloaded files take less memory than EPISODES_SIZE_WARNING_LIMIT_MB
private void checkFolderSize() {
File folder = getExternalFilesDir(null);
if (folder != null) {
long length = 0;
for (File file : folder.listFiles())
if (file.isFile())
length += file.length();
double sizeMb = ((double)length) / 1024 / 1024;
if (sizeMb > EPISODES_SIZE_WARNING_LIMIT_MB) {
new AlertDialog.Builder(this)
.setTitle(R.string.dialog_warning)
.setMessage(getString(R.string.warning_used_memory, EPISODES_SIZE_WARNING_LIMIT_MB))
.setNeutralButton(R.string.dialog_ok, null)
.show();
}
}
}
Run Code Online (Sandbox Code Playgroud) 输入分派超时(等待发送非键事件,因为触摸的窗口尚未完成对某些输入事件的处理,这些事件在500.0ms之前已传递给它。
有时同时单击多个按钮时会出现此错误。长时间运行的操作在这里完成。
sendBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
runOnUiThread(new Runnable() {
@Override
public void run() {
sendChatTextContent(messageText, null, "", "");
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
在sendChatTextContent()方法上,我检查了飞机模式状态,互联网连接,文本的AES_Encryption,并使用Service将数据发送到SignalR AWS服务器。以前没有问题,但是在将支持库更新为androidx之后有时会发生此问题。我该如何处理?
我在尝试打开 2 个单独的活动时发生了 ANR。非常零星,只有某些用户无法在我们的任何测试硬件上进行复制。两份报告都有一系列不起眼的线程,我们的两个后台线程正确地等待它们的通知程序锁。主线程在这两种情况下都这样做:
"main" prio=5 tid=1 NATIVE
| group="main" sCount=1 dsCount=0 obj=0x41790710 self=0x41775c90
| sysTid=347 nice=0 sched=0/0 cgrp=apps handle=1074003964
| state=S schedstat=( 0 0 0 ) utm=10817 stm=2453 core=0
#00 pc 0001b6e4 /system/lib/libc.so (__ioctl+8)
#01 pc 0002be67 /system/lib/libc.so (ioctl+14)
#02 pc 0001b929 /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+140)
#03 pc 0001c0c7 /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+154)
#04 pc 00001451 /system/lib/libsystem_server.so (system_init+384)
#05 pc 00020b4c /system/lib/libdvm.so (dvmPlatformInvoke+112)
#06 pc 000516ab /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
#07 pc 00029fe0 /system/lib/libdvm.so
#08 pc 0002e9a4 /system/lib/libdvm.so (dvmInterpret(Thread*, …Run Code Online (Sandbox Code Playgroud) 我得到一个anr,从anr跟踪来看,主线程是正常的
"main" prio=5 tid=1 Native
| group="main" sCount=1 dsCount=0 obj=0x7507a710 self=0x7fae13ba00
| sysTid=12991 nice=0 cgrp=default sched=0/0 handle=0x7fb1746fe8
| state=S schedstat=( 523201194870 224815705819 1167733 ) utm=35431 stm=16889 core=2 HZ=100
| stack=0x7fc88a6000-0x7fc88a8000 stackSize=8MB
| held mutexes=
kernel: __switch_to+0x7c/0x88
kernel: SyS_epoll_wait+0x2cc/0x384
kernel: SyS_epoll_pwait+0x9c/0x114
kernel: el0_svc_naked+0x20/0x28
native: #00 pc 0000000000068374 /system/lib64/libc.so (__epoll_pwait+8)
native: #01 pc 000000000001f3a4 /system/lib64/libc.so (epoll_pwait+32)
native: #02 pc 000000000001be88 /system/lib64/libutils.so (_ZN7android6Looper9pollInnerEi+144)
native: #03 pc 000000000001c268 /system/lib64/libutils.so (_ZN7android6Looper8pollOnceEiPiS1_PPv+80)
native: #04 pc 00000000000d73a8 /system/lib64/libandroid_runtime.so (_ZN7android18NativeMessageQueue8pollOnceEP7_JNIEnvP8_jobjecti+48)
native: #05 pc 000000000000087c /system/framework/arm64/boot.oat (Java_android_os_MessageQueue_nativePollOnce__JI+144)
at android.os.MessageQueue.nativePollOnce(Native …Run Code Online (Sandbox Code Playgroud) 我得到了一个电话管理器(单卡或多卡设备)的实例,并得到了几个 ANR。我已经设法解决了其中的大部分问题,但这个问题仍然存在:
*意图广播{ act=android.intent.action.SCREEN_OFF flg=0x50000010(有附加功能)
处理这个问题的最佳方法是什么?其中一些只有在打开应用程序并且设备的屏幕打开几个小时时才能重现。这使得调试此类 ANR 变得困难。
报告中有一部分说运行被“锁定”。如何区分这是死锁还是线程正在等待当前操作完成?callbackDataConnectionStateChanged(), refreshTelephonyState() 方法是同步的
"main" tid=1 Native
"main" prio=5 tid=1 Native
| group="main" sCount=1 dsCount=0 obj=0x75bf6598 self=0xb87af970
| sysTid=7874 nice=0 cgrp=default sched=0/0 handle=0xb6f90b4c
| state=S schedstat=( 54620404003 32316399006 164607 ) utm=3795 stm=1667 core=1 HZ=100
| stack=0xbe13c000-0xbe13e000 stackSize=8MB
| held mutexes=
#00 pc 0000000000016978 /system/lib/libc.so (syscall+28)
#01 pc 00000000000f5e43 /system/lib/libart.so (_ZN3art17ConditionVariable4WaitEPNS_6ThreadE+82)
#02 pc 00000000003e4da3 /system/lib/libart.so (_ZN3artL12GoToRunnableEPNS_6ThreadE+502)
#03 pc 00000000000e541d /system/lib/libart.so (_ZN3art12JniMethodEndEjPNS_6ThreadE+8)
#04 pc 0000000000f31ddd /system/framework/arm/boot.oat (Java_android_os_BinderProxy_transactNative__ILandroid_os_Parcel_2Landroid_os_Parcel_2I+152)
at android.os.BinderProxy.transactNative (Native method)
at android.os.BinderProxy.transact (Binder.java:503) …Run Code Online (Sandbox Code Playgroud) performance android synchronized android-anr-dialog android-vitals
我正在使用 Google 计费服务,版本 2.0.3。BillingClient.queryPurchases在 Activity onstart 方法中的 UI 线程中运行该方法,用户有时会遇到这样的Application Not Responding错误:
THREADS:
"main" prio=5 tid=1 TimedWaiting
| group="main" sCount=1 dsCount=0 obj=0x73b04268 self=0xa5905400
| sysTid=8394 nice=-4 cgrp=default sched=0/0 handle=0xa85ae534
| state=S schedstat=( 0 0 0 ) utm=2439 stm=491 core=1 HZ=100
| stack=0xbe437000-0xbe439000 stackSize=8MB
| held mutexes=
at java.lang.Object.wait! (Native method)
- waiting on <0x05482764> (a java.lang.Object)
at java.lang.Thread.parkFor$ (Thread.java:2127)
- locked <0x05482764> (a java.lang.Object)
at sun.misc.Unsafe.park (Unsafe.java:325)
at java.util.concurrent.locks.LockSupport.parkNanos (LockSupport.java:201)
at java.util.concurrent.FutureTask.awaitDone (FutureTask.java:418)
at java.util.concurrent.FutureTask.get (FutureTask.java:176)
at …Run Code Online (Sandbox Code Playgroud) android in-app-billing android-anr-dialog play-billing-library
我需要下载 ANR(应用程序无响应)数据的各个实例的报告。这是为了将此类数据上传到内部系统,该系统将帮助我生成 Google Play 上不可用的报告(ANR 率、个人 ANR 对评级的贡献等)并跟踪 ANR,就像它们是崩溃一样。
我一直在做一些在线研究,我唯一能找到的是每日生成的报告(每月汇总),其中包含 ANR 的原始数量,但没有关于单个实例的任何详细信息。 https://support.google.com/googleplay/android-developer/answer/6135870#export
我不一定需要可下载的 CVS 报告,最好通过 gsutil 或任何其他编码工具访问数据。
我知道我正在寻找的数据存在,因为它在 GooglePlay 控制台上的“应用程序> Android Vitals> ANR 和崩溃”下可见,但是我找不到下载它的方法。
有谁知道是否有办法从 GooglePlay 获取我需要的数据?
如果 Google Play 控制台根本不提供它,您对在运行时检测 ANR 的最佳方法有什么建议吗?然后我可以将其数据作为崩溃上传到我的内部分析系统。
android android-anr-dialog gsutil google-play-developer-api google-play-console
我在 Android 应用程序上调用函数getExternalCacheDir(),这导致某些拥有以下设备(HUAWEI P30 lite、Galaxy A40、Xperia XZ3)的 Android 10 用户出现 ANR。
我的 ANR 的堆栈跟踪如下
The "main" (tid=1) thread is performing disk I/O.
"main" prio=5 tid=1 Native
| group="main" sCount=1 dsCount=0 flags=1 obj=0x72dfcb58 self=0x73e23a5000
| sysTid=12158 nice=0 cgrp=default sched=0/0 handle=0x73e3913ee8
| state=D schedstat=( 378582885 304333911 539 ) utm=23 stm=14 core=7 HZ=100
| stack=0x7fc28de000-0x7fc28e0000 stackSize=8192KB
| held mutexes=
at libcore.io.Linux.access (Native method)
at libcore.io.ForwardingOs.access (ForwardingOs.java:73)
at libcore.io.BlockGuardOs.access (BlockGuardOs.java:71)
at libcore.io.ForwardingOs.access (ForwardingOs.java:73)
at android.app.ActivityThread$AndroidOs.access (ActivityThread.java:7816)
at java.io.UnixFileSystem.checkAccess (UnixFileSystem.java:281)
at java.io.File.exists (File.java:815) …Run Code Online (Sandbox Code Playgroud)