【发布时间】:2017-02-06 17:58:28
【问题描述】:
我需要我的 Android 应用定期使用 AJAX 调用从服务器获取数据,并相应地更新 UI(只是一堆需要使用 setText() 更新的 TextView)。
请注意,这涉及 2 个任务:
- 进行 AJAX 调用,并在收到响应后更新 UI - 我为此使用了一个简单的 AsyncTask。
-定期重复上述操作。
我不确定我应该更喜欢以下两种重复调用 AsyncTask 的方法中的哪一种以获得更好的性能。
方法 1: 从 onCreate 方法内部重复调用 execute() 但我认为此方法的问题是在完成一个 AsyncTask 请求之前,另一个 AsynTask请求可能会到来(如果请求的处理时间超过预定的延迟时间)并且队列中可能存在许多请求,这最终会损害性能。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_list_view);
final Handler handler = new Handler();
Timer timer = new Timer();
TimerTask doAsynchronousTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
try {
new AjaxRequestTask().execute(); // Async Call
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
});
}
};
timer.schedule(doAsynchronousTask, 0, 2000); //execute in every 2000 ms
}
方法 2: 从 onPostExecute 内部重复调用 execute() 但我认为这种方法的问题是递归,并且在每次调用 AjaxRequestTask 的新对象时都会在旧的对象被销毁之前创建,并且会出现大量 AsynTask 对象将存在于内存中的情况,这最终会损害性能。
protected void onPostExecute(String result) {
final Handler handler = new Handler();
Timer timer = new Timer();
TimerTask doAsynchronousTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
try {
new AjaxRequestTask.execute(); // Async Call
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
});
}
};
timer.schedule(doAsynchronousTask, 0, 2000);
}
【问题讨论】:
标签: android ajax timer android-asynctask timertask