Android解析数据的速度非常慢
我正在尝试制作一个解析RSS提要的应用程序。我运行我的应用程序,但是数据的获取非常慢,尽管源链接()非常快 我需要我的应用程序快速响应 我的应用程序代码:Android解析数据的速度非常慢,android,rss-reader,Android,Rss Reader,我正在尝试制作一个解析RSS提要的应用程序。我运行我的应用程序,但是数据的获取非常慢,尽管源链接()非常快 我需要我的应用程序快速响应 我的应用程序代码: package com.sta.map; import java.util.ArrayList; import java.util.HashMap; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Element; import
package com.sta.map;
import java.util.ArrayList;
import java.util.HashMap;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Element;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.TextView;
public class POSTS extends Activity {
static final String KEY_ARTIST = "artist";
static final String KEY_THUMB_URL = "thumb_url";
ListView list;
WbAdapter adapter;
static String URL = "http://api.androidhive.info/music/music.xml";
ProgressDialog pDialog;
ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.posts);
new ParseXMLTask().execute();
}
class ParseXMLTask extends AsyncTask<String, String, String> {
protected void onPreExecute() {
// Showing progress dialog before sending http request
pDialog = new ProgressDialog(POSTS.this);
pDialog.setMessage("Please wait..");
pDialog.setIndeterminate(true);
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected String doInBackground(String... unused) {
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(url); // getting XML from URL
return xml;
}
@Override
protected void onPostExecute(String result) {
pDialog.dismiss();
XMLParser parser = new XMLParser();
Document doc = parser.getDomElement(result); // getting DOM element
NodeList nl = doc.getElementsByTagName("song");
// looping through all song nodes <song>
for (int i = 0; i < nl.getLength(); i++) {
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
// adding each child node to HashMap key => value
map.put(KEY_ARTIST, parser.getValue(e, KEY_ARTIST));
map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL));
// adding HashList to ArrayList
songsList.add(map);
}
list=(ListView)findViewById(R.id.list);
adapter= new WbAdapter(POSTS.this, songsList);
list.setAdapter(adapter);
}
}
}
编辑1:在清单中,我发现以下代码:
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />
我删除了android:targetSdkVersion=“16”的这一部分,解析变得非常快
为什么???我发现,在大文件上,XMLParser的性能非常差,并且非常占用内存。特别是如果xml中的一个节点非常大,如编码位图。想想看,它必须一次将整个字符串加载到内存中。我切换到自己解析文件,因为我只寻找一个特定的部分,并使用BufferedInputStream读取数据,以避免内存峰值
这可能不是您的问题,但要知道,对于非常大的文件,XMLParser是不可用的。哪一部分比较慢?网络接入?XML解析?RSS解析?我认为HttpPost=newhttppost(url);为什么不试着对不同部分计时,看看是什么让你慢下来?请检查我的代码,并告诉我,当你使用Traceview精确地确定事情慢下来的地方时,你学到了什么?
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />