當前位置:首頁 » 安卓系統 » androidservice啟動多次

androidservice啟動多次

發布時間: 2022-09-20 16:30:40

A. Android Service啟動方式

1.startService
①.定義一個類繼承service
②.在manifest.xml文件中配置該service
③.使用context的startService(intent)啟動該service
④.不再使用時,調用stopService(Intent)停止該服務
2.bindService
①.創建bindService服務段,繼承自service並在類中,創建一個實現binder介面的實例對象並提供公共方法給客戶端調用
②.從onbind()回調方法返回此binder實例
③.在客戶端中,從onserviceconnected()回調方法接收binder,並使用提供的方法調用綁定服務

B. android 如何多service同時開啟

可以通過在activity中 設置事件 。當事件出發時 利用intent
Intent intent=new Intent(MainActivity.this, ServiceDemo.class);
switch (v.getId())
{ case R.id.startBtn:
startService(intent); 啟動
break;
case R.id.stopBtn:
stopService(intent); 停用
break;
default:
break;

C. Android中Service的生命周期與啟動方法有什麼區別

●    startService():開啟Service,調用者退出後Service仍然存在。

●    bindService():開啟Service,調用者退出後Service也隨即退出。

Service生命周期:

●    只是用startService()啟動服務:onCreate() -> onStartCommand() -> onDestory

●    只是用bindService()綁定服務:onCreate() -> onBind() -> onUnBind() -> onDestory

●    同時使用startService()啟動服務與bindService()綁定服務:onCreate() -> onStartCommand() -> onBind() -> onUnBind() -> onDestory

D. 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

E. android 一個程序可以啟動多少個服務

理論上講一個程序可以啟動無限制個服務,因為Android並沒有在這方面進行限制,但是Android系統對應用申請的內存數有限制,啟動的服務申請的內存總和不能大於系統對軟體的限制。
另外一個服務可以讓一個應用程序分為很多獨立的模塊,可以很好的管理應用,但是卻不建議濫用。Android的服務仍然是運行在主線程中的,且非常佔用資源,過多的服務會讓軟體卡頓。

F. 如何讓android的service一直在後台運行

1.把service和activity分開,讓service開機啟動。設置一個broadcastreceiver接受開機信號,使用RECEIVE_BOOT_COMPLETED的permission,然後啟動service。activity啟動後綁定到service上,通過ipc機制通信,acitivity結束後松綁。注意安裝後要手動啟動service,不會自動啟動,之後重啟手機後才會隨開機啟動。2.在內存低的時候系統會自動清理進程,這時候後台service可能會被殺掉。可以在onStartCommand中返回START_STICKY,這樣系統有足夠多資源的時候,就會重新開啟service。3.以上不需要NDK,直接用SDK開發就可以了。Android一直運行的後台服務是不存在的,而且也不是最佳實踐,因為一直運行的後台服務會耗費大量系統資源,影響其他程序的響應從而影響到用戶體驗。可以考慮使用如下幾種方案來達到一直運行的效果。1.調用startForeground方法,android:.使用AlarmManager發送定時任務:DiamondsAreForever.ServicesAreNot.我現在也遇到這個問題,我想樓主之所以出現這個問題的原因是,你在Activitiy中創建的Service運行在當前進程中,當你把這個Activitiy的進程殺掉之後,自然這個服務也就停止了。所以我的建議是在startService的時候,讓這個Service運行在與該Activity不同的進程中(可以startService或者開機時創建一個新的進程)。實際上就是Linux裡面的進程操作。可以使用NDK開發,用C或者C++新建一個進程來運行自己的服務,並提高進程優先順序,避免被清理掉(我猜測 和 的推送服務,或許是這么實現的)。有一種做法是開兩個進程來相互監督,一旦其中一個進程被停止,另一個檢測到後,立即或稍後重啟另一個進程。這里可以效仿這種做法。可以開兩個進程,一個用來做前台,另一個負責運行服務,後者沒有activity,由前者初始化並啟動,這樣,當前台進程被關閉時,服務並不被關閉

G. android 的Service裡面多次啟動一個Activity只能用FLAG_ACTIVITY_NEW_TASK,那麼怎麼才能只啟動一次呢

Activity只啟動一次,需要設置Activity的啟動模式。Activity啟動模式有4種,分別為standard、singleTop、singleTask、singleInstance,只要設置為 singleTask就只會啟動一次。

關於Activity四種啟動模式的說明:
1.standard 默認模式,可以不用寫配置。在這個模式下,都會默認創建一個新的實例。因此,在這種模式下,可以有多個相同的實例,也允許多個相同Activity疊加。

2.singleTop 可以有多個實例,但是不允許多個相同Activity疊加。即,如果Activity在棧頂的時候,啟動相同的Activity,不會創建新的實例,而會調用其onNewIntent方法。
3.singleTask 只有一個實例。在同一個應用程序中啟動他的時候,若Activity不存在,則會在當前task創建一個新的實例,若存在,則會把task中在其之上的其它Activity destory掉並調用它的onNewIntent方法。
3.singleInstance只有一個實例,並且這個實例獨立運行在一個task中,這個task只有這個實例,不允許有別的Activity存在。

熱點內容
怎麼把伺服器的ip固定了 發布:2025-01-12 03:55:42 瀏覽:578
php伺服器開發 發布:2025-01-12 03:55:35 瀏覽:672
軟體自製編程 發布:2025-01-12 03:54:00 瀏覽:534
j2ee和java的區別 發布:2025-01-12 03:42:44 瀏覽:581
android6小米 發布:2025-01-12 03:38:35 瀏覽:85
redis與資料庫 發布:2025-01-12 03:20:21 瀏覽:211
怎麼升級安卓100 發布:2025-01-12 03:19:37 瀏覽:516
c語言倒數 發布:2025-01-12 03:14:37 瀏覽:929
如何免費激活行動電話卡安卓 發布:2025-01-12 03:10:27 瀏覽:89
2020凱越精英配置什麼樣 發布:2025-01-12 03:08:02 瀏覽:685