编辑:这是在AsyncTask中运行的,我应该提到这一点。
我在这个代码块上收到了很多ANR:
URL url = new URL(sURL);
URLConnection connect = url.openConnection();
connect.setConnectTimeout(R.integer.timeoutLengthWithACapitalT);
connect.setReadTimeout(R.integer.timeoutLengthWithACapitalT);
BufferedReader in = new BufferedReader(new InputStreamReader(connect.getInputStream())); //Problem Line
R.integer.timeoutLengthWithACapitalT是1000
我不知道造成这种情况的原因,我相信它应该超时。但是,我得到了ANR的堆栈跟踪。
答案 0 :(得分:0)
您应该在主线程中运行网络呼叫。我更喜欢使用AsyncTask进行所有网络调用。您可以使用以下代码段
private class MyAsyncTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
//your main network call code
return result; //this return will invoke onProgressCompleted
}
protected void onPreExecute() {
//network call in progress, you can show a loaded here if you want
}
protected void onPostExecute(Long result) {
//Once network call is completed
}
}
您还可以查看Android文档以获取更多详细信息 https://developer.android.com/reference/android/os/AsyncTask.html