六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 41|回复: 0

AsyncTask 和Timer同时使用

[复制链接]

升级  82%

292

主题

292

主题

292

主题

进士

Rank: 4

积分
910
 楼主| 发表于 2013-1-15 02:44:10 | 显示全部楼层 |阅读模式
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
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表