永远不会结束marshmallow android的后台服务

提兵百万西湖上,立马吴山第一峰!这篇文章主要讲述永远不会结束marshmallow android的后台服务相关的知识,希望能为你提供帮助。
我一直致力于我需要不断运行后台服务的项目。

我的代码在android O和Lollipop设备上运行良好。
但我遇到了Marshmallow设备的问题。当用户杀死应用程序时,我的服务已停止。
我读过和Optimize for Doze and App Standby

main activity.java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pingService = new PingService(this); mServiceIntent = new Intent(this, PingService.class); if (!isMyServiceRunning(PingService.class)) { startService(mServiceIntent); }}private boolean isMyServiceRunning(Class< ?> serviceClass) { ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { if (serviceClass.getName().equals(service.service.getClassName())) { Log.i ("isMyServiceRunning?", true+""); return true; } } Log.i ("isMyServiceRunning?", false+""); return false; }@Override protected void onDestroy() { stopService(mServiceIntent); Log.i("MAINACT", "onDestroy!"); super.onDestroy(); }

ping service.Java
@Override public void onCreate() { super.onCreate(); if (Build.VERSION.SDK_INT > = Build.VERSION_CODES.O ) startMyOwnForeground(); else if(Build.VERSION.SDK_INT == Build.VERSION_CODES.M) { Log.i("onCreate","Innn"); startMyOwnForeground(); }else{ Log.i("onCreate","in start Forground"); startForeground(1, new Notification()); }}private void startMyOwnForeground(){ String NOTIFICATION_CHANNEL_ID = "com.example.simpleapp"; String channelName = "My Background Service"; NotificationChannel chan = null; if (android.os.Build.VERSION.SDK_INT > = android.os.Build.VERSION_CODES.O) { chan = new NotificationChannel(NOTIFICATION_CHANNEL_ID, channelName, NotificationManager.IMPORTANCE_NONE); chan.setLightColor(Color.BLUE); chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE); NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); assert manager != null; manager.createNotificationChannel(chan); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID); Notification notification = notificationBuilder.setOngoing(true) .setSmallIcon(R.drawable.ic_launcher_background) .setContentTitle("App is running in background") .setPriority(NotificationManager.IMPORTANCE_MIN) .setCategory(Notification.CATEGORY_SERVICE) .build(); startForeground(2, notification); }}@Override public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); Log.i("onStartCommand","in onStartCommand"); startTimer(); return START_STICKY; }public PingService(Context context) { this.context = context; }@Override public IBinder onBind(Intent intent) { return null; }public void startTimer() { Log.i("startTimer","startTimer"); //set a new Timer timer = new Timer(); //initialize the TimerTask's job initializeTimerTask(); //schedule the timer, to wake up every 1 second timer.schedule(timerTask, 1000, 1000); // }/** * it sets the timer to print the counter every x seconds */ public void initializeTimerTask() { timerTask = new TimerTask() { public void run() { Log.i("in timer", "in timer ++++"+ (counter++)); } }; }/** * not needed */ public void stoptimertask() { //stop the timer, if it's not already null if (timer != null) { timer.cancel(); timer = null; } }@Override public void onDestroy() { super.onDestroy(); Log.i("EXIT", "ondestroy!"); Intent broadcastIntent = new Intent(this, RestarterBroadcast.class); sendBroadcast(broadcastIntent); stoptimertask(); }

restart而B rod cast.Java
@Override public void onReceive(Context context, Intent intent) { Log.i(RestarterBroadcast.class.getSimpleName(), "Service Stops! Oooooooooooooppppssssss!!!!"); if (Build.VERSION.SDK_INT > = Build.VERSION_CODES.O) { context.startForegroundService(new Intent(context, PingService.class)); } else { Log.i(RestarterBroadcast.class.getSimpleName(), "In"); context.startService(new Intent(context, PingService.class)); } //context.startService(new Intent(context, PingService.class)); }

任何人都可以指导我在Marshmallow的永无止境的服务的最佳体验和解决方案吗?
我还想从我的应用程序中为用户提供最佳体验
帮助将不胜感激
【永远不会结束marshmallow android的后台服务】谢谢
答案服务将重新启动或仅在未明确停止的情况下继续工作。在你的情况下 - 你正在阻止它
@Override protected void onDestroy() { stopService(mServiceIntent); Log.i("MAINACT", "onDestroy!"); super.onDestroy(); }

只需从活动中删除onDestroy()方法即可。

    推荐阅读