我有一个从服务器发送和接收数据的应用程序。这些请求中的每一个都是通过创建新线程来防止锁定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,但它仍然会突然出现一些用户。
有什么看起来与众不同或我做错了吗?我应该以不同的方式处理我的线程吗?