導航:首頁 > 操作系統 > android銷毀服務

android銷毀服務

發布時間:2022-12-27 21:40:07

android:當Activity和Service 都被銷毀後,如何控制其中生成的線程

1.首先
android
一個程序中
的activity
都是一個線程,service和activity也是一個線程
2.在activity
中啟動一個子線程,當前activity
finish
destroy掉
子線也會運行的。
3.在service里的線程
與activity很類似
service即使停止了
線程也在運行(要先停止服務
再把最近使用的進程殺掉
線程會停止
,如果直接殺掉進程
android會再次自動啟動這個service的
此時即使再停止service服務
線程也會一直運行了除非關機)
activity
finish
子線程依舊可以運行,即使程序退出了子線程也在運行
(除非在任務管理器里
把最近使用的進程殺掉)
4.JVM有很好的管理機制,系統最後會自動釋放回收。作為手動回收來說,你可以調用interrupt

Ⅱ Android 服務的限制

Google官網將Android服務分為了三種,前台服務,後台服務和綁定服務:

前台服務執行一些用戶能注意到的操作。例如,音頻應用會使用前台服務來播放音頻曲目。前台服務必須顯示 通知 。即使用戶停止與應用的交互,前台服務仍會繼續運行。

後台服務執行用戶不會直接注意到的操作。例如,如果應用使用某個服務來壓縮其存儲空間,則此服務通常是後台服務。

當應用組件通過調用 bindService() 綁定到服務時,服務即處於 綁定 狀態。綁定服務會提供客戶端-伺服器介面,以便組件與服務進行交互、發送請求、接收結果,甚至是利用進程間通信 (IPC) 跨進程執行這些操作。僅當與另一個應用組件綁定時,綁定服務才會運行。多個組件可同時綁定到該服務,但全部取消綁定後,該服務即會被銷毀。

我個人理解服務可以分為兩種, 前台 和 後台 ,而 綁定 應該是被當作一種狀態,因為 前台服務 和 後台服務 都可以進行綁定。

基於這個理解,我們將限制分成了前台和後台兩個部分:

從 Android 5.0(API 級別 21)開始,如果使用隱式 Intent 調用 bindService() ,則系統會拋出異常。為確保應用的安全性,在啟動 Service 時,請始終使用顯式 Intent,且不要為服務聲明 Intent 過濾器。

在後台中運行的 Service 會消耗設備資源,這可能會降低用戶體驗。 為了緩解這一問題,系統對這些 Service 施加了一些限制。

處於前台時,應用可以自由創建和運行前台與後台 Service。

Android 8.0 開始:系統不允許後台應用創建後台 Service。否則該函數將引發一個 IllegalStateException。

Android 8.0 開始:進入後台時,在一個持續數分鍾的時間窗內,應用仍可以創建和使用 Service。 在該時間窗結束後,應用將被視為處於 空閑 狀態。 此時,系統將停止應用的後台 Service,就像應用已經調用 Service 的 Service.stopSelf() 方法一樣。

為了解除這種限制,可以使用 JobScheler 作業替換後台 Service。

在 Android 8.0 之前,創建前台 Service 的方式通常是先創建一個後台 Service,然後將該 Service 推到前台。

而在Android 8.0 之後,系統不允許後台應用創建後台 Service。

解決方案:調用 startForegroundService() ,以在前台啟動新 Service。

在系統創建 Service 後,應用有五秒的時間來調用該 Service 的 startForeground() 方法以顯示新 Service 的用戶可見通知。 如果應用在此時間限制內 未 調用 startForeground() ,則系統將停止此 Service 並聲明此應用為 ANR 。

前台服務必須顯示優先順序為 PRIORITY_LOW 或更高的 狀態欄通知 ,這有助於確保用戶知道應用正在執行的任務。如果某操作不是特別重要,因而您希望使用最低優先順序通知,則可能不適合使用服務;相反,您可以考慮使用 計劃作業 。

在 Android 9 (API 28)之後,使用前台服務必須申請 FOREGROUND_SERVICE 許可權,否則會報 SecurityException 。 這是普通許可權,因此,系統會自動為請求許可權的應用授予此許可權。

每個運行服務的應用都會給系統帶來額外負擔,從而消耗系統資源。如果應用嘗試使用低優先順序通知隱藏其服務,則可能會降低用戶正在主動交互的應用的性能。因此,如果某個應用嘗試運行擁有最低優先順序通知的服務,則系統會在抽屜式通知欄的底部調用出該應用的行為。

以 Android 12 為目標平台的應用在後台運行時無法再啟動 前台服務 。

Android 11 及以後,系統對前台服務何時可以訪問設備的位置、攝像頭或麥克風進行了限制。

如果您的應用以 Android 11 或更高版本為目標平台,且在前台服務中訪問攝像頭或麥克風,則必須添加 前台服務類型 camera 和 microphone 。

如果你的應用 在後台運行時啟動了某項前台服務 :

如果某服務的功能(位置、麥克風 和 相機)受到了限制,則Logcat中會列印如下語句:

Ⅲ Android基礎:Service —— 默默為你服務

Service有兩種啟動方式,分別為 context.startService() context.bindService() 。這里要提到Service的生命周期,兩種不同的啟動方式有不同的生命周期:

Tips:

首先創建自己的Service類,重寫其生命周期,並在mainfest.xml中進行注冊。

必須注冊Service,不然不會調用。簡單注冊:

補充下Service在manifest中的屬性以及作用:

接下來,我們就可以用下面的兩個方法來啟動和停止服務。

首先在我們的Activity中創建Service連接對象,重寫連接和斷開的方法。創建自定義的Binder對象,在 onServiceConnected() 中賦值然後可以調用自定義Binder中的方法。使用下方的bind()方法來綁定服務,使用 unBind() 來解綁服務。

這里會用到Service的 onBind() onUnbind() 的生命周期,我們在TestService中重寫之。這里要注意的是,使用bindService()方法啟動的Service,不會調用 onStartCommand() 的生命周期。此外,創建自定義Binder類和對象。

這樣,當我們使用Activity中的bind()方法來綁定服務,會自動啟動服務,而我們又重寫了 onServiceConnected() 方法並使用myBinder來調用方法。這樣我們就可以用它來Activity和Service來進行通信。

特別Tips:
如果先使用 startService() 來開啟服務和 bindService() 來綁定服務,當使用 unbindService() 解綁時,Service並不會被銷毀。而是使用 stopService() 才能銷毀服務。

前台服務和後台服務的區別:

在Service中進行操作,將服務類型以前台的方式運行顯示在通知欄。

運行效果:

暫時引用吧,有空再實現一個:

參考資料:

Ⅳ 分享:Android入門開發之銷毀activity

使用:

銷毀、關閉頁面activity

如果打開下個頁面的同時銷毀了本頁面,在下個頁面無法返回本頁面,每次打開APP應用就會先顯示一張APP的介紹圖、或者LOGO頁面,延時幾秒進入應用,進入後無法再返回LOGO頁面,就是將LOGO頁面進行了摧毀finish();

方法:

finish();銷毀activity

activity名.finish();銷毀指定activity,等同於this

this.finish();銷毀本頁面activity

activity名.instance.finish();在本頁面銷毀其他頁面的activity

用法1:用返回鍵,點擊返回鍵觸發onTouchEvent

1.@Override

2.public boolean onTouchEvent(MotionEvent event){

3.finish();

4.return true;

5.}

用法2:銷毀其他頁面

1. //在需要銷毀的頁面:

2. //定義一個靜態全局變數instance

3. public static MainActivity instance =

null;

4. //在onCreate里

5. instance = this;

6.

7. //在執行銷毀的頁面:

8. MainActivity .instance.finish();

9.

10. //MainActivity就被銷毀了

銷毀不用activity可以節約內存的佔用!APP在線自動化測試工具: www.ineice.com

Ⅳ android 裡面如何銷毀一個Service 在網上找了很多答案System.exit(0);ActivityManager之類的都沒用!

確實有stopSelf()方法,不過需要在你的service類裡面調用。
在外面可以使用Context.StopService()方法

可以看看Google文檔http://developer.android.com/reference/android/app/Service.html

final void stopSelf()Stop the service, if it was previously started.

或者再網路一下,多試試,肯定能搞定的

Ⅵ android中啟動service的activity銷毀了,這時怎麼關閉service

可以在銷毀Activity時 通知 service 銷毀。
在Activity :
onDestory(){
//
發送 廣播 通知 serivice 關閉。
sendBroadCast();
}

閱讀全文

與android銷毀服務相關的資料

熱點內容
考駕照怎麼找伺服器 瀏覽:882
阿里雲伺服器如何更換地區 瀏覽:968
手機app調音器怎麼調古箏 瀏覽:501
銳起無盤系統在伺服器上需要設置什麼嗎 瀏覽:17
紅旗計程車app怎麼應聘 瀏覽:978
如何編寫linux程序 瀏覽:870
吉利車解壓 瀏覽:248
java輸入流字元串 瀏覽:341
安卓軟體沒網怎麼回事 瀏覽:785
dvd壓縮碟怎麼導出電腦 瀏覽:274
冒險島什麼伺服器好玩 瀏覽:541
如何在伺服器上做性能測試 瀏覽:793
命令序列錯 瀏覽:259
javaif的條件表達式 瀏覽:576
手機app上傳的照片怎麼找 瀏覽:531
雲伺服器面臨哪些威脅 瀏覽:748
c語言各種編譯特點 瀏覽:177
路由器多種加密方法 瀏覽:604
程序員阻止電腦自動彈出定位 瀏覽:168
如何做伺服器服務商 瀏覽:762