2

我有一个图像应用程序,在显示图像时我正在播放音乐。现在,我在 UI 线程中拥有这两种功能。

我想将其中的音乐播放部分移动到与 UI 线程不同的另一个线程中。

我如何实现这一目标?

如果我使用处理程序和可运行对象的复杂性:

run() 必须包含要执行的所有内容,但音乐代码分散在各处,因为它是基于事件的,并且每次执行不同的代码

所以我可以用 handler 和 runnable 实现这一点的唯一方法是,如果我有几个 runnables 每个都执行一个特定的功能,这意味着所有音乐代码都不会在同一个线程中运行,它们会在不同的线程中运行,这不是一件好事.

那么你是怎么做到的呢?

4

2 回答 2

0

我建议Service用 a创建一个Binder- 然后你就可以处理它了。在Service创建一个Executor(池中的单个或多个Threads - 取决于您的应用程序结构和事件;Queue实现也是如此),然后将音乐事件传递给执行程序。

于 2012-09-05T10:38:46.973 回答
0

这就是我所做的:

 public static void startTrack() {
    PLAYER_STATE = IS_PLAYING;
            /*Setup the handler and runnable*/
    mMusicHandler = new Handler() {         
    }; 

    mMusicRunnable = new Runnable() {
        public void run() {
             Log.d(TAG,"inside Music Runnable");
            try {
                mPlayer.start();        
            } catch (IllegalStateException e) {
                Log.d(TAG,"ILLEGAL STATE-START");
                handleIllegalState();
            }
        }
    };
    mMusicHandler.post(mMusicRunnable);

}

所以只有音乐设置的开始部分是在不同的线程上完成的。

于 2012-10-03T07:35:01.977 回答