ANR 输入调度超时 (服务器) 未响应

7
在我的Android应用程序中,我偶尔会遇到一个非常奇怪的崩溃。当我打开应用程序时,在闪屏界面上从服务器获取数据。当应用程序进入主页时,突然整个应用程序关闭并在日志中打印了以下内容:
ANR in com.test (com.test/.activities.SplashActivity)
    PID: 16020
    Reason: Input dispatching timed out (49abf6 com.test/com.test.activities.SplashActivity (server) is not responding. Waited 5004ms for FocusEvent(hasFocus=false))
Parent: com.test/.activities.SplashActivity
    Load: 29.87 / 30.79 / 30.77
    ----- Output from /proc/pressure/memory -----
    some avg10=0.00 avg60=0.00 avg300=0.00 total=3115344
    full avg10=0.00 avg60=0.00 avg300=0.00 total=1338179
    ----- End output from /proc/pressure/memory -----

网络调用和I/O操作等重型操作不应在主线程中进行。使用网络库Retrofit,您可以使用协程。 - Hemantvc
我已经在使用Retrofit了。你能帮我提供一个使用协程的例子吗?@Hemantvc - Amitanshu Gupta
寻找网络调用的简单示例,请访问https://camposha.info/android-examples/android-retrofit-coroutines/#gsc.tab=0 https://github.com/hemantvc/kotlin-retrofit/blob/main/app/src/main/java/org/hariom/kotlin_retrofit/NewsService.kt - Hemantvc
2个回答

5
这个异常的原因是UI线程被阻塞,你的应用程序超过5秒没有响应。
请仔细检查从服务器获取数据的代码是否在主线程上执行。另外,如果你使用广播接收器执行任何可能需要10秒钟的逻辑,也会导致此问题。
还有一点需要检查的是从服务器获取数据的代码中的异常处理。
你也可以参考以下页面: https://developer.android.com/training/articles/perf-anr.html#anr

2
虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅有链接的答案可能会失效。-【来自审查】 - Antoine

-1
我在尝试让我的前台服务等待一段时间时遇到了这个问题。解决方法是使用android.os.Handler。这将使代码块内的代码在delay_in_millis毫秒后运行,而不是让整个服务休眠(然后出现另一个错误应用程序无响应)。
import android.os.Handler;

new Handler().postDelayed(new Runnable() {
    public void run() {
        // code to run after delay
    }
}, delay_in_millis);

这与问题并不真正相关。可能有很多原因会导致ANR,并且提供其他ANR问题的解决方案并不会真正有帮助。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接