2012-11-27 144 views
2

我正在開發一個音樂應用程序,其中正在使用一個Seekbar。我有一個方法可以處理seekbar的性能,而且效果很好。但如果搜索條是在行動有內存泄漏和日誌貓節目如Android TextView內存泄漏

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

爲什麼要用每個搜索欄進度更新曲目的長度?您可以在MediaPlayer準備好之後更新一次。 – Rotem

+0

我想在一個文本視圖中更新當前搜索時間,還有一個文本視圖用於歌曲的整個持續時間,此文本視圖用於正在播放的歌曲的播放時間。 – AndEngine

+0

您多久更換一次seekbar進度?如果在文本中不顯示毫秒,則可以根據搜索欄創建一個每秒更新TextView的線程。 – Rotem

回答

2

GC_CONCURRENT線並不意味着你有內存泄漏。這只是垃圾收集器清理未使用的內存。

編輯 這條線:

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

不會造成內存泄漏(除非getActualDuration()做一些有趣的事情)。它只是每500毫秒創建一個新的String,但它不是內存泄漏。舊的將會像你的情況一樣被垃圾收集。

+0

謝謝,但是,在這種情況下,如何避免留下未使用的內存。當我註釋掉這一行 currTime.setText(getActualDuration(「」+ currPos)); 沒有GC_CONCURRENT,釋放未使用的內存。所以我很困惑 – AndEngine

+0

你在說什麼?在Java中,你通常不需要擔心內存泄漏問題。如果有一個未使用的對象,它將自動釋放(除非在某處保留對它的引用)。 – Caner

+0

(working on Android) this line currTime.setText(getActualDuration(「」+ currPos)); 在Log cat中,類似於這個消息的連續不斷。 GC_CONCURRENT釋放1692K,34%免費10759K,暫停3毫秒+ 8ms的 會造成任何性能問題, – AndEngine