3

シークバーが使用されている音楽アプリケーションを開発しています。シークバーのパフォーマンスを処理し、うまく機能するメソッドが 1 つあります。ただし、シークバーが動作している場合、メモリ リークが発生し、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);
    }
4

1 に答える 1

2

GC_CONCURRENT行は、メモリ リークがあることを意味するものではありません。未使用のメモリをクリーニングするガベージコレクターです。

編集 この行:

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

メモリ リークを作成しません (getActualDuration()何かおかしくない限り)。String500ミリ秒ごとに新しいものを作成するだけですが、メモリリークではありません。あなたの場合のように、古いものはガベージコレクションされます。

于 2012-11-27T09:38:07.607 に答える