service的基本操作,啟動service的方式有兩種,一種是context.startservice,暫停的service是stopservice,這種方式service與主activity沒有關聯,不能單純的進行資料互動(可以考慮使用廣播,進行互動),另一種方式binderservice,這種方式傳回的是一個binder對象,
binderservice(intent service,serviceconnection conn,int flag):第一個參數是intent對象,第二個是連結對象,第三個是否自動建立service,0是不自動建立,binder_auto_create
public class myservice extends service {
public myservice() {
}
public int count = 0 ;
public mybinder binder = new mybinder();
public class mybinder extends binder {
// 建立一個內建binder類的對象,activity調用service的時候傳回一個binder對象給activity
public int getcount(){
count = 10 ;
return count ;
@override
public ibinder onbind(intent arg0) {
// 必須實作的方法
return binder;
public void oncreate() {
// 每次建立的時候執行一次,
system.out.println("oncreate");
super.oncreate();
public int onstartcommand(intent intent, int flags, int startid) {
// service每次運作的時候執行
system.out.println("onstartcommand");
return super.onstartcommand(intent, flags, startid);
public void ondestroy() {
// 銷毀的之後執行
system.out.println("ondestroy");
super.ondestroy();
public class mainactivity extends activity implements onclicklistener {
private button start, stop, get;
myservice.mybinder binder;
private serviceconnection conn = new serviceconnection() {
public void onservicedisconnected(componentname name) {
// 連結斷開的時候進行掉用
system.out.println("service連結斷開");
public void onserviceconnected(componentname name, ibinder service) {
// 進行連結的時候進行調用
system.out.println("service連結成功");
binder = (myservice.mybinder) service;
};
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
start = (button) findviewbyid(r.id.start);
stop = (button) findviewbyid(r.id.stop);
get = (button) findviewbyid(r.id.get);
this.start.setonclicklistener(this);
this.stop.setonclicklistener(this);
this.get.setonclicklistener(this);
public void onclick(view view) {
switch (view.getid()) {
case r.id.start:
// 第二種啟動方式
intent in = new intent(mainactivity.this, myservice.class);
bindservice(in, conn, service.bind_auto_create);
// 第一種啟動方式,activity關閉的時候service也會随着關閉
// intent in = new intent(mainactivity.this,myservice.class) ;
// mainactivity.this.startservice(in) ;
break;
case r.id.stop:
// 第二種關閉方式
unbindservice(conn);
// intent in2 = new intent(mainactivity.this,myservice.class) ;
// mainactivity.this.stopservice(in2) ;
case r.id.get:
// 擷取狀态
system.out
.println("=====service傳回的值======>>>>" + binder.getcount());
default: