额,你可以在activity里面写个音乐播放器,然后启动一个thread去播放他,然后把activity关闭了试试,看它会不会播放

解决方案 »

  1.   

    service 没有可见的用户界面,但是可以在后台运行任意长的时间。
    一个主要的例子就是从列表中播放音乐的媒体播放器。播放器程序可能会有一个或几个活动,这些活动可以让用户选择希望播放的音乐然后显示播放。但是音乐播放过程本身不会使用一个活动,因为用户希望在切出播放器界面做别的事情时音乐也能一直放下去。为了保持播放继续,播放器的活动可以启动一个在后台运行的service。然后即使启动这个service的活动退出,音乐播放服务也能继续运行。
    你可以连接(connect)或者绑定(bind)到一个正在运行的service(如果这个服务还没运行的话就启动它)。当连接到service后,你可以通过service暴露出来的接口和这个service进行通信,对音乐播放服务来说,这个接口可能允许用户暂停,后退,停止,重新播放等操作。
    service 运行在这个应用程序进程的主线程中。因此为了不阻塞其他的组件或者用户界面,service经常为那些耗时长的任务单独开一个线程(比如音乐播放)。
      

  2.   

    http://www.eoeandroid.com/forum.php?mod=viewthread&tid=272385
    你看一下
    1). Thread:Thread 是程序执行的最小单元,它是分配CPU的基本单位。可以用 Thread 来执行一些异步的操作。2). Service:Service 是android的一种机制,当它运行的时候如果是Local Service,那么对应的 Service 是运行在主进程的 main 线程上的。如:onCreate,onStart 这些函数在被系统调用的时候都是在主进程的 main 线程上运行的。如果是Remote Service,那么对应的 Service 则是运行在独立进程的 main 线程上。因此请不要把 Service 理解成线程,它跟线程半毛钱的关系都没有!
      

  3.   

    刚开始转学android,写个播放器目前来说有点难(控件还只会个按钮),4L贴的链接里有这样一段话“Thread 的运行是独立于 Activity 的,也就是说当一个 Activity 被 finish 之后,如果你没有主动停止 Thread 或者 Thread 里的 run 方法没有执行完毕的话,Thread 也会一直执行”,显然播放音乐这个功能本身跟activity木有一毛钱关系,那activity关闭后我猜想应该是可以继续播放的。那抛开播放播放器,如果只是做一些简单的计算,那thread显然够用了,就是说在某些场景下(比如不需要与其他activity交互,执行单一的功能并结束)thread是可以取代service的,对吗?
      

  4.   

    刚开始转学android,写个播放器目前来说有点难(控件还只会个按钮),4L贴的链接里有这样一段话“Thread 的运行是独立于 Activity 的,也就是说当一个 Activity 被 finish 之后,如果你没有主动停止 Thread 或者 Thread 里的 run 方法没有执行完毕的话,Thread 也会一直执行”,显然播放音乐这个功能本身跟activity木有一毛钱关系,那activity关闭后我猜想应该是可以继续播放的。那抛开播放播放器,如果只是做一些简单的计算,那thread显然够用了,就是说在某些场景下(比如不需要与其他activity交互,执行单一的功能并结束)thread是可以取代service的,对吗?这些理论上的东西你要实际去操作练了才能积累起来,简单的计算当然thread可以
      

  5.   

    1. 在设计上 UI和服务分离,提高了代码内聚。
    2. service可以作为独立进程运行,UI层可以进行IPC与service交互,比如获取GPS坐标信息。
    3. service可以长期在后台运行,比如获取推送广告,最新新闻 并通知给UI层,你的app关闭后 仍然能收到推送的消息。
      

  6.   

    http://blog.csdn.net/g19920917/article/details/28389237
    from 官网
      

  7.   

    Service就是后台服务,Windows里面很多啊
      

  8.   

    http://blog.csdn.net/timothy721/article/details/8692126
      

  9.   

    FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
             
            MusicFramgent fragment = new MusicFramgent();
            fragmentTransaction.add(R.id.tab_content, fragment);
            fragmentTransaction.commit();package com.example.helloworld;import java.io.File;import android.os.Bundle;
    import android.os.Environment;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Toast;
     
     
     
    public class MusicFramgent extends Fragment
    {
     
        //三个一般必须重载的方法
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            System.out.println("ExampleFragment--onCreate");
        }
     
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState)
        {
            System.out.println("ExampleFragment--onCreateView");
            
            ShowMusicFile();
            return inflater.inflate(R.layout.music_layout, container, false);
             
        }
     
        @Override
        public void onPause()
        {
            // TODO Auto-generated method stub
            super.onPause();
            System.out.println("ExampleFragment--onPause");
        }
     
         
     
        @Override
        public void onResume()
        {
            // TODO Auto-generated method stub
            super.onResume();
            System.out.println("ExampleFragment--onResume");
        }
     
        @Override
        public void onStop()
        {
            // TODO Auto-generated method stub
            super.onStop();
            System.out.println("ExampleFragment--onStop");
        }
        
        public void ShowMusicFile()
        {
         File path = null;
         if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) ) 
         {
         path = Environment.getExternalStorageDirectory();
            }
         else
         {
                Toast.makeText(getActivity(),"没有SD卡",Toast.LENGTH_LONG).show();
            }
        
         GetAllFiles(path);
        
        }
        
        private void GetAllFiles(File root)
        {  
            File files[] = root.listFiles();  
            if(files != null)
            {  
             for (File f : files)
             {  
             if(f.isDirectory())
             {  
             GetAllFiles(f);  
                    }
             else
             {  
                        System.out.println(f);  
                    }  
                }  
            }
        }
       
     
    }