【发布时间】:2014-04-10 15:38:08
【问题描述】:
我有一个媒体播放器服务,其中我有一个 Runnable,它每 100 毫秒更新一次搜索栏和当前位置 TextView
private Runnable mUpdateTimeTask = new Runnable() {
public void run() {
long totalDuration = mediaPlayer.getDuration();
long currentDuration = mediaPlayer.getCurrentPosition();
seekBar.setProgress(progress);
nowduration.setText("" + utils.milliSecondsToTimer(currentDuration));
totalduration.setText(""+utils.milliSecondsToTimer(totalDuration));
// Running this thread after 100 milliseconds
mHandler.postDelayed(this, 100);
}
};
问题是,一段时间(5-10 秒)后活动停止,我在 logcat 中看到的唯一错误就是这个。虽然删除 nowduration.setText 一切正常,但 seekbar 更新没有任何问题,为什么 TextView 活动停止?
04-10 10:22:40.610 288-813/system_process I/ActivityManager﹕ Process com.package.appname (pid 3734) has died.
04-10 10:22:40.610 288-3633/system_process I/WindowManager﹕ WIN DEATH: Window{424b5708 com.package.appname/com.package.appname.MainActivity paused=false}
我尝试过:1. 在 TextView.setText 上使用 runOnUithread - 相同的行为 2. 使用线程而不是处理程序 - 但我在停止线程时遇到问题,有时我需要调用 Handler.removeCallBacks,但据我所知,停止thread 是一个非常糟糕的操作,这就是 Thread.stop( 被贬低的原因。
【问题讨论】:
-
您使用的是不是处理程序的线程?你可以使用
Handler.removeCallBacks。我认为您误解了处理程序 developer.android.com/reference/android/os/Handler.html 的使用并发布了完整的堆栈跟踪