我知道服务崩溃行为在 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 服务将被终止并重新启动,您的应用服务也将被终止并重新启动。