AsyncTask / Handler滞后UI

所以我有这个从网站获取数据的AsyncTask,在它的post执行后,它调用main函数将setText作为main的textview。

这是代码。

@Override protected Void doInBackground(String... arg0) { result = connect(start);//connect to the webpage, start is a URL // TODO Auto-generated method stub return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); Document doc = Jsoup.parse(this.result); Elements stuff = doc.select("td"); MainActivity.GetData(doc);//set the textview } 

我叫处理程序每​​五秒钟执行一次,这是处理程序代码。

 hand = new Handler(); r = new Runnable() { @Override public void run() { dh = new DownloadHelper("http://app2.nea.gov.sg/anti-pollution-radiation-protection/air-pollution/psi/psi-readings-over-the-last-24-hours"); dh.execute("");// TODO Auto-generated method stub hand.postDelayed(this, 10000); } }; hand.post(r); 

会发生什么,当网站加载时,我的用户界面滞后很多,几乎到了冻结的程度。 我不知道造成这种情况的原因是什么,我的UI基于ViewPager和片段。

我没有从片段中运行此代码,它是从我的主要活动的onCreate运行的。

编辑:我编辑了我的onPostExecute看起来像这样

 @Override protected void onPostExecute(Void result) { // TODO Auto-generated method stub super.onPostExecute(result); Elements stuff = doc.select("td"); String[] arr = new String[stuff.size()]; for(int i = 0 ; i < 3 ; i ++) { arr[i] = stuff.get(79 + i).text(); } MainActivity.GetData(arr); MainActivity.dismissLoading(); } 

这是我的GetData

 public static void GetData(String[] s) { edit.setText(s[0]); } 

这是连接()

 public static String connect(String l) { String url = l; HttpURLConnection connect; String result; String result2 = null; BufferedReader br; try { connect = (HttpURLConnection) (new URL(url)).openConnection(); br = new BufferedReader(new InputStreamReader(connect.getInputStream())); while ((result = br.readLine()) != null) { result2 += result; } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.print("ERROR"); } return result2; } 

对于那些实际上偶然发现我的问题并希望得到答案的人,我设法在处理另一个项目时修复它。

基本上,在

  while ((result = br.readLine()) != null) { result2 += result; } 

循环,而不是直接将结果附加到result2,将结果附加到StringBuffer。 然后在循环结束时,将StringBuffer添加回result2。