Service中有四个重要函数:  

    public IBinder onBind(Intent arg0);    //必须实现,返回接口给Service    public void onCreate();                //Service创建时调用    public void onStart(Intent intent,int startId);//通过startService()会调用    public void onDestroy();                //销毁时StopService()调用

 

通过StartActivity()函数启动Service,当第一次调用时会分别调用onCreate()和onStart在();

之后只会调用onStart();

通过函数StopService()结束Service,会调用onDestroy();

调用BindService():当Service未创建时调用onCreate()和onBind();当创建了只调用onBind();

使用函数bindService()和函数unbindService()可以绑定和解除绑定

对已经绑定的Service调用bindService()无效,即多次调用bindService()和调用一次bindService()一样。 unbindService()只能使用一次,即对于一个绑定的Service,只能调用一次unbindService(),多次调用会产生错误

该函数原型为:

bindService(Intent,ServiceConnection,BIND_AUTO_CREATE);

ServiceConnection是一个服务连接类,必须实现以下两个函数:

public void onServiceConnected(ComponentName arg0, IBinder arg1)//连接成功时调用public void onServiceDisconnected(ComponentName arg0)        //连接失败时调用

    示例如下:

private ServiceConnection conn=new ServiceConnection() {    @Override    public void onServiceConnected(ComponentName arg0, IBinder arg1) {        // TODO Auto-generated method stub        Toast.makeText(MainActivity.this, "success", Toast.LENGTH_LONG).show();        Log.i("SERVICE","success");    }    @Override    public void onServiceDisconnected(ComponentName arg0) {        // TODO Auto-generated method stub        Toast.makeText(MainActivity.this, "errer", Toast.LENGTH_LONG);        Log.i("SERVICE","errer");    }

    

    

Service实例:

    MainActivity.java:

private ServiceConnection conn=new ServiceConnection() {    @Override    public void onServiceConnected(ComponentName arg0, IBinder arg1) {        // TODO Auto-generated method stub        Toast.makeText(MainActivity.this, "success", Toast.LENGTH_LONG).show();        Log.i("SERVICE","success");    }    @Override    public void onServiceDisconnected(ComponentName arg0) {        // TODO Auto-generated method stub        Toast.makeText(MainActivity.this, "errer", Toast.LENGTH_LONG);        Log.i("SERVICE","errer");    }};
protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    Button button1=(Button)this.findViewById(R.id.btn1);    Button button2=(Button)this.findViewById(R.id.btn3);    Button button3=(Button)this.findViewById(R.id.btn4);    Button button4=(Button)this.findViewById(R.id.btn5);    button1.setOnClickListener(new OnClickListener() {        @Override        public void onClick(View arg0) {            // TODO Auto-generated method stub            startService(new Intent(MainActivity.this,NewService.class));        }    });    button2.setOnClickListener(new OnClickListener() {        @Override        public void onClick(View arg0) {            // TODO Auto-generated method stub            stopService(new Intent(MainActivity.this,NewService.class));        }    });    button3.setOnClickListener(new OnClickListener() {        @Override        public void onClick(View arg0) {            // TODO Auto-generated method stub            bindService(new Intent(MainActivity.this,NewService.class),conn,BIND_AUTO_CREATE);        }    });    button4.setOnClickListener(new OnClickListener() {        @Override        public void onClick(View arg0) {            // TODO Auto-generated method stub            unbindService(conn);        }    });}

NewService.java:

public class NewService extends Service {    @Override    public IBinder onBind(Intent arg0) {        // TODO Auto-generated method stub        Toast.makeText(NewService.this, "onBind", Toast.LENGTH_LONG).show();        Log.i("SERVICE","onbind");        return null;    }    public void onCreate() {        super.onCreate();        Log.i("SERVICE","oncreat");        Toast.makeText(NewService.this, "onCreat", Toast.LENGTH_LONG).show();    }    public void onStart(Intent intent,int startId) {        Log.i("SERVICE","onstart");        Toast.makeText(NewService.this, "onStart", Toast.LENGTH_LONG).show();    }    public void onDestroy() {        Log.i("SERVICE","ondestory");        Toast.makeText(NewService.this, "onDestory", Toast.LENGTH_LONG).show();    }}

Activity.xml

<?xml version="1.0" encoding="utf-8"?>

    
    
    
    
    

AndroidManifest.xml增加: