学习android中的service一般都会举播放音乐的例子,sdk上说service是在主线程(UI线程)中的,但是播放音乐不是一个耗时的工作么,不会阻塞UI线程么,在这一点上service和线程有什么区别呢?难道MediaPlayer是一个子线程? 不解啊,懂的朋友说一下  :) 

解决方案 »

  1.   

    那可比线程更高一个层次了 :)是在另外一个进程中的一个系统服务来做的。服务进程是MediaServer一般这个服务进程负责媒体播放及照相服务功能。这是server端, 负责处理你音乐播放client端的binder transact请求的。donut下起启动文件是 main_mediaserver.cpp内容很简单:
    int main(int argc, char** argv)
    {
        sp<ProcessState> proc(ProcessState::self());
        sp<IServiceManager> sm = defaultServiceManager();
        LOGI("ServiceManager: %p", sm.get());
        AudioFlinger::instantiate();
        MediaPlayerService::instantiate();
        CameraService::instantiate();
        ProcessState::self()->startThreadPool();
        IPCThreadState::self()->joinThreadPool();
    }
      

  2.   

    你查查系统的service和普通的service的区别
      

  3.   

    那别的service又是怎样的呢,如果我们不是用mediaplayer
      

  4.   

    Serivce是在主线程的。Android官方解释:
    Note that services, like other application objects, run in the main thread of their hosting process. This means that, if your service is going to do any CPU intensive (such as MP3 playback) or blocking (such as networking) operations, it should spawn its own thread in which to do that work.