安卓四大元件之 service

2022-05-06 04:36:10 字數 2038 閱讀 1246

服務:長期後台執行的沒有介面的activity,程式寫法和activity類似。

安卓系統程序管理是按照一定規則的:

1.預設情況下,關閉掉乙個應用程式,清空了這個應用程式的任務棧,應用程式的程序還會保留。因為手機記憶體較小,方便下次快速啟動應用程式,但是也會帶來記憶體不足的問題。

2.安卓系統有一套記憶體清理機制,按照優先順序去**系統的記憶體。

程序分為5個等級的優先順序:(從高到低)

1.foreground process 前台程序  使用者正在玩的應用程序

2.visible process 可視程序   使用者仍然可以看到這個程序的介面

3.service process服務程序  應用程式有乙個元件在後台執行

4.backgroundprocess 後台程序  應用程式沒有服務在執行,並且最小化(activity onstop)

5.empty process 空程序   沒有任何執行的activity ,任務棧空了

執行緒是執行在程序裡的,當乙個應用程式按返回鍵後,任務棧被清空,變成乙個空程序,很容易被**,裡面的子執行緒也停止了。因此如果有需要長期後台執行的元件,不要在activity 開啟子執行緒,應該建立服務,在服務裡面開啟子執行緒,這樣優先順序就變高了。

服務的目的:

1.長期後台執行。

2.提高程序的優先順序,系統不容易**掉程序,即便**了,記憶體充足的時候,會把程序重新建立。

由於服務沒有介面,因此生命週期也更簡單,只有oncreat() onstartcommand() ondestroy()三個方法。

服務的生命週期:

一、採用start的方式開啟服務 

生命週期如下:

onstart()過時了

開啟服務: oncreate()--> onstartcommand()  ---> ondestory();

如果服務已經開啟,不會重複的執行oncreate(), 而是會呼叫onstart()和 onstartcommand();

服務停止的時候 ondestory().

服務只會被停止一次

二、服務還有一種開啟方式,繫結的方式開啟服務。

oncreate() --->onbind();--->onunbind()-->ondestory();

繫結服務不會呼叫onstart或者onstartcommand方法;

混合呼叫的服務的生命週期:

服務長期後台執行,又想呼叫服務的方法:

1.start方式開啟服務(保證服務長期後台執行)

2.bind方式繫結服務(保證呼叫服務的方法)

3.unbind解除繫結服務

4.stopservice停止服務。

三、兩種開啟服務方法的區別。

start方式開啟服務。 一旦服務開啟跟呼叫者(開啟者)就沒有任何關係了。

開啟者退出了,開啟者掛了,服務還在後台長期的執行。

開啟者沒有辦法去呼叫服務裡面的方法。(美國的司法獨立)不能通過new乙個service來呼叫service裡面的方法,只能通過系統框架(activity)開啟service。

bind的方式開啟服務,繫結服務,呼叫者掛了,服務也會跟著掛掉。不求同時生,但求同時死。

開啟者可以呼叫服務裡面的方法。

bind方式繫結服務過程如下:

1.新建乙個sevice類,裡面建立乙個內部類a繼承binder,包含呼叫service裡面方法的方法。

2.利用service裡面的onbind方法返回1中的內部類a物件。

3.在activity的bind方法中採用繫結的方式去開啟服務,

intent intent = new intent(this,myservice.class);

conn = new myconn();

bindservice(intent, conn, bind_auto_create);

conn為4中的類的物件。

4.寫乙個類繼承serviceconnection類,裡面實現onserviceconnected方法(方法中需要獲取a物件),還需要實現onservicedisconnected方法。

5.利用4中的a的物件呼叫服務裡面的方法。

安卓四大元件 Service(服務)

一 安卓四大元件之一 二 長時間執行在後台,不可見,無介面 三 執行在主線程中 四 可跨程序呼叫 五 使用方法 啟動方式 1.startservice啟動服務 a.新建類繼承自service b.重寫oncreate方法 c.實現onbind抽象方法 d.重寫onstartcommand方法 sta...

安卓四大元件之ContentProvider

contentprovider是內容提供者 為什麼要有內容提供者?因為在安卓中每乙個應用的資料庫檔案都是私有的,自能在自己的應用中自己使用,別的應用要是想訪問,那麼就需要修改檔案的許可權,這樣資料就變的不安全了,所以就引入了內容提供者。首先來說一下內容提供者中的乙個重要的類uri,熟悉uri會使我們...

安卓四大元件之服務

1.服務簡介 服務是安卓中實現程式後台執行的解決方案,它非常適合去執行那些不需要和使用者互動而且還長時間執行的任務,服務的執行不依賴於任何使用者介面,即使程式被切換到後台,或者使用者開啟了另外乙個應用程式,服務仍然能夠保持執行。注意 1 服務並不是執行在乙個獨立的程序中,而是依賴於建立服務時所在的應...