概述
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
最后
以上就是仁爱烤鸡为你收集整理的AsyncTask 和Timer同时使用的全部内容,希望文章能够帮你解决AsyncTask 和Timer同时使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复