Android 有没有办法提高使用Handler和Runnable的性能?

Android 有没有办法提高使用Handler和Runnable的性能?,android,performance,Android,Performance,我正在使用Handler和Runnable重复歌曲的一段,但它似乎耗尽了手机的电池,因为它每毫秒检查一次。这是我的密码: 每当用户开始循环时,我都会执行以下操作: anotherHandler.post(mPlayLoopTask); anotherHandler是在顶部声明的全局变量“ 以下是我的建议: private Runnable mPlayLoopTask = new Runnable() { public void run()

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

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

anotherHandler.post(mPlayLoopTask); 
anotherHandler是在顶部声明的全局变量“

以下是我的建议:

    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);
                }
           }
        };

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

在您的代码中,处理程序的队列中始终至少有一个可运行。这确实是一个问题,因为线程将持续执行挂起的消息,而不是一帧执行一次

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

如果需要,您可以在此处查看文档和示例:

此外,如果我是您,我会尝试使用该课程

setLoopPoints(int startInFrames, int endInFrames, int loopCount)
设置循环点和循环计数

setPlaybackHeadPosition(int positionInFrames)
设置播放头的位置

setPlaybackPositionUpdateListener(AudioTrack.OnPlaybackPositionUpdateListener listener)
设置AudioTrack在到达先前设置的标记或每次定期播放磁头位置更新时通知的侦听器

setPlaybackPositionUpdateListener(AudioTrack.OnPlaybackPositionUpdateListener listener, Handler handler)

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

但是我需要每毫秒检查一次当前位置是否超过用户为结束位置选择的位置。这就是为什么队列中总是有一个可运行的。我无法使用AsyncTa实现这一点sk.你确定你需要毫秒精度吗?如果你每250毫秒检查一次,用户将听不到差异。杜……没想到。谢谢你的输入!
setPlaybackPositionUpdateListener(AudioTrack.OnPlaybackPositionUpdateListener listener, Handler handler)