0

我有一个从服务器发送和接收数据的应用程序。这些请求中的每一个都是通过创建一个新线程来发出的,以防止锁定 UI。在我的设备上和测试中,我没有收到任何 ANR,但似乎其他用户会不时遇到它们。

在一个示例中,在 Play 商店中查看我的 ANR 报告表明我从我的登录功能收到了一些 ANR。

当用户输入他们的凭据并按下登录按钮时,onCreate 会调用 login() 函数来检索有关用户的其他信息。该代码包含以下内容:

    new Thread(new Runnable() {
        public void run() {
            UserClient userClient = application.getUserClient();

            final Map<String, Object> user = userClient.getUser();

          runOnUiThread(new Runnable() {
            public void run() {
                Login.this.hideLoadingThrobber();

                if (user != null) {
                    startActivity(new Intent(Login.this, AccountOverview.class));
                    finish();
                } else {
                    showLoginFailed();
                }
            }
          });
        }
    }).start();

userClient.getUser() 看起来像这样:

public Map<String, Object> getUser() {
    RestClient client = getRestClient();
    String result = client.queryRESTurl("/user/");
    if (result != null && !result.equals("login failed")) {
        return JsonParser.toMap(result);
    } else {
        return null;
    }
}

据我所知,这是为了防止任何类型的 ANR 而正确设置的,但对于某些用户,它仍然会不时弹出。

有什么看起来不寻常或我做错了吗?我应该以不同的方式处理我的线程吗?

4

0 回答 0