我的后台服务执行着应用的核心功能,当用户界面被打开时首先启动。
因此,当应用在Play商店更新时,该服务会被终止,但是用户界面可能不会再次打开(因此我猜测服务也不会重新启动)。这对我来说很糟糕,因为该服务执行着应用的核心功能。如何解决这个问题?
非常感谢任何帮助。
我的后台服务执行着应用的核心功能,当用户界面被打开时首先启动。
因此,当应用在Play商店更新时,该服务会被终止,但是用户界面可能不会再次打开(因此我猜测服务也不会重新启动)。这对我来说很糟糕,因为该服务执行着应用的核心功能。如何解决这个问题?
非常感谢任何帮助。
您的服务将在升级期间被终止。您需要捕获升级事件并重新启动它。
在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>
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);
}
}
}
是的,每个应用程序在更新期间都会被终止-请参阅我的答案这里
您可以将服务设置为STICKY服务,这些服务在被杀死时会重新启动。从文档中了解:
public static final int START_STICKY Added in API level 5
从onStartCommand(Intent,int,int)返回:如果在启动此服务(从onStartCommand(Intent,int,int)返回后)时杀死了该服务的进程,则将其保留在已启动状态但不保留此传递的意图。稍后系统将尝试重新创建服务。因为它处于已启动状态,所以它将保证在创建新服务实例后调用onStartCommand(Intent,int,int);如果没有任何待处理的启动命令要传递到服务,则使用空意图对象调用它,因此您必须小心检查这一点。
您可以尝试的其他方法是检测应用程序更新并再次启动服务。要检测应用程序更新,您可以监听PACKAGE_INSTALL广播或使用以下解决方法: