簡體   English   中英

在Android中具有巨大整體代碼庫的應用程序中粘性服務的影響?

[英]Impact of sticky service in an application with huge monolith code base in Android?

眾所周知, Java內存模型由數據(或代碼),堆棧和堆段組成。 我認為Android的情況也是如此。 我有一個monolith應用程序(讓我們考慮這個應用程序的代碼庫太大了)。 當我啟動應用程序時,應用程序中的活動和片段將加載到Dalvik JVM中並卸載。 在這種情況下,這如何與服務一起使用? 假設我有一個STICKY_SERVICE

public class CountingNumberService extends Service {
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        for(int i=0; i<100; i++) {
            //Do something
        }
        return Service.START_STICKY;
    }
    @Override
    public IBinder onBind(Intent intent) {
        /**
         * This has to do with some inter process communication
         */
        return null;
    }
}

由於服務是STICKY因此它使進程表現得像一個持久進程,並且它始終在運行。 現在考慮我停止使用我的應用程序,作為用戶,我認為應用程序已關閉(我正在關閉它或從最近清除它)但由於我的服務是STICKY它將始終運行,我認為我會產生以下影響,

  1. 我會吃用戶的電池。
  2. 一些額外的代碼(服務除外)將與應用程序一起運行(?)但不確定。 如果整個應用程序位於數據段內,則不允許其他應用程序順利運行。

我對STICKY服務的流程(一個龐大的整體代碼)感到困惑,這會產生影響。 有人可以澄清一下嗎?

由於服務是STICKY,因此它使進程表現得像一個持久進程,並且它始終在運行。

不,不是的。

但由於我的服務是STICKY,它總是會運行

不,它不會。

引用START_STICKY的文檔

如果此服務的進程在啟動時被onStartCommand(Intent, int, int)onStartCommand(Intent, int, int)返回后),則將其保留在啟動狀態但不保留此傳遞的意圖。 稍后系統將嘗試重新創建服務。

我們仍歡迎Android終止您認為合適的流程。 所有START_STICKY都鼓勵Android在條件允許的情況下重啟您的服務(在此過程中分配新流程)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM