Android Services—概要介紹

來源:互聯網
上載者:User

一個服務就是一個能夠在後台執行長時操作的應用程式組件,並且不提供使用者介面。一個應用程式組件能夠啟動一個服務,即使使用者切換到另一個應用程式,這個服務也會繼續在後台運行。另外,一個組件能夠綁定一個跟它互動的服務,甚至是處理序間通訊(IPC)。例如,一個服務可以處理網路事務、播放音樂、執行檔案I/O、或者跟內容提供器互動,所有這些都是在後台完成的。

 一個Service基本上有兩種形式:

被啟動(Started)

當應用程式組件(如一個Activity)通過調用startService()方法啟動的服務是“被啟動(started)”的。服務一旦啟動,它就能夠無限期的在後台運行,即使啟動它的組件被銷毀。通常,一個被啟動的服務之星一個單一操作,並且不給調用者返回結果。例如,這個服務可能在網路上下載或上傳檔案。當操作完成的時候,服務應該自己終止。

被綁定(Bound)

當一個應用程式組件通過調用bindService()方法綁定的服務是“被綁定(bound)”的。一個被綁定的服務會提供一個允許組件跟服務互動的用戶端介面,用於發送請求、擷取結果、甚至是跨進程的處理序間通訊(IPC)。一個被綁定的服務的已耗用時間跟綁定它的應用程式組件一樣長。多個組件能夠綁定一個服務,但是只有所有這些綁定解除綁定,這個服務才被銷毀。

儘管這份文檔分開討論服務的這兩種方式,但是你的服務能夠用這兩種方式工作---它能夠被啟動(無限期的運行),也允許綁定。這取決你是否實現了一對回調方法:運行組件啟動的onStartCommand()方法和允許綁定的onBind()方法。

無論你的應用程式是啟動、綁定或同時使用這兩種方式開啟一個服務,任何應用程式組件都能使用這個服務(即使是單獨的應用程式),用同樣的方法,任何組件能夠使用一個Activity---通過Intent啟動Activity。但是,你能夠在資訊清單檔中聲明私人的服務,並且阻止來自其他應用程式的訪問。

警告:一個服務運行在它的宿主進程的主線程中---這個服務不建立它自己的線程,並且不在一個單獨的進程中運行(除非你指定)。這就意味著如果你的服務要做一些頻繁的CPU工作或阻塞操作操作(如MP3的回放或網路操作),你應該在這個服務中建立一個新的線程來做這項工作。通過使用一個單獨的線程,你會減少應用程式不響應(ANR)的錯誤風險,並且應用程式的主線程能夠保留給使用者,專用於跟Activity的互動。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.