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 { protected MyData doInBackground(Integer... counter) { MyData myData = https://www.it610.com/article/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 = https://www.it610.com/article/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 中。
【AsyncTask 和Timer同时使用】http://developer.android.com/intl/fr/reference/android/os/Looper.html

    推荐阅读