如何在android中运行函数后台?
在我的应用程序中,我有一个填充listview的函数。我希望每隔5分钟定期运行此函数。为此,我使用了以下方法如何在android中运行函数后台?,android,android-listview,Android,Android Listview,在我的应用程序中,我有一个填充listview的函数。我希望每隔5分钟定期运行此函数。为此,我使用了以下方法 private class RefreshThread extends Thread{ public boolean isStop = false; public void run(){ try{ while(!isStop){
private class RefreshThread extends Thread{
public boolean isStop = false;
public void run(){
try{
while(!isStop){
Headlines.this.runOnUiThread(new Runnable() {
public void run() {
populate_listview(); //Function to populate listview
}
});
try{ Thread.sleep(300000); } catch(Exception ex){}
}
}catch(Exception e){
}
}
}
当我使用此方法时,函数在前台运行,因此整个应用程序都会受到影响。我希望在后台运行此函数,以便listview更新,用户永远不会知道函数正在运行
下面是填充listview的函数
public void populate_listview()
{
ArrayList<HashMap<String, String>> newsList = new ArrayList<HashMap<String, String>>();
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML from URL
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_HEAD);
// looping through all song nodes <song>
NodeList itemLst = doc.getElementsByTagName("item");
String MarqueeStr="";
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);
//map.put(KEY_DATE, parser.getValue(e, KEY_DATE));
newsList.add(map);
}
public void填充_listview()
{
ArrayList newsList=新建ArrayList();
XMLParser=新的XMLParser();
字符串xml=parser.getXmlFromUrl(URL);//从URL获取xml
Document doc=parser.getDomeElement(xml);//获取DOM元素
NodeList nl=doc.getElementsByTagName(键头);
//循环通过所有歌曲节点
nodelistitemlst=doc.getElementsByTagName(“项”);
字符串MarqueeStr=“”;
对于(int i=0;i
您可以使用在后台执行活动
这是一个很好的例子。您可以使用在后台执行活动
这是一个好方法。您可以为此创建一个Android,并使用报警管理器调用该服务
这是一个很好的例子
干杯,
RJ您可以为此创建一个Android,并使用报警管理器调用该服务
这是一个很好的例子
干杯,
RJ您需要探索AsyncTask类的doInBackground函数
查看和此。您需要探索AsyncTask类的doInBackground函数
查看和此。要降低性能开销,您应该在后台线程中完成所有准备工作,包括使用适当的值填充
HashMap
,并保留在populate\u listview()
方法onlynewList.add(刷新线程.getMap())
。只需添加到RefreshThread
synchronized
方法getMap()
即可从另一个类和另一个synchronized
方法prepareHashMap()访问此HashMap
)
用于准备它的代码。显然,HashMap
必须是RefreshThread
类的字段。然后,run()
方法将如下所示:
public void run(){
try{
while(!isStop){
prepareHashMap();
Headlines.this.runOnUiThread(new Runnable() {
public void run() {
populate_listview(); //Function to populate listview
}
});
try{ Thread.sleep(300000); } catch(Exception ex){}
}
}catch(Exception e){
}
}
为了减少性能开销,您应该在后台线程中完成所有准备工作,包括使用适当的值填充
HashMap
,并保留在populate\u listview()
method onlynewList.add(刷新线程.getMap())
。只需添加到RefreshThread
synchronized
方法getMap()
即可从另一个类和另一个synchronized
方法prepareHashMap()访问此HashMap
)
用于准备它的代码。显然,HashMap
必须是RefreshThread
类的字段。然后,run()
方法将如下所示:
public void run(){
try{
while(!isStop){
prepareHashMap();
Headlines.this.runOnUiThread(new Runnable() {
public void run() {
populate_listview(); //Function to populate listview
}
});
try{ Thread.sleep(300000); } catch(Exception ex){}
}
}catch(Exception e){
}
}
对于后台活动,您应该在android中使用一个名为ServiceIm a noob的组件,而不知道如何实现它。这就是我来这里的原因。:)您能更详细地描述一下吗?没问题,只需在google或“android+服务”上搜索即可你会发现很好的教程你正在UI线程上运行整个函数
populate_listview
。因此你创建的线程没有用我当时应该做什么?我不必调用整个函数来更新我的listview吗?有没有其他方法可以在特定时间段将新项目添加到listview?用于backgro你应该在android中使用一个叫做ServiceIm的组件,而不是如何实现它。这就是我来这里的原因。你能更详细地描述一下吗?没问题,只要在谷歌上搜索一下“android+服务”你会发现很好的教程你正在UI线程上运行整个函数populate\u listview
。所以你创建的线程没有用我当时应该做什么?我不需要调用整个函数来更新我的listview吗?有没有其他方法可以在特定时间段将新项目添加到listview中?