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

问题描述 投票:0回答:2

在我的 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 -----
android events timeout focus android-anr-dialog
2个回答
5
投票

此异常的原因是 UI 线程被阻塞,并且您的应用程序超过 5 秒没有响应。

仔细检查从服务器获取数据的代码是否不在主线程上执行。此外,如果您使用广播接收器执行任何可能需要 10 秒的逻辑,也会导致此问题。

还需要检查从服务器获取数据的代码中的异常处理。

您也可以看看以下页面: https://developer.android.com/training/articles/perf-anr.html#anr


0
投票

当我试图让我的前台服务等待一段时间时,我遇到了这个问题。修复方法是使用 android.os.Handler。这将使块内的代码在

delay_in_millis
毫秒后运行,并且不会使整个服务休眠(然后出现另一个错误
App isn't responding
)。

import android.os.Handler;

new Handler().postDelayed(new Runnable() {
    public void run() {
        // code to run after delay
    }
}, delay_in_millis);
© www.soinside.com 2019 - 2024. All rights reserved.