私のアプリケーションには、リストビューにデータを入力する関数があります。この関数を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){
}
}
}
このメソッドを使用すると、関数がフォアグラウンドで実行されるため、アプリケーション全体が影響を受けます。リストビューが更新され、関数が実行されていることをユーザーが認識しないように、この関数をバックグラウンドで実行したいと考えています。
以下は、リストビューにデータを入力する関数です。
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);
}