我有一个图像应用程序,我在显示图像时播放音乐。 现在,我在UI线程中都有两个功能。
我想将其音乐播放部分移动到另一个与UI线程不同的线程中。
我如何实现这一目标?
如果我使用处理程序和runnables,则会出现复杂情况:
run()必须包含要执行的所有内容 但音乐代码遍布整个地方,因为它是基于事件的,并且每次都有不同的代码片段
所以我可以使用handler和runnable实现这个的唯一方法是,如果我有几个runnables,每个都执行特定的功能 这意味着所有音乐代码都不会在同一个线程中运行,它们会在不同的线程中运行 这不是一件好事。
那你怎么做的?
答案 0 :(得分:0)
我建议使用Service
创建Binder
- 然后您就可以使用它了。在Service
中创建Executor
(池中的单个或多个Thread
- 取决于您的应用程序结构和事件; Queue
实现也是如此)然后通过音乐事件给执行者。
答案 1 :(得分: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);
}
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);
}
因此,只有音乐设置的开始部分才能在不同的线程上完成。