1.服務簡介
服務是安卓中實現程式後台執行的解決方案,它非常適合去執行那些不需要和使用者互動而且還長時間執行的任務,服務的執行不依賴於任何使用者介面,即使程式被切換到後台,或者使用者開啟了另外乙個應用程式,服務仍然能夠保持執行。
注意:1)服務並不是執行在乙個獨立的程序中,而是依賴於建立服務時所在的應用程式程序。當該程序被殺掉時,所有依賴於該程序的服務也會停止執行。
2)當我們的服務要進行非同步操作時或者說避免主線程阻塞時,我們需要自主在服務裡面建立子執行緒。
2.建立執行緒方法(三種)
1)繼承thread
啟動該執行緒:
2)實現runnable
啟動該執行緒:
3)匿名類(常用)
3.在子執行緒中更新ui
說明:handler本質用法就是指我們要用其來更新我們的ui元件的資訊,有兩種方法定義,要不在主線程內定義,只需要定義handler,.在傳送資訊的時候不用定義looper,因為主線程自己會有looper,第二種定義方法就是自己定義的執行緒裡面定義我們的handler,但在傳送資訊那邊需要定義好looper,定義完looper,因為建構函式的關係我們的messagequeue也會一同建立。
注意:我這邊說的定義其實就是定義乙個handler類,裡面有乙個處理資訊的方法,而我們如何判斷該資訊,選擇好對應的方法去處理,就要使用到乙個what屬性去定義~
總結:先選擇方式定義好handler寫好處理資訊的方法,然後傳送資訊(注意what屬性)就可以了。
具體的handler的工作檢視如下:
**:4.使用asynctask
(1)使用步驟:
1)繼承asynctask(其為抽象類)
2)複寫幾個方法
3)獲取該物件,並且呼叫execute方法(是否傳入資料,看params的資料型別)
(2)asynctask的三個泛型引數
(3)複寫的幾個方法解析(經常使用的)
(4)啟動該任務
(5)總結
5.服務的基本用法
(1)普通服務使用步驟
1)繼承服務,複寫三個方法
2)註冊該服務
3)啟動該服務(暫停)
啟動和暫停服務:
(2)實現活動和服務進行通訊的服務(也就是第二種開啟服務的服務類)
核心步驟:
1)在服務內部增加實現乙個內部類繼承binder,然後在服務實現乙個onbind方法返回這個內部類
2)在活動實現乙個匿名內部類serviceconnection來呼叫服務的內部類方法
注意:這邊要使用bindservice()和unbindservice()方法來繫結和取消繫結
(3)兩種啟動方法的生命週期
6.服務的更多技巧
(1)使用前台服務
步驟:就是在oncreate()方法中,建立乙個通知。
核心**:
(2)使用intentservice
說明:一般的服務是預設在主線程之中的,所以如果服務要進行一些耗時的操作,必要建立子執行緒進行處理,如果沒有就會發生anr錯誤,而建立了子執行緒又必須要在執行完邏輯操作之後關閉它,必然該子執行緒會一直啟動,導致資源浪費,但很多程式設計師很容易就會忘掉關掉它,所以為了解決這個問題,就出現了intentservice,而其與普通service的區別在於,其是乙個建立非同步的,會自動停止的服務。
實現:1)建立該類繼承intentservice
說明:其onhandleintent()方法已經是在子執行緒中執行的了,所以不用擔心anr問題。
2)啟動該服務
安卓四大元件 Service(服務)
一 安卓四大元件之一 二 長時間執行在後台,不可見,無介面 三 執行在主線程中 四 可跨程序呼叫 五 使用方法 啟動方式 1.startservice啟動服務 a.新建類繼承自service b.重寫oncreate方法 c.實現onbind抽象方法 d.重寫onstartcommand方法 sta...
安卓四大元件之ContentProvider
contentprovider是內容提供者 為什麼要有內容提供者?因為在安卓中每乙個應用的資料庫檔案都是私有的,自能在自己的應用中自己使用,別的應用要是想訪問,那麼就需要修改檔案的許可權,這樣資料就變的不安全了,所以就引入了內容提供者。首先來說一下內容提供者中的乙個重要的類uri,熟悉uri會使我們...
安卓四大元件之 service
服務 長期後台執行的沒有介面的activity,程式寫法和activity類似。安卓系統程序管理是按照一定規則的 1.預設情況下,關閉掉乙個應用程式,清空了這個應用程式的任務棧,應用程式的程序還會保留。因為手機記憶體較小,方便下次快速啟動應用程式,但是也會帶來記憶體不足的問題。2.安卓系統有一套記憶...