wang_peng1 发表于 2013-1-15 02:44:10

AsyncTask 和Timer同时使用

package com.example.test;import java.net.URL; import java.util.Timer; import java.util.TimerTask;import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory;import org.xml.sax.InputSource; import org.xml.sax.XMLReader;import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.util.Log;public class MyXmlPoller extends Activity {      private Handler handler = new Handler();      @Override   public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);          new Timer().schedule(new MyTimerTask(), 0, 1000);   }      private class MyAsyncTask extends AsyncTask<Integer, Integer, MyData> {          protected MyData doInBackground(Integer... counter) {             MyData myData = new MyData();            try {               URL url = new URL("http://www.example.com/my.xml");               SAXParserFactory spf = SAXParserFactory.newInstance();               SAXParser sp = spf.newSAXParser();                  XMLReader xr = sp.getXMLReader();                  MySAXHandler mySAXHandler = new Handler();               xr.setContentHandler(mySAXHandler);                  xr.parse(new InputSource(url.openStream()));                  myData = mySAXHandler.getParsedData();                  return myData;            } catch (Exception e) {               Log.e("!!!!!!!!!! MyAsyncTask doInBackground error", e.getMessage(), e);               return myData;             }          }          protected void onPostExecute(MyData myData) {             Log.d("+++++++++++++ MyAsyncTask onPostExecute", myData.toString());         }   } // MyAsyncTask   private Handler mHandler = new Handler();   public class MyTimerTask extends TimerTask {   public void run() {         mHandler.post(             new Runnable() {                  public void run() {                      new MyAsyncTask().execute("");               }            };            )   } } }  在这里呢一定要注意TimerTask要运行在Handler中。
 
当然上面的代码也可以如下变化
URL url = new URL("http://www.example.com/my.xml");             SAXParserFactory spf = SAXParserFactory.newInstance();             SAXParser sp = spf.newSAXParser();            XMLReader xr = sp.getXMLReader();            MyHandler myHandler = new MyHandler();             xr.setContentHandler(myHandler);  
将上面的放在onPreExecute() method 中。
http://developer.android.com/intl/fr/reference/android/os/Looper.html
页: [1]
查看完整版本: AsyncTask 和Timer同时使用