我如何实现服务
问题描述:
我开发了一个Android项目,我必须解析RSS源。所以我在启动应用程序的时候通过互联网解析这个feed。但我的问题是执行分析时,程序将等待很长时间。所以我想实现这个服务,这个服务会在后台处理。我如何做到这一点?我如何实现服务
我的XML解析代码是:
try
{
feeditemshelper = new FeedItemsHelper();
RootElement root = new RootElement("rss");
Element channelElement = root.getChild("channel");
Element itemElement = channelElement.getChild("item");
itemElement.getChild("title").setEndTextElementListener(new EndTextElementListener()
{
@Override
public void end(String body)
{
LHParser.feeditemshelper.setTitle(body);
}
});
Element descElement = itemElement.getChild("description");
descElement.getChild("image").setEndTextElementListener(
new EndTextElementListener()
{
public void end(String body)
{
LHParser.feeditemshelper.setImage(body);
}
});
descElement.getChild("text").setEndTextElementListener(
new EndTextElementListener()
{
public void end(String body)
{
dflag++;
LHParser.feeditemshelper.setDescription(body,dflag);
}
});
itemElement.getChild("pubDate").setEndTextElementListener(new EndTextElementListener()
{
@Override
public void end(String body)
{
LHParser.feeditemshelper.setPubDate(body);
}
});
try
{
Xml.parse(
getInputStreamFromUrl("http://www.bjp.org/index.php?option=com_ninjarsssyndicator&feed_id=12&format=raw"),
Xml.Encoding.UTF_8, root.getContentHandler());
}
catch (Exception e)
{
e.printStackTrace();
}
}
catch (Exception e)
{
e.printStackTrace();
}
答
可以使用的AsyncTask做到这一点。 Android Dev Site上有一个很好的例子。 您的解析逻辑需要在doInBackground方法中完成。
它不会阻止用户界面,因为在单独的后台线程中执行doInBackGround。
您可以在onPreExecute/onPostExecute方法中显示/隐藏进度对话框。 (onPreExecute/onPostExecute方法在UI线程上运行,以便您可以与UI进行交互并向用户通知 - 如果您愿意的话 - 当处理开始/结束时)。
你试图做什么来让你的程序作为服务运行?它是如何失败的? – sarnold 2011-06-06 06:56:05