Service前後臺相關

2021-08-13 01:56:11 字數 2323 閱讀 7911

前言:service是一種計算型別的元件,也是執行在ui執行緒中;service中同樣也不能進行耗時操作,否則就會導致無響應,ams就會給我彈個anr(前台服務比後台服務的時間更短,超過就會anr;至於多少時間就無響應,請可自行查詢)。

執行專案,上圖可以看到控制台有兩個可選的程序,第乙個是預設的程序名,第二個則是剛才指定的程序;

可以看到控制台的輸出日誌,下圖:

根據輸出日誌可以看到,我們的日誌在兩個程序中分別執行一次,由此可得出oncreate也執行了兩次。

根據以上結果,我們可以對於一些初始化操作進行優化,一般只需在預設程序中進行初始化即可

public boolean ismainprocess() 

}return false;

}

二、service的啟動方式:

service的啟動分為startservice和bindservice兩種

1.startservice(intent):首次啟動service的時候,依次執行oncreate,startcommand方法!因為通過該方式啟動的service不會隨著應用退出而結束,必須通過呼叫stopservice方法才能停止服務。多次startservice,不會多次建立oncreate,後面會直接走startcommand方法!

2.bindservice(intent,mconnection,context.bind_auto_create):onbind方法!因為通過該方式啟動的service在程式是和啟動者繫結的,當前者退出了,該服務的unbindservice方法會被呼叫,停止service服務!

需要注意的是,從android 5.0之後,如果目標service和啟動service的介面不在同一應用,客戶端不止需要setaction("***x"),還需要在setpackage("目標service所在專案的包名"),如下圖所示。

三、保活的兩種操作:

(一)可以配合使用廣播實現,這種方法適用於正常關閉的情況:

1.每當service關閉的時候,在service的ondestroy方法中傳送乙個廣播:

intent intent = new intent("com.example.testbroadcastreceiver");

sendbroadcast(intent);

2.然後註冊乙個廣播接受者,當接收到發的廣播,就啟動service:

public class keepalivebroadcastreceiver extends broadcastreceiver}}

3.在manifest中進行進行註冊:

(二)啟動前台service:

if (build.version.sdk_int >= build.version_codes.o) else
service中的startcommand如下:

@override

public int onstartcommand(intent intent, int flags, int startid)

startforeground(1, builder.build());//前台通知,通過stopforeground(true)關閉

// mnotificationmanager.notify(1, notification);//普通通知

return super.onstartcommand(intent, flags, startid);

}

所以,程序保活其實第二種才是我們最常用的方法,這樣一鍵殺程序就殺不掉我們的應用了(只能手動單獨殺)

以上是service的一些基本介紹,如有問題,歡迎指出!!

前後臺分離 概念相關

js 包管理器 1 npm 2 bower 1 復用別人已經寫好的 2 管理包之間的依賴關係。js 語言,可以理解為一種規範 v8 直譯器吧,理解為 js 這門語言的具體實現 node 有直譯器還得有一票基礎的類庫吧,比如什麼內建物件啊模組啊,就好像瀏覽器有 v8 也有 bom 物件這些,node ...

前後臺系統

早期的嵌入式系統中沒有作業系統的概念,程式設計師編寫嵌入式程式通常直接面對裸機及裸裝置。在這種情況下,通常把嵌入式程式分成兩部分,即前台程式和後台程式。前台程式通過中段來處理事件,其結構一般為無限迴圈 後台程式則掌管整個嵌入式系統軟 硬體資源的分配 管理以及任務的排程,是乙個系統管理排程程式。這就是...

前後臺系統

早期的嵌入式系統中沒有作業系統的概念,程式設計師編寫嵌入式程式通常直接面對裸機及裸裝置。在這種情況下,通常把嵌入式程式分成兩部分,即前台程式和後台程式。應用程式是乙個無限的迴圈,迴圈中呼叫相應的函式完成相應的操作,這部分可以看成後台行為。前台程式通過中斷來處理事件 後台程式則掌管整個嵌入式系統軟 硬...