我的后台服务执行我的应用程序的核心功能,并在UI打开时首先启动。
因此,当应用程序在Play商店中更新时,该服务将被终止,但UI可能无法再次打开(所以我猜服务也不会再次启动)。这对我来说不好,因为服务执行核心应用程序的功能。 我该如何克服这个问题?
非常感谢任何帮助
答案 0 :(得分:2)
是的,每个应用都会在更新期间被杀死 - 请参阅我的回答here
您可以将服务作为STICKY服务,这项服务在被杀时重新启动。来自docs:
public static final int START_STICKY 在API级别5中添加
从onStartCommand(Intent,int,int)返回的常量:如果是这样 服务的进程在启动时被终止(在返回之后) onStartCommand(Intent,int,int)),然后将其保持在启动状态 但不要保留这个意图。稍后系统会尝试 重新创建服务。因为它处于启动状态,它会 保证在创建后调用onStartCommand(Intent,int,int) 新服务实例;如果没有任何挂起的启动命令 如果被传递给服务,它将被调用null意图 对象,所以你必须注意检查这个。
您可以尝试的另一件事是检测应用更新并再次启动服务。要检测应用更新,您可以收听PACKAGE_INSTALL广播或使用以下解决方法:
答案 1 :(得分:0)
您的服务将在升级过程中终止。您需要赶上升级事件并重新启动。
在Manifest.xml中
<receiver android:name=".yourpackage.UpgradeReceiver" android:enabled="true" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
</intent-filter>
</receiver>
在UpgradeReceiver.java
中public class UpgradeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
try {
if (!Intent.ACTION_MY_PACKAGE_REPLACED.equals(intent.getAction()))
return;
// Start your service here.
} catch (Exception e) {
Utils.handleException(e);
}
}
}