我在android中创建了一个mediplayer,它有一个可运行的后台线程,用于保持时间导引器的更新
private Runnable mUpdateTiMetask = new Runnable() { public voID run() { long totalDuration = mediaPlayer.getDuration(); long currentDuration = mediaPlayer.getCurrentposition(); // .... setting textvIEws of durations // ... converting milli to mm:ss and setProgress(progress) mHandler.postDelayed(this, 100); }};
并且我在主活动中有一个选项菜单,点击该选项将退出活动
public boolean onoptionsItemSelected(MenuItem item) { if (item.getItemID() == R.ID.exitplayer) exitPlayer(); return super.onoptionsItemSelected(item); } private voID exitPlayer() { mediaPlayer.stop(); mediaPlayer.release(); try { mUpdateTiMetask.wait(); } catch (InterruptedException e) { e.printstacktrace(); } this.finish(); }
但它会抛出
java.lang.IllegalStateException at
androID.media.MediaPlayer.getDuration(Native Method)
我知道线程中存在问题,应该在退出活动之前停止该线程,但我不确切知道如何
任何人都可以帮助PLZ?
解决方法:
使用以下
mhandler.removeCallbacks(mUpdateTiMetask);
http://developer.android.com/reference/android/os/Handler.html
public final voID removeCallbacks (Runnable r)Added in API level 1Remove any pending posts of Runnable r that are in the message queue.
总结 以上是内存溢出为你收集整理的Android MediaPlayer:如何在完成活动之前停止线程全部内容,希望文章能够帮你解决Android MediaPlayer:如何在完成活动之前停止线程所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)