【发布时间】:2013-07-12 22:08:55
【问题描述】:
我有一个 Activity,它必须不断地从网络或 MP3 流数据(ID3 标记)中获取结果并将它们显示在其 TextViews 上。
所以解析可以在播放流的Service中实现,也可以在解析文件的AsyncTask中实现。 它必须是定时的,并且只有在 Activity 可见时才加载数据。
自己解析是可以实现的,但是有什么办法不断的运行这个任务,更新Activity UI呢?
我看过一些链接,尝试了一些自己的代码,但它仅适用于 1 次发布。 从该站点多次调用 AsyncTask 的示例不起作用(崩溃)。
请给出一个稳定的简单工作示例,定时调用 AsyncTask 并不断更新 UI 或定时调用 Service 方法并更新 UI。
据我了解,定时器必须在 onCreate 和 onResume 的 UI 线程中调用?
谢谢。
更新代码:(这里是更新UI的定时器的工作版本,需要用AsyncTask工作测试)
doUpdate(); // in the UI onCreate
TimerTask updateTask;
final Handler handler = new Handler();
Timer timer = new Timer();
public void doUpdate(){
updateTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
Random r = new Random();
int nm=r.nextInt(100-1) + 1;
updatePlaylist(String.valueOf(nm)); //here we update the TextView
// BUT CALLING:
// new PlayList(PlayerActivity.this).execute(this);
// doesn't work! It's an AsyncTask.
}
});
}};
timer.schedule(updateTask, 0, 2000);
}
那么也许新的 AsyncTask 对象代码行是错误的?
class PlayList extends AsyncTask<Activity, Void, String> {
private PlayerActivity act;
public PlayList(Activity activity) {
this.act = (PlayerActivity) activity;
}
protected String doInBackground(Activity... activities) {
String result;
Random r = new Random();
int num=r.nextInt(100-1) + 1;
result=String.valueOf(num);
//result=act.mp3Service.getPlaylist(); // will work later
return result;
}
protected void onPostExecute(String result) {
act.updatePlaylist(result);
}
}
【问题讨论】:
-
如果它只需要持续到
Activity的生命周期,那么AsyncTask应该没问题。否则,服务可能会更好。发布您尝试过的内容,我们可以帮助您找出问题所在。根据您的需要,可以在任何Activity方法中设置计时器。 -
我试过stackoverflow.com/questions/6531950/… 奇怪,虽然它有 19 票,但它不起作用。
-
每个代码都不一样。我没有很好地检查这个问题,但它可能是它需要做的很好的代码。如果没有看到您的代码和您的 logcat,就无法确定它是否适合您或您遇到了什么问题
-
我已经更新了代码。计时器本身可以工作,但在其中调用新的 AsyncTask 失败
-
错误是:Activity已经泄露了原来绑定在这里的服务连接:或者执行doInBackground()时出错
标签: android user-interface service timer android-asynctask