2011-08-14 22 views
0

我已經創建了一個線程,以便我可以在不干擾UI的情況下獲取MediaPlayer的當前位置,但是我發現在定時器運行時看到很多垃圾回收,這是正常嗎?導致很多GC的任務

此外爲了避免垃圾郵件的風險,是否有其他人知道更好的方式來顯示更高效的MediaPlayer的位置?

private void processThread() { 

     final MediaPlayer MP; 
     MP = MediaPlayer.create(this, R.raw.sleepaway); 
     MP.start(); 

     new Thread(){ 

      public void run(){    


       handler.post(new Runnable(){ 

        @Override 
        public void run() { 


         myText.setText(getTimeString(MP.getCurrentPosition()));  
         handler.postDelayed(this,10); 

        } 

       }); 


      } 

     }.start(); 

    } 

的消息我收到第二的三倍左右:

08-14 05:44:27.385: DEBUG/dalvikvm(32100): GC freed 10820 objects/524656 bytes in 75ms 

回答

3

要創建的線程是完全沒用的,只是做後(可運行)。另外,你正在用你的postDelayed()創建一個無限的「循環」。

+0

你認爲它會減慢我的UI嗎? – Jonno

+0

它不能比你現在的代碼更糟糕。就像我說的,你的線程是無用的,你將用這個代碼創建很多線程。這將是昂貴的。 –

+0

@RomainGuy - handler.postDelayed()創建新的線程或調度一個可在當前線程中執行的runnable? – StackOverflowed