Android程序调用ajax代码,Android:使用AsyncTask进行重复的Ajax调用的含...

我需要我的Android应用程序使用AJAX调用定期从服务器获取数据,并相应地更新UI(只是一堆需要使用setText()更新的TextViews).请注意,这涉及2个任务:

>进行AJAX调用,并在收到响应后更新UI-为此,我使用了一个简单的AsyncTask.

>定期重复上述操作.

我还没有找到实现上述第2点的优雅方法.当前,我只是从OnPostExecute()执行任务本身.我在this thread at SO上读到,就AsyncTask对象而言,我不必担心垃圾回收.

但是我仍然不确定如何设置一个计时器,该计时器将在AsyncTask过期后将其触发.任何指针将不胜感激.这是我的代码:

public class MyActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

new AjaxRequestTask().execute(MY_REST_API_URL);

}

private void updateReadings(String newReadings) {

//Update the UI

}

class AjaxRequestTask extends AsyncTask {

@Override

protected String doInBackground(String... restApiUrl) {

//Do AJAX Request

}

@Override

protected void onPostExecute(String result) {

updateReadings(result);

/*Is there a more elegant way to achieve this than create a new AsyncTask object every 10 seconds? Also, How can I update the UI if I create a timer here? */

new AjaxRequestTask().execute(MY_REST_API_URL);

}

}

}

提前致谢

编辑:

我尝试发布答案,但由于我没有8个小时内可以回答的声誉而无法执行.

好吧,所以我找到了解决方案.但是我不相信.

protected void onPostExecute(String result) {

updateReadings(result);

// super.onPostExecute(result);

new Timer().schedule(

new TimerTask() {

@Override

public void run() {

new AjaxRequestTask().execute(MY_REST_API_URL);

}

},

TIMER_ONE_TIME_EXECUTION_DELAY

);

}

>使用此功能时,我应该注意哪些反面?特别是,我发现LogCat中发生了许多GC.另外,我想知道除非onPostExecute()完成,否则AsyncTask如何成为GC的候选对象?

>如何“停止”更新?我想到的一种方法是将第一个AsyncTask实例作为Activity的成员变量.这样,我可以在其上调用cancel(true),并希望这将“停止”任务.

解:

万一有人在寻找类似的东西-我在这里提到的解决方案都不能令人满意地工作.他们都遭受内存不足的问题.我没有调试OOM的详细信息,但我怀疑这可能是由于递归,还是因为与HTTP相关的对象作为AsyncTask中的成员变量而不是Activity的成员(基本上是因为未重用) HTTP和其他对象).

我放弃了这种方法,将其用于另一种方法-在AsyncTask的doInBackground()中无休止地进行Ajax调用;并在onProgressUpdate()中更新UI.这样,我还避免了维护太多线程或处理程序以更新UI的开销(记住UI可以在onProgressUpdate()中进行更新).

这种方法还消除了对Timers和TimerTasks的需求,而改为使用Thread.sleep(). This thread on SO还有更多详细信息和代码段.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值