bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

android中service的實現方法,android service組件的功能

android中service的實現方法是

異步執行

創新互聯是一家集網站建設,青羊企業網站建設,青羊品牌網站建設,網站定制,青羊網站建設報價,網絡營銷,網絡優化,青羊網站推廣為一體的創新建站企業,幫助傳統企業提升企業形象加強企業競爭力。可充分滿足這一群體相比中小企業更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們為更多的企業打造出實用型網站。

android中,activity、service都是在主線程,service與activity的主要區別就是service沒有前臺界面,不能直接與用戶交互,另外可以相對保證不會被系統隨便的kill掉。所以service適用于一些無需交互的后臺操作,但如果你直接在service中進行耗時操作的話,因為在主線程所以依然會出現和activity主線程一樣的超時的問題,所以好的方式是在service中啟動其他的線程去執行耗時操作。

Android應用組件 —— Service

官方原文: 地址

本文摘錄自官方原文,方便自己觀看。

service 是一個可以在后臺長時間運行的操作而不提供用戶界面的應用組件。服務可以由其他應用組件啟動,而且即使用戶切換到其他應用程序,服務仍將在后臺繼續運行。此外,組件可以綁定到服務,以與之進行交互,甚至執行進程間的通信(IPC)

服務基本分為兩種形式:

啟動

綁定

上述雖然分開概括這兩種服務,但是服務可以同時以這兩種方式運行,也就是說,他既可以是啟動服務(以無限期運行),也允許綁定。問題在于是否實現了一組回調方法: onStartCommand() (允許組件啟動服務)和 onBing() (允許綁定服務)。

無論應用是出于啟動狀態還是綁定狀態,亦或處于啟動并且綁定狀態,任何應用組件均可以像使用Activity那么調用Itent來使用服務(即使此服務來自另一應用)。 不過,您可以通過清單文件將服務聲明為私有服務,并阻止其他應用訪問。 使用清單文件聲明服務部分將對此做更詳盡的闡述。

注意:

服務在其托管進程的主線程中運行,它既不創建自己的線程,也不在單獨的進程中運行(除非另行指定)。這意味著,如果服務將執行任何CPU密集型工作或者阻止性操作(我理解為耗時操作,例如 MP3 播放或聯網),則應在服務內創建新線程來完成這項工作。通過使用單獨的線程,可以降低發生“應用無響應”(ANR) 錯誤的風險,而應用的主線程仍可繼續專注于運行用戶與 Activity 之間的交互。

要創建服務,您必須創建 Service 的子類(或使用它的一個現有子類)。在實現中,您需要重寫一些回調方法,以處理服務生命周期的某些關鍵方面并提供一種機制將組件綁定到服務(如適用)。 應重寫的最重要的回調方法包括:

onStartCommand()

onBind()

onCreate()

onDestroy()

如果組件通過調用 startService() 啟動服務(這會導致對 onStartCommand() 的調用),則服務將一直運行,直到服務使用 stopSelf() 自行停止運行,或由其他組件通過調用 stopService() 停止它為止。

如果組件是通過調用 bindService() 來創建服務(且未調用 onStartCommand() ,則服務只會在該組件與其綁定時運行。一旦該服務與所有客戶端之間的綁定全部取消,系統便會銷毀它。

如同 Activity(以及其他組件)一樣,您必須在應用的清單文件中聲明所有服務。

要聲明服務,請添加 service 元素作為 application 元素的子元素。例如:

為了確保應用的安全性, 請始終使用顯式 Intent 啟動或綁定 Service,且不要為服務聲明 Intent 過濾器。 啟動哪個服務存在一定的不確定性,而如果對這種不確定性的考量非常有必要,則可為服務提供 Intent 過濾器并從 Intent 中排除相應的組件名稱,但隨后必須使用 setPackage() 方法設置 Intent 的軟件包,這樣可以充分消除目標服務的不確定性。

此外,還可以通過添加 android:exported 屬性并將其設置為 "false" ,確保服務僅適用于您的應用。這可以有效阻止其他應用啟動您的服務,即便在使用顯式 Intent 時也如此

Service

IntentService

簡單地說,服務是一種即使用戶未與應用交互也可在后臺運行的組件。 因此,您應僅在必要時才創建服務。

如需在主線程外部執行工作,不過只是在用戶正在與應用交互時才有此需要,則應創建新線程而非服務。 例如,如果您只是想在 Activity 運行的同時播放一些音樂,則可在 onCreate() 中創建線程,在 onStart() 中啟動線程,然后在 onStop() 中停止線程。您還可以考慮使用 AsyncTask 或 HandlerThread,而非傳統的 Thread 類。

前臺服務被認為是用戶主動意識到的一種服務,因此在內存不足時,系統也不會考慮將其終止。 前臺服務必須為狀態欄提供通知,放在“正在進行”標題下方,這意味著除非服務停止或從前臺移除,否則不能清除通知。

要請求讓服務運行于前臺,請調用 startForeground() 。此方法采用兩個參數:唯一標識通知的整型數和狀態欄的 Notification 。例如:

注意 :提供給 startForeground() 的整型 ID 不得為 0。

要從前臺移除服務,請調用 stopForeground() 。此方法采用一個布爾值,指示是否也移除狀態欄通知。 此方法不會停止服務。 但是,如果您在服務正在前臺運行時將其停止,則通知也會被移除。

與 Activity 類似,服務也擁有生命周期回調方法,您可以實現這些方法來監控服務狀態的變化并適時執行工作。 以下框架服務展示了每種生命周期方法:

注 :與 Activity 生命周期回調方法不同,您 不 需要調用這些回調方法的超類實現。

注 :盡管啟動服務是通過調用 stopSelf() 或 stopService() 來停止,但是該服務并無相應的回調(沒有 onStop() 回調)。因此,除非服務綁定到客戶端,否則在服務停止時,系統會將其銷毀 — onDestroy() 是接收到的唯一回調。

Android中服務service

本文原文連接

Service是Android中的四大組件之一,它的級別和Activity差不多。只不過Service沒有頁面顯示,只能后臺運行,可以和其他組件進行交互。

Service的后臺運行并不是子線程,是在主線程中進行的,只是它沒有界面顯示。如果Service進行了耗時操作同樣需要開啟子線程,否則會跟Activity一樣出現ANR問題(application not response–程序沒有響應)。

補充說明:

主線程的內容包括UI和后臺,只要程序中的UI或者后臺其中一個在跑,程序都算是在運行狀態。

1,創建一個自己的TestService繼承Service

2,必須實現重寫其中的onBind方法,可以在里邊做各種操作,也可以接收傳遞過來的Intent的數據。

(在Android Studio中可以直接新建一個Service)

服務的注冊是四大組件中最簡單的一個,一般只要設置name屬性就可以了。

1,startService()啟動

(1)啟動服務startService:onCerate(),onStart()

(2)停止服務stopService:onDestroy()

此方法啟動服務,服務如果未被創建,系統會先調用onCreate()方法,接著調用onStrat()方法。如果調用startService前服務已經被啟動,多次調用啟動方法,不會多次調用onCreate,但會導致多次調用onStrat。

2,bindService()啟動

(1)綁定bindService:onCreate(),onBind()

(2)解除綁定unbindService:onUnbind()

(3)正常停止程序服務的方法是先接觸綁定unbindService,在停止服務stopService

綁定后調用stopService方法,這時候是不能停止服務的,如果這時再調用解綁unbindService,程序會先解綁,后停止服務。

用此方法啟動服務,在服務未被創建時,會先調用onCreate(),接著調用onBind()方法,這時候調用者和服務綁定在一起,調用者退出,系統會先調用服務的onUnbind(),然后onDestroy()。如果調用bindService之前服務已經被綁定,多次調用bindService并不會導致onCreate()和onBind()方法被多次調用。如果調用者想與正在綁定的服務解除綁定,可以調用unbindService()。

(1),onCerate()服務第一次被創建

(2),onStartComand()服務開始工作

(3),onBind()服務已經綁定

(4),onUnBind()服務解綁

(5),onDestroy()服務已經停止

普通的Service進行耗時操作要創建一個線程去完成,因為service是在主線程運行的,并且這個子線程完成工作要手動停止 。IntentService是繼承了Service并處理起步請求的一個類,在IntentService內有一個工作線程,來處理耗時操作,啟動IntentService的方式和啟動傳統的Service是一樣,當任務執行完成后,IntentService會自動停止,而不需要我們去控制。

可以啟動多次IntentService,每一個耗時操作會以工作隊列的方式在IntentService的onHandleIntent回調方法中執行,并且每次只會執行一個工作線程,執行完第一個再執行第二個,以此類推,而且,所有請求都在一個單線程中,不會阻塞主線程,同一時間只處理一個請求。

IntentService優點

1,省去了在Service中開線程的麻煩

2,當操作完成時,不用手動停止Service。IntentService是Service,但是比Service更智能。

Android使用JobService實現后臺服務

前言

在Android經常要實現定時服務,定時某個時刻推送消息或者更新數據。比如需要在夜晚8:00-10:00之間,推送一條消息、彈窗、或者其他操作。

一般我們可能是開啟Service,在Service中使用AlarmManager,setRepeating定時請求,但是從API19起,并不能保證時效的準確,在5.0以后,Google推出了一個JobService,用來執行一些并非即時執行的后臺進程。

使用

在JobService中有兩個抽象方法onStartJob(JobParameters)和onStopJob(JobParameters)。onStartJob在JobService被調度到的時候會執行,我們只需要繼承JobService然后重寫onStartJob方法,并在里面執行我們的后臺任務就可以了。

This service executes each incoming job on a Handler running on your application's

main thread. This means that you must offload your execution logic to another

thread/handler/AsyncTask of your choosing. Not doing so will result in blocking any

future callbacks from the JobManager - specifically onStopJob(android.app.job.JobParameters), which is meant to inform you that the

scheduling requirements are no longer being met.

即:JobService默認在主線程中處理傳入的每個操作,這意味著,你必須開一個新線

程來執行你的耗時操作,如果不這樣操作,將會阻塞來自JobManager的任何操作,特別是onStopJob操作

在Activity中,啟動服務

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

if (Build.VERSION.SDK_INT = Build.VERSION_CODES.LOLLIPOP) {

doService();

}

}

例子里可以看到,一共有五個條件,

如果我們的后臺任務滿足JobService的一個或多個約束條件,就可以考慮是不是應該用JobService來執行。

文章標題:android中service的實現方法,android service組件的功能
瀏覽路徑:http://vcdvsql.cn/article26/dsdigjg.html

成都網站建設公司_創新互聯,為您提供品牌網站建設定制網站標簽優化外貿網站建設商城網站網站營銷

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

外貿網站制作