Android TextView内存泄漏

时间:2012-11-27 09:25:59

标签: android memory-leaks garbage-collection textview settext

我正在开发一个音乐应用程序,其中正在使用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);
    }

1 个答案:

答案 0 :(得分:2)

GC_CONCURRENT行并不意味着您有内存泄漏。它只是垃圾收集器清理未使用的内存。

修改 这一行:

currTime.setText(getActualDuration(""+currPos));

不会造成内存泄漏(除非getActualDuration()做了一些有趣的事情)。它只是每500毫秒创建一个新的String,但它不是内存泄漏。旧的将按照您的情况进行垃圾收集。