簡體   English   中英

Android 服務崩潰行為

[英]Android service crash behaviour

我知道服務崩潰行為在 android 中很常見,如果發生崩潰,服務將自動重啟。

我有三個服務(A、B、C)在啟動時運行,一個服務(A)啟動其他兩個服務(B 和 C)。 所以我的問題是,如果一項服務崩潰,那么其他兩項服​​務同時崩潰是否會產生影響?

當我測試這些服務時,80% 的時間如果我的服務 A 崩潰,那么其他兩個服務也崩潰了,20% 的時間,一次只有一個服務(A/B/C)崩潰。

該服務崩潰時的正確行為是什么?

當 Android 操作系統內存不足時,它首先關閉后台占用內存的任何內容 - 這是定義的行為。

您應該使用“START_STICKY”啟動您的服務,這樣操作系統將在再次有內存時重新啟動您的服務(這可能不會發生),如下所示:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.i("LocalService", "Received start id " + startId + ": " + intent);
    // We want this service to continue running until it is explicitly
    // stopped, so return sticky.
    return START_STICKY;
}

請參閱此詳細答案: 如何強制重啟服務?

您可以在此處閱讀有關服務的更多信息:http ://developer.android.com/reference/android/app/Service.html

“我的問題是,如果一項服務崩潰,那么其他兩項服​​務同時崩潰是否會產生影響?”

不,不會。

“我有三個服務(A、B、C)在啟動時運行,一個服務(A)啟動其他兩個服務(B 和 C)。”

這沒有任何問題,但我建議在啟動時獨立啟動每個服務。 為什么? 因為它會減少您的服務之間不必要的聚合。

“當這些服務崩潰時,這些服務的正確行為是什么?”

系統會自行終止服務以獲取內存。

沒有“正確”或固定的服務可以被終止的順序,這完全取決於誰獲得了更多的內存來釋放並且正在做不那么重要的事情。

如果服務 A 依賴於服務 B/c。 不僅僅是它會導致破壞否則不會。

例如,如果您的應用使用 FirebaseAuth 服務。 當 gms 更新時,FirebaseAuth 服務將被終止並重新啟動,您的應用服務也將被終止並重新啟動。

暫無
暫無

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

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