我的Android多线程出了什么问题?

时间:2013-02-07 22:38:48

标签: android multithreading runnable android-anr-dialog

我有一个从服务器发送和接收数据的应用程序。这些请求中的每一个都是通过创建新线程来防止锁定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,但它仍然会突然出现一些用户。

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

0 个答案:

没有答案