Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中运行函数后台?_Android_Android Listview - Fatal编程技术网

如何在android中运行函数后台?

如何在android中运行函数后台?,android,android-listview,Android,Android Listview,在我的应用程序中,我有一个填充listview的函数。我希望每隔5分钟定期运行此函数。为此,我使用了以下方法 private class RefreshThread extends Thread{ public boolean isStop = false; public void run(){ try{ while(!isStop){

在我的应用程序中,我有一个填充listview的函数。我希望每隔5分钟定期运行此函数。为此,我使用了以下方法

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()
方法only
newList.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 only
newList.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中?