Android ANR - 输入调度超时

时间:2017-08-21 13:04:59

标签: android android-anr-dialog

我已经开始从许多代码位置收到几个奇怪的ANR报告(应用程序无响应)。

  

输入调度超时(等待,因为没有窗口有焦点但是   有一个专注的应用程序,最终可能会添加一个窗口   它完成了。)

这个ANR总是在我的代码中的不同位置弹出,并且它们不遵循逻辑模式。我在一个月前开始收到这些错误。

ANR报告及其各自的代码行有一些例子:

at android.support.v7.app.AppCompatActivity.setContentView (AppCompatActivity.java:139)
at br.com.xxx.xxx.activities.MainActivity.onCreate (MainActivity.java:71)
at android.app.Activity.performCreate (Activity.java:6245)

MainActivity.java:71: setContentView(R.layout.activity_main);

另一个例子:

at android.support.v4.app.BackStackRecord.replace (BackStackRecord.java:421)
at br.com.xxx.xxx.activities.MainActivity.openFragment (MainActivity.java:146)
at br.com.xxx.xxx.activities.MainActivity.openMenu (MainActivity.java:121)

                       currentFragment = new CardsFragment();
MainActivity.java:146: openFragment(currentFragment);

那个人甚至没有参考代码:

  at java.lang.Object.wait! (Native method)
- waiting on <0x0a7b02dc> (a java.lang.Object)
  at java.lang.Thread.parkFor$ (Thread.java:1220)
- locked <0x0a7b02dc> (a java.lang.Object)
  at sun.misc.Unsafe.park (Unsafe.java:299)
  at java.util.concurrent.locks.LockSupport.park (LockSupport.java:158)
  at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt (AbstractQueuedSynchronizer.java:810)
  at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly (AbstractQueuedSynchronizer.java:971)
  at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly (AbstractQueuedSynchronizer.java:1278)
  at java.util.concurrent.CountDownLatch.await (CountDownLatch.java:203)
  at android.app.SharedPreferencesImpl$EditorImpl$1.run (SharedPreferencesImpl.java:366)
  at android.app.QueuedWork.waitToFinish (QueuedWork.java:88)
  at android.app.ActivityThread.handleStopService (ActivityThread.java:3065)
  at android.app.ActivityThread.-wrap21 (ActivityThread.java)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1457)
  at android.os.Handler.dispatchMessage (Handler.java:102)
  at android.os.Looper.loop (Looper.java:148)
  at android.app.ActivityThread.main (ActivityThread.java:5443)
  at java.lang.reflect.Method.invoke! (Native method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:728)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:618)

我的问题是:有一堆ANR报告相同的错误,但在不同的地方和不同的应用程序。我该如何解决这个错误?或者我必须将所有这些错误视为不同的隔离错误?

我知道这个主题已经存在问题,但还没有人给出有用的答案。至少没有一个可以帮助我。

修改:我收到许多设备和Android版本的错误:

  • 摩托罗拉Moto G(第二代)(titan_umtsds),1024MB RAM,Android 6.0
  • 三星Galaxy Win2(coreprimeltedtv),1024MB RAM,Android 5.0
  • 摩托罗拉Moto G(第一代)(falcon_umts),2048MB RAM,Android 7.1

很遗憾,Google Play控制台并未提供更多信息。

1 个答案:

答案 0 :(得分:1)

您的问题发生在Handler中,这意味着它发生在主线程上。您应该在IO线程上调用所有计费处理器方法,以避免阻塞您的主线程。

简而言之,有太多可能的方法可以做到这一点。 AsyncTasks,RxJava,香草线程,Android服务等。