1

私のアプリケーションには、リストビューにデータを入力する関数があります。この関数を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);
    }
4

4 に答える 4

2

AsyncTaskを使用して、バックグラウンドでアクティビティを実行できます。

ここに良いチュートリアルがあります。

于 2012-07-12T04:59:34.460 に答える
1

HashMapパフォーマンスのオーバーヘッドを小さくするには、バックグラウンド スレッドで適切な値を入力するなど、すべての準備を行い、populate_listview()メソッドのみに残す必要がありますnewList.add(refresh_thread.getMap());。別のクラスからこれにアクセスするRefreshThread synchronizedメソッドと、それを準備するコードの別のメソッドに追加するだけです。明らかに、あなたはクラスのフィールドでなければなりません。次に、メソッドは次のようになります。getMap()HashMapsynchronizedprepareHashMap()HashMapRefreshThreadrun()

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){
    }
  }
于 2012-07-12T05:14:36.443 に答える
1

この目的のために Androidサービスを作成し、Alarm Manager を使用してサービスを呼び出すことができます。

ここに素敵なチュートリアルがあります

乾杯、RJ

于 2012-07-12T04:59:41.907 に答える
1

AsyncTask クラスの doInBackground 関数を調べる必要があります。

ドキュメントとこのを確認してください。

于 2012-07-12T05:02:09.007 に答える