天天看點

Service的基本操作

    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:

繼續閱讀