我正在测试我的应用程序,发现它在某些设备上(仅在OREO设备上)被操作系统杀死(在Samsung S8上完全没有问题,但在Huawei Y7 Prime上,当我打开它时应用程序正在重新启动关闭屏幕超过20分钟后再次出现..请注意,以防万一我在不等待几分钟的情况下直接打开应用程序,则该应用程序将正常打开)
我还执行了一些日志记录,以识别何时以及为何破坏活动,但是由于在这种情况下没有写入日志,所以运气不佳。另外,我在主要活动上添加了以下代码,该代码在很短的时间内就可以工作(按应用程序图标会首先在某些设备上重新启动该应用程序,但已使用下面的代码在主要活动的onCreate函数中进行了修复)if (!isTaskRoot()) {
final Intent intent = getIntent();
final String intentAction = intent.getAction();
if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && intentAction != null && intentAction.equals(Intent.ACTION_MAIN)) {
isTaskRootEntered = true;
finish();
}
}
我错过了什么吗?请任何有关如何解决此问题的帮助。
重要说明::我保留了一个前台服务,该服务可检索用户的位置并将其保存在数据库中。该服务具有粘性通知,并且可以正常运行,直到离开超过20分钟为止(仅限于像华为这样的某些设备)
我正在通过以下方式启动前台服务:
GVGPSServiceIntent = new Intent(context, GTMStarterService.class);
if(Build.VERSION.SDK_INT >= 26){
context.startForegroundService(GVGPSServiceIntent);
}
else context.startService(GVGPSServiceIntent);
服务看起来像这样
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
return START_STICKY;
}
@Override
public void onCreate() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Notification notification = updateNotificationContent();
startForeground("SendingPrcs".hashCode(), notification);
}
}
@Override
public void onDestroy() {
super.onDestroy();
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (notificationManager != null) {
notificationManager.cancel("SendingPrcs".hashCode());
}
}