0

我正在使用 Handler 和 Runnable 来重复歌曲的一段,但它似乎耗尽了手机的电池,因为它每毫秒检查一次。这是我的代码:

每当用户开始循环时,我都会执行以下操作:

anotherHandler.post(mPlayLoopTask); 

anotherHandler 是在顶部声明的全局变量”

         private Handler anotherHandler = new Handler();

这是我的Runnable:

    private Runnable mPlayLoopTask = new Runnable() {


        public void run() 
           {

                if( mp != null)
                {
                    if( isLoopOn && start_position != -1 && end_position != -1 )
                    {
                        long currentPosition = mp.getCurrentPosition();




                        if( currentPosition >=end_position )
                        {
                            mp.seekTo(start_position);
                        }
                    }


                    anotherHandler.post(this);
                }
           }
        };

有什么方法可以提高性能吗?

4

2 回答 2

0

在您的代码中,您的 Handler 队列中始终至少有一个 Runnable。这确实是一个问题,因为线程将不断地执行待处理的消息,而不仅仅是一帧一次。

带有睡眠/等待的 Android AsyncTask 可能更适合您的情况。

如果需要,您可以在此处查看文档和示例:https ://developer.android.com/reference/android/os/AsyncTask.html

于 2013-03-04T03:41:55.263 回答
0

另外,如果我是你,我会尝试AudioTrack课程。

setLoopPoints(int startInFrames, int endInFrames, int loopCount)

设置循环点和循环计数。

setPlaybackHeadPosition(int positionInFrames)

设置播放头位置。

setPlaybackPositionUpdateListener(AudioTrack.OnPlaybackPositionUpdateListener listener)

当到达先前设置的标记或每次定期播放头位置更新时,设置 AudioTrack 通知的侦听器。

setPlaybackPositionUpdateListener(AudioTrack.OnPlaybackPositionUpdateListener listener, Handler handler)

当到达先前设置的标记或每次定期播放头位置更新时,设置 AudioTrack 通知的侦听器。

于 2013-03-04T03:50:32.153 回答