我正在开发一个音乐应用程序,其中正在使用Seekbar。我有一种处理搜索栏性能的方法,效果很好。但如果搜索栏处于运行状态,则存在内存泄漏,Log cat显示为
GC_CONCURRENT freed 1692K, 34% free 10759K, paused 3ms+8ms
当搜索栏正在进行时,这种情况会持续发生
我发现问题是由于TextView的动态更新,这是为了显示歌曲的当前持续时间。
我该如何解决这个问题。请帮助我解决这个问题
我的功能是
public void seekbarProgress(){
handler.postDelayed(new Runnable() {
@Override
public void run() {
//current position of the play back
currPos = harmonyService.player.getCurrentPosition();
if(isPaused){
//if paused then stay in the current position
seekBar.setProgress(currPos);
//exiting from method... player paused, no need to update the seekbar
return;
}
//checking if player is in playing mode
if(harmonyService.player.isPlaying()){
//settting the seekbar to current positin
seekBar.setProgress(currPos);
//updating the cuurent playback time
currTime.setText(getActualDuration(""+currPos));
handler.removeCallbacks(this);
//callback the method again, wich will execute aftr 500mS
handler.postDelayed(this, 500);
}
//if not playing...
else{
//reset the seekbar
seekBar.setProgress(0);
//reset current position value
currPos = 0;
//setting the current time as 0
currTime.setText(getActualDuration(""+currPos));
Log.e("seekbarProgress()", "EXITING");
//exiting from the method
return;
}
}
}, 500);
}
答案 0 :(得分:2)
GC_CONCURRENT
行并不意味着您有内存泄漏。它只是垃圾收集器清理未使用的内存。
修改强> 这一行:
currTime.setText(getActualDuration(""+currPos));
不会造成内存泄漏(除非getActualDuration()
做了一些有趣的事情)。它只是每500毫秒创建一个新的String
,但它不是内存泄漏。旧的将按照您的情况进行垃圾收集。