Service使用方式

2021-08-31 22:07:36 字數 3714 閱讀 1271

使用service的場合:

1.乙個或多個activity需要向同一應用中的service發出執行某一操作的命令。

ps:不需要繫結

2.某個activity需要同一應用中的service為其單獨服務,當此activity消毀時,也將為其服務的service一併消毀。

ps:需要繫結

3.多個activity繫結到同乙個service,僅當所有activity取消了繫結,service才消毀。

ps:只有第乙個activity繫結時才呼叫onbind()方法,第二個、第三個....第n個直接取得第乙個activity繫結時onbind()方法返回的ibinder物件

ps:需要跨程序通訊(ipc)

4.1當遠端服務不需要支援多執行緒時,使用messager.

server端應用**

public class remoteserviceproxy extends service  catch (remoteexception e) 

} else

}});

@override

public ibinder onbind(intent intent)

}

client端應用**

//開啟乙個服務

bindservice(new intent(this, remoteserviceproxy.class), mconnection, bind_auto_create);

private messenger mservice;

private serviceconnection mconnection = new serviceconnection()

@override

public void onservicedisconnected(componentname name)

};

private messenger mmessenger = new messenger(new handler()  else 

}});message message = message.obtain(null, remoteserviceproxy.get_result);

message.replyto = mmessenger;

try catch (remoteexception e)

4.2當遠端服務需要同時響應多個client的請求,使用aidl.

注意:一般我們應用中是不需要使用aidl的,這裡僅僅是為了學習和深入理解android的ipc機制。

server端應用**

package com.example.aidl;

inte***ce iremotecallback

package com.example.aidl;

import com.example.aidl.iremotecallback;

inte***ce iremoteservice

建立service類為客戶端提供服務

package com.example.server.service;

import com.example.aidl.iremotecallback;

import com.example.aidl.iremoteservice;

import android.content.intent;

import android.os.ibinder;

import android.os.remotecallbacklist;

import android.os.remoteexception;

import android.util.log;

public class remoteservice extends service

private final remotecallbacklistremotecallbacklist = new remotecallbacklist();

private iremoteservice.stub ibinder = new iremoteservice.stub()

@override

public void unregister(iremotecallback cb) throws remoteexception

@override

public void execute() throws remoteexception

remotecallbacklist.finishbroadcast();

log.i("rs", "remoteservice.execute() has done.");

} int status;

@override

public int getstatus(string flag) throws remoteexception

};}

在androidmanifast.xml中配置service,必需設定action過濾

client端應用**

將server端建立的iremoteservice.aidl和iremotecallback.aidl檔案copy到client端應用中

在client端獲取server端的remoteservice物件的引用

package com.example;

import com.example.aidl.iremotecallback;

import com.example.aidl.iremoteservice;

import android.content.componentname;

import android.content.intent;

import android.content.serviceconnection;

import android.os.bundle;

import android.os.ibinder;

import android.os.remoteexception;

import android.view.view;

import android.view.view.onclicklistener;

import android.widget.toast;

public class clientactivity extends activity

private onclicklistener monclicklistener = new onclicklistener()

} catch (remoteexception e)

} };

private iremoteservice remoteservice;//遠端服務

private serviceconnection sconnection = new serviceconnection() catch (remoteexception e)

} @override

public void onservicedisconnected(componentname name)

}; private iremotecallback.stub remotecallback = new iremotecallback.stub()

};}

約定Service構建方式

對於devops中,將開發好的軟體交付給運維人員去部署與維護,過程中參雜著諸多不可控制的變數,如環境問題 版本問題等等,而docker容器極大程度上解決了這些問題,同時對於服務的持續交付,也變得方便和簡潔,本次講講我的整個生成流水線中服務部署方面的一些想法和執行方式,或許不是很中意的想法,並且還可能...

Service的啟動方式

service的啟動方式 兩種啟動模式,一種是非繫結啟動模式,另一種是繫結啟動模式。一 startservice方式啟動 1 intent intent new intent this,firstservice.class 2 開啟服務 3 startservice intent 二 繫結啟動模式 ...

Service 兩種啟動方式

service的生命週期service的生命週期方法比activity少一些,只有oncreate,onstart,ondestroy 我們有兩種方式啟動乙個service,他們對service生命週期的影響是不一樣的。1通過startservice service會經歷oncreate onsta...