ANR 输入调度超时(等待,因为 window 没有焦点,但最终可能有一个焦点应用程序)
ANR Input dispatching timed out (Waiting because no window has focus but there is a focused application that may eventually)
我的应用程序(Xperia Z1 Compact,Android 5.1)的用户在设置我的应用程序时遇到崩溃。工作流程如下:
LaunchActivity 是启动意图 (noHistory=true, singleTask)。它检查这是否是应用程序的第一次启动。这是第一次启动,所以它启动了 BootActivity (noHistory=true, singleTask)。 BootActivity 显示 3 秒的动画,然后打开 AddGoogleNewsActivity (singleTask)。这是打开 AddGoogleNewsActivity 的代码:
在 onCreate 中:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
endSplash();
}
}, 3000);
private void endSplash() {
YoYo.with(Techniques.FadeOut)
.duration(1000)
.interpolate(new AccelerateDecelerateInterpolator())
.withListener(new com.nineoldandroids.animation.Animator.AnimatorListener() {
@Override
public void onAnimationStart(com.nineoldandroids.animation.Animator animation) {
}
@Override
public void onAnimationEnd(com.nineoldandroids.animation.Animator animation) {
}
@Override
public void onAnimationCancel(com.nineoldandroids.animation.Animator animation) {
}
@Override
public void onAnimationRepeat(com.nineoldandroids.animation.Animator animation) {
}
})
.playOn(logo);
YoYo.with(Techniques.FadeOut)
.duration(1000)
.interpolate(new AccelerateDecelerateInterpolator())
.playOn(title2_txt);
YoYo.with(Techniques.FadeOut)
.duration(1000)
.interpolate(new AccelerateDecelerateInterpolator())
.playOn(title_txt);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (intent.equals("start")) {
startActivity(new Intent(BootActivity.this, AddGoogleNewsActivity.class));
} else if (intent.equals("complete")) {
Intent goToBoot = new Intent(BootActivity.this, HomeActivity.class);
goToBoot.putExtra("intent", "setupdone");
startActivity(goToBoot);
}
}
}, 1000);
}
在 AddGoogleNewsActivity 中,应用收到 ANR:
ANR 输入调度超时(等待,因为 window 没有焦点,但有一个焦点应用程序可能最终在完成启动时添加 window。)
有人知道我该如何解决这个问题吗?
非常感谢!
2017 年 5 月 30 日编辑:真正的解决方案是那些设备没有可用的文本到语音服务,我需要完全禁用对它的访问以阻止这些崩溃。
我有同样的问题,它只是在某些时候发生,而不是一直发生。
我想如果ActivityA在oncreate方法中跳转到ActivityB,可能happen.But我没有证据
我遇到了同样的问题。
我将延迟时间从 1000 毫秒增加到 2000 毫秒以开始新的 activity。
之后,这个ANR就消失了。
我的应用程序(Xperia Z1 Compact,Android 5.1)的用户在设置我的应用程序时遇到崩溃。工作流程如下:
LaunchActivity 是启动意图 (noHistory=true, singleTask)。它检查这是否是应用程序的第一次启动。这是第一次启动,所以它启动了 BootActivity (noHistory=true, singleTask)。 BootActivity 显示 3 秒的动画,然后打开 AddGoogleNewsActivity (singleTask)。这是打开 AddGoogleNewsActivity 的代码:
在 onCreate 中:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
endSplash();
}
}, 3000);
private void endSplash() {
YoYo.with(Techniques.FadeOut)
.duration(1000)
.interpolate(new AccelerateDecelerateInterpolator())
.withListener(new com.nineoldandroids.animation.Animator.AnimatorListener() {
@Override
public void onAnimationStart(com.nineoldandroids.animation.Animator animation) {
}
@Override
public void onAnimationEnd(com.nineoldandroids.animation.Animator animation) {
}
@Override
public void onAnimationCancel(com.nineoldandroids.animation.Animator animation) {
}
@Override
public void onAnimationRepeat(com.nineoldandroids.animation.Animator animation) {
}
})
.playOn(logo);
YoYo.with(Techniques.FadeOut)
.duration(1000)
.interpolate(new AccelerateDecelerateInterpolator())
.playOn(title2_txt);
YoYo.with(Techniques.FadeOut)
.duration(1000)
.interpolate(new AccelerateDecelerateInterpolator())
.playOn(title_txt);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (intent.equals("start")) {
startActivity(new Intent(BootActivity.this, AddGoogleNewsActivity.class));
} else if (intent.equals("complete")) {
Intent goToBoot = new Intent(BootActivity.this, HomeActivity.class);
goToBoot.putExtra("intent", "setupdone");
startActivity(goToBoot);
}
}
}, 1000);
}
在 AddGoogleNewsActivity 中,应用收到 ANR: ANR 输入调度超时(等待,因为 window 没有焦点,但有一个焦点应用程序可能最终在完成启动时添加 window。)
有人知道我该如何解决这个问题吗?
非常感谢!
2017 年 5 月 30 日编辑:真正的解决方案是那些设备没有可用的文本到语音服务,我需要完全禁用对它的访问以阻止这些崩溃。
我有同样的问题,它只是在某些时候发生,而不是一直发生。
我想如果ActivityA在oncreate方法中跳转到ActivityB,可能happen.But我没有证据
我遇到了同样的问题。 我将延迟时间从 1000 毫秒增加到 2000 毫秒以开始新的 activity。 之后,这个ANR就消失了。