我有一个必须不断从网络或 MP3 流数据(ID3 标记)获取结果并将它们显示在其 TextViews 上的 Activity。
所以解析可以在播放流的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);
}
}