androidbindservice
❶ android使用Service,什麼時候使用bindService()好一點和什麼時候使用startService()好一點
當需求是 比如就拿下載來說吧,下載必須是下載完,中間不能漏掉任何步驟,這時候比如使用bindService(),這時候你點一下返回鍵或者Home鍵(如果你的代碼對返回鍵沒有做特殊代碼處理,比如按兩次返回鍵退出),那麼你的Service就掛掉了,雖然現在有的第三方庫支持斷點續傳的功能,不過前提是用戶再一次啟動服務(就是點「繼續下載」的按鈕),有的用戶不清楚手機,按了返回鍵(你的代碼沒對返回鍵做特殊處理)或者按了Home鍵,以為後台自動下載,所以像這類的,使用startService
❷ android里 activity怎麼向service傳遞參數
android中activity中向service傳遞參數,有如下方法:x0dx0ax0dx0a1.在Activity里注冊一個BroadcastReceiver,Service完成某個任務就可以發一個廣播,接收器收到廣播後通知activity做相應的操作。x0dx0a2.使用bindService來關聯Service和Application,應用.apk里的所有組件一般情況都運行在同一個進程中,所以不需要用到IPC,bindService成功後,Service的Client可以得到Service返回的一個iBinder引用,具體的參見Service的文檔及onBind的例子,這樣Service的引用就可以通過返回的iBinder對象得到,如x0dx0apublic class LocalService extends Service {x0dx0a // This is the object that receives interactions from clients. Seex0dx0a // RemoteService for a more complete example.x0dx0a private final IBinder mBinder = new LocalBinder();x0dx0ax0dx0a public class LocalBinder extends Binder {x0dx0a LocalService getService() {x0dx0a return LocalService.this;x0dx0a }x0dx0a }x0dx0ax0dx0a @Overridex0dx0a public IBinder onBind(Intent intent) {x0dx0a return mBinder;x0dx0a }x0dx0a}x0dx0ax0dx0a之後Client通過這個iBinder對象得到Service對象引用之後,可以直接和Service通訊,比如讀取Service中的值或是調用Service的方法。
❸ android四大組件是什麼
android四大組件是什麼?Android四大組件分別為:Activity/Service/BroadCast Recevicer/Content provider。
Activity:
activity是用戶和應用程序交互的窗口,一個activity相當於我們實際中的一個網頁,當打開一個屏幕時,之前的那一個屏幕會被置為暫停狀態,並且壓入歷史堆棧中,用戶可以通過回退操作返回到以前打開過的屏幕。activity的生命周期:即產生、運行、銷毀,但是這其中會調用許多方法onCreate(創建) 、onStart(激活) 、onResume(恢復) 、onPause(暫停) 、onStop(停止) 、onDestroy(銷毀) 、onRestart(重啟)。
Service:
Service是一種程序,它可以運行很長的時間,相當於後台的一個服務,通過startService(Intent service)可以啟動一個Service,通過Context.bindService()可以綁定一個Service。
BroadCast Recevicer:
接受一種或者多種Intent作觸發事件,接受相關消息,做一些簡單處理,轉換成一條Notification,統一了Android的事件廣播模型。可以使用BroadcastReceiver來讓應用對外一個外部的事件作出響應。Broadcast Receiver通過NotificationManager來通知用戶這些事情發生了,BroadcastReceiver注冊的有兩種方式,一種是可以在AndroidManifest.xml中注冊,另一種可以在運行時的代碼中使用Context.registerReceiver()進行注冊。用戶還可以通過Context.sendBroadcast()將他們自己的intent broadcasts廣播給其他的應用程序。
Content provider:
內容提供者,可通過它來共享自己的數據給外部調用,給第三方應用提供數據訪問的介面。
❹ Android中的Service到底起什麼作用
Service 是android的一種機制,當它運行的時候如果是Local Service,那麼對應的 Service 是運行在主進程的 main 線程上的。如:onCreate,onStart 這些函數在被系統調用的時候都是在主進程的 main 線程上運行的。如果是Remote Service,那麼對應的 Service 則是運行在獨立進程的 main 線程上。因此請不要把 Service 理解成線程,它跟線程半毛錢的關系都沒有!x0dx0ax0dx0a既然這樣,那麼我們為什麼要用 Service 呢?其實這跟 android 的系統機制有關,我們先拿 Thread 來說。Thread 的運行是獨立於 Activity 的,也就是說當一個 Activity 被 finish 之後,如果你沒有主動停止 Thread 或者 Thread 里的 run 方法沒有執行完畢的話,Thread 也會一直執行。因此這里會出現一個問題:當 Activity 被 finish 之後,你不再持有該 Thread 的引用。另一方面,你沒有辦法在不同的 Activity 中對同一 Thread 進行控制。x0dx0ax0dx0a舉個例子:如果你的 Thread 需要不停地隔一段時間就要連接伺服器做某種同步的話,該 Thread 需要在 Activity 沒有start的時候也在運行。這個時候當你 start 一個 Activity 就沒有辦法在該 Activity 裡面控制之前創建的 Thread。因此你便需要創建並啟動一個 Service ,在 Service 裡面創建、運行並控制該 Thread,這樣便解決了該問題(因為任何 Activity 都可以控制同一 Service,而系統也只會創建一個對應 Service 的實例)。x0dx0ax0dx0a因此你可以把 Service 想像成一種消息服務,而你可以在任何有 Context 的地方調用 Context.startService、Context.stopService、Context.bindService,Context.unbindService,來控制它,你也可以在 Service 里注冊 BroadcastReceiver,在其他地方通過發送 broadcast 來控制它,當然這些都是 Thread 做不到的。
❺ android service有什麼用
Service是Android系統中的四大組件之一,它是一種長生命周期的,沒有可視化界面,運行於後台的一種服務程序。如果service是被開啟的,那麼它的活動生命周期和整個生命周期一同結束。如果service是被綁定的,它們它的活動生命周期是在onUnbind()方法返回後結束。
service積極活動的生命時間(active lifetime)是從onStartCommand()或onBind()被調用開始,它們各自處理由startService()或bindService()方法傳過來的Intent對象。
(5)androidbindservice擴展閱讀
service整體的生命時間是從onCreate()被調用開始,到onDestroy()方法返回為止。和activity一樣,service在onCreate()中進行它的初始化工作,在onDestroy()中釋放殘留的資源。
比如,一個音樂播放service可以在onCreate()中創建播放音樂的線程,在onDestory()中停止這個線程。onCreate()和onDestroy()會被所有的service調用,不論service是通過startService()還是bindService()建立。
❻ Android 之 Service(一)啟動,綁定服務
Service(服務)一個運行在後台執行長時間運行的操作組件,它不提供任何用戶界面,作為與Activity同級的組件,它依舊是運行在主線程中。
其它組件可以啟動一個Service,當這個Service啟動之後便會在後台執行,這里需要注意,由於是在主線程中,所以我們需要另外開啟一個線程來執行我們的耗時操作。
此外,一個組件還可以與一個Service進行綁定來實現組件之間的交互,甚至可以執行IPC(Inter-Process Communication)進程間通信。
Service可以在後台執行很多任務,比如處理網路事務,播放音樂,文件讀寫或者與一個內容提供者交互,等等。
本地服務(Local)
該服務依附在主進程上而不是獨立的進程,這樣在一定程度上節約了資源,另外本地服務因為是在同一進程因此不需要IPC,也不需要AIDL。相應bindService會方便很多,當主進程被Kill後,服務便會終止。一般使用在音樂播放器播放等不需要常駐的服務。
遠程服務(Remote Service)
該服務是獨立的進程,對應進程名格式為所在包名加上你指定的android:process字元串。一般定義方式 android:process=":service" 由於是獨立的進程,因此在Activity所在進程被Kill的時候,該服務依然在運行,不受其他進程影響,有利於為多個進程提供服務具有較高的靈活性。由於是獨立的進程,會佔用一定資源,並且使用AIDL進行IPC比較麻煩。一般用於系統的Service,這種Service是常駐的。
startService啟動的服務
用於啟動一個服務執行後台任務,不與組件進行通信,停止服務使用stopService。 當一個應用組件比如activity通過調用startService()來啟動一個服務的時候,服務便處於啟動狀態。一旦啟動,服務可以在後台無限期地運行下去,即使當啟動它的組件已經銷毀。通常情況下,一個啟動的service執行一個單一的操作並且不會返回任何結果給調用者。
bindService啟動的服務
用於啟動的服務需要進行通信。停止服務使用unbindService。 當一個應用組件通過調用bindService()來與一個服務綁定時,服務便處於綁定狀態。一個綁定的服務提供了一個客戶端-伺服器端介面來允許組件與服務進行交互,發送請求,得到結果甚至通過IPC進程間通信來完成操作。只有當其它組件與服務進行綁定時,服務才會處於綁定狀態。多個組件可以同時與服務綁定,但是當他們全部都解除綁定時,服務就會銷毀。
2.BindService:
如果一個Service在某個Activity中被調用bindService方法啟動,不論bindService被調用幾次,Service的 onCreate 方法只會執行一次,同時 onStartCommand 方法始終不會調用。當建立連接後,Service會一直運行,除非調用unbindService來接觸綁定、斷開連接或調用該Service的Context不存在了(如Activity被Finish——即通過bindService啟動的Service的生命周期依附於啟動它的Context),系統在這時會自動停止該Service。
3.StartService AND BindService:
當一個Service在被啟動(startService 的同時又被綁定(bindService ),該Service將會一直在後台運行,並且不管調用幾次, onCreate 方法始終只會調用一次, onStartCommand 的調用次數與startService 調用的次數一致(使用bindService 方法不會調用 onStartCommand )。同時,調用unBindService 將不會停止Service,必須調用stopService 或Service自身的stopSelf 來停止服務。
4.停止Service:
當一個服務被終止(stopService 、stopSelf 、unbindService )時, onDestory 方法將會被調用——所以我們需要在該方法中清除一些工作(依附該Service生命周期上的,比如:停止在Service中創建並運行的線程)。
1.創建服務
如果你才用的是 startService的方式那麼 onBind方法可以忽略
2.注冊服務
3.開啟服務
start:
bind
綁定服務,一般涉及到組件或進程之間的通信,既然需要通信,那麼我們肯定需要一個連接,這里ServiceConnection就是我們所需要的連接,通過Ibinder的傳遞,我們可以獲取到Service的Ibinder對象,從而進行相關操作。
關於粘性服務,這里需要提到 Service的onStartCommand返回值
andorid:name
adroid:exported
android:enabled
android:label
android:process
android:icon
android:permission
關於服務,當我們在應用開發中,如果需要長時間的在後台運行,獨立完成某一些事情的情況下,請使用Service!
此文綜合: http://www.jianshu.com/p/1e49e93c3ec8 以及自己的一些問題看法,用作學習,回顧之用。
Service 前台服務
請參看 紫豪 http://www.jianshu.com/p/5505390503fa