我正在尝试在 android 应用程序中运行后台服务。我已经尝试了标准的方法和许多其他的调整。问题是,当应用程序从最近的应用程序中关闭时,服务会被终止。这只发生在 Oppo、Vivo、Xiomi 等中国 Android 设备中。它适用于所有其他品牌。
我尝试了以下解决方案。
覆盖
OnStartCommand()
活动返回START_STICKY
。在应用程序按预期关闭后,这仍然不会重新启动活动。@Override public int onStartCommand(Intent intent, int flags, int startId) { return START_STICKY; }
将应用程序添加到省电例外中,以便在模式下不会关闭它以节省电池
DOZE
。Auto-Start
从手机的安全设置中授予应用程序权限。将服务作为前台服务启动,包括持久通知。
@Override public int onStartCommand(Intent intent, int flags, int startId) { String input = intent.getStringExtra("inputExtra"); createNotificationChannel(); Intent notificationIntent = new Intent(this, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID) .setContentTitle("Foreground Service") .setContentText(input) .setSmallIcon(R.drawable.ic_launcher_foreground) .setContentIntent(pendingIntent) .build(); startForeground(1, notification); //do heavy work on a background thread //stopSelf(); return START_NOT_STICKY; }
实现了在服务被杀死后启动服务的警报管理器方法和服务
onTaskRemoved()
方法onDestroy()
。<service android:name=".MyService" android:enabled="true" android:exported="true" android:stopWithTask="false" />
@Override public void onTaskRemoved(Intent rootIntent){ Log.d("Service:","I am being closed!"); Intent restartServiceIntent = new Intent(getApplicationContext(), this.getClass()); restartServiceIntent.setPackage(getPackageName()); PendingIntent restartServicePendingIntent = PendingIntent.getService(getApplicationContext(), 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT); AlarmManager alarmService = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); alarmService.set( AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 1000, restartServicePendingIntent); super.onTaskRemoved(rootIntent); }
我还尝试使用广播管理器来启动我的服务,在活动关闭时接收来自活动的广播。
<receiver android:name=".SensorRestarterBroadcastReceiver" android:enabled="true" android:exported="true" android:label="RestartServiceWhenStopped" />
public class SensorRestarterBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.i(SensorRestarterBroadcastReceiver.class.getSimpleName(), "Service Stops!"); context.startService(new Intent(context, MyService.class));; } }
但是,在这些中国设备中,该服务并没有重新启动。关闭应用程序几分钟后,Whatsapp、Facebook 和一些著名应用程序的后台服务返回。请提出正确的方法来实现这一点。
我已经尝试过后台服务提供的解决方案在 oppo、vivo、mi android 版本 7.1.2中被杀死后没有重新启动,如上所述。它不能解决我的问题。