中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android Service的生命周期2

發布時間:2020-06-09 13:56:57 來源:網絡 閱讀:263 作者:yangxiaoming123 欄目:移動開發

有了 Service 類我們如何啟動他呢,有兩種方法:

      Context.startService() 
      Context.bindService()


     1.  在同一個應用任何地方調用 startService() 方法就能啟動 Service 了,然后系統會回調 Service 類的 onCreate() 以及 onStart() 方法。這樣啟動的 Service 會一直運行在后臺,直到 Context.stopService() 或者 selfStop() 方法被調用。另外如果一個 Service 已經被啟動,其他代碼再試圖調用 startService() 方法,是不會執行 onCreate() 的,但會重新執行一次 onStart() 。

      2. 另外一種 bindService() 方法的意思是,把這個 Service 和調用 Service 的客戶類綁起來,如果調用這個客戶類被銷毀,Service 也會被銷毀。用這個方法的一個好處是,bindService() 方法執行后 Service 會回調上邊提到的 onBind() 方發,你可以從這里返回一個實現了 IBind 接口的類,在客戶端操作這個類就能和這個服務通信了,比如得到 Service 運行的狀態或其他操作。如果 Service 還沒有運行,使用這個方法啟動 Service 就會 onCreate() 方法而不會調用 onStart()。

     

      總結:

      1. startService()的目的是回調onStart()方法,onCreate() 方法是在Service不存在的時候調用的,如果Service存在(例如之前調用了bindService,那么Service的onCreate方法已經調用了)那么startService()將跳過onCreate() 方法。

      2.  bindService()目的是回調onBind()方法,它的作用是在Service和調用者之間建立一個橋梁,并不負責更多的工作(例如一個Service需要連接服務器的操作),一般使用bindService來綁定到一個現有的Service(即通過StartService啟動的服務)。

      由于Service 的onStart()方法只有在startService()啟動Service的情況下才調用,故使用onStart()的時候要注意這點。

 

與 Service 通信并且讓它持續運行

      如果我們想保持和 Service 的通信,又不想讓 Service 隨著 Activity 退出而退出呢?你可以先 startService() 然后再 bindService() 。當你不需要綁定的時候就執行 unbindService() 方法,執行這個方法只會觸發 Service 的 onUnbind() 而不會把這個 Service 銷毀。這樣就可以既保持和 Service 的通信,也不會隨著 Activity 銷毀而銷毀了。

 

提高 Service 優先級

      Android 系統對于內存管理有自己的一套方法,為了保障系統有序穩定的運信,系統內部會自動分配,控制程序的內存使用。當系統覺得當前的資源非常有限的時候,為了保 證一些優先級高的程序能運行,就會殺掉一些他認為不重要的程序或者服務來釋放內存。這樣就能保證真正對用戶有用的程序仍然再運行。如果你的 Service 碰上了這種情況,多半會先被殺掉。但如果你增加 Service 的優先級就能讓他多留一會,我們可以用 setForeground(true) 來設置 Service 的優先級。

      為什么是 foreground ? 默認啟動的 Service 是被標記為 background,當前運行的 Activity 一般被標記為 foreground,也就是說你給 Service 設置了 foreground 那么他就和正在運行的 Activity 類似優先級得到了一定的提高。當讓這并不能保證你得 Service 永遠不被殺掉,只是提高了他的優先級。

 

摘自網絡其他資料:關于Service生命周

Android Service生命周期與Activity生命周期是相似的,但是也存在一些細節上也存在著重要的不同:

onCreate和onStart是不同的

通過從客戶端調用Context.startService(Intent)方法我們可以啟動一個服務。如果這個服務還沒有運行,Android將啟動它并且在onCreate方法之后調用它的onStart方法。如果這個服務已經在運行,那么它的onStart方法將被新的Intent再次調用。所以對于單個運行的Service它的onStart方法被反復調用是完全可能的并且是很正常的。

onResume、onPause以及onStop是不需要的

回調一個服務通常是沒有用戶界面的,所以我們也就不需要onPause、onResume或者onStop方法了。無論何時一個運行中的Service它總是在后臺運行。

onBind

如果一個客戶端需要持久的連接到一個服務,那么他可以調用Context.bindService方法。如果這個服務沒有運行方法將通過調用onCreate方法去創建這個服務但并不調用onStart方法來啟動它。相反,onBind方法將被客戶端的Intent調用,并且它返回一個IBind對象以便客戶端稍后可以調用這個服務。同一服務被客戶端同時啟動和綁定是很正常的。

onDestroy

與Activity一樣,當一個服務被結束是onDestroy方法將會被調用。當沒有客戶端啟動或綁定到一個服務時Android將終結這個服務。與很多Activity時的情況一樣,當內存很低的時候Android也可能會終結一個服務。如果這種情況發生,Android也可能在內存夠用的時候嘗試啟動被終止的服務,所以你的服務必須為重啟持久保存信息,并且最好在onStart方法內來做。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

山阴县| 皮山县| 阳曲县| 海宁市| 新建县| 香格里拉县| 湘阴县| 望都县| 内黄县| 河北省| 卢湾区| 买车| 钟山县| 西和县| 准格尔旗| 阳西县| 东源县| 北流市| 桂阳县| 乐至县| 自治县| 定襄县| 肃南| 浏阳市| 龙川县| 华容县| 苏尼特左旗| 锡林浩特市| 和平区| 修文县| 怀集县| 襄汾县| 平江县| 新绛县| 武穴市| 读书| 南城县| 昂仁县| 东明县| 平安县| 尤溪县|