Android服务不会停在Marshmallow

时间:2016-04-01 14:17:35

标签: android android-studio android-service android-service-binding

我有一个服务,我从一个Activity开始并绑定到它。在Activity的OnDestroy方法中,我解除了对服务的绑定。服务显示通知,我使用startForeground()将其放在前台。在Service的onUnbind()方法中,我调用了stopself()和stopForeground(true)。但似乎服务并没有停止工作。该应用程序已关闭,通知已消失,但android studio中的android内存监视器仍在继续。为什么会这样?如果我在调用stopForeground()的服务中创建一个函数,并在Activity的OnDestroy之前调用它,那么应用程序就会正常关闭。内存监视器停止。

OnCreate()中的MainActivity:

   service = new Intent(MainActivity.this, Service.class);


    service.setAction("START");
    startService(service);

    if(myservice == null)
    {
        Intent k = new Intent(this,Service.class);
        bindService(k, myConnection, Context.BIND_AUTO_CREATE);
    }

OnDestroy()中的MainActivity

         unbindService(myConnection);

服务OnCreate()

Intent notificationIntent = new Intent(this, MainActivity.class);
        notificationIntent.setAction("new");
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
                notificationIntent, 0);


        Bitmap icon = BitmapFactory.decodeResource(getResources(),
                R.drawable.ic_launcher);

        Notification notification = new NotificationCompat.Builder(this)
                .setContentTitle("Myservice")
                .setTicker("service")
                .setContentText("Monitoring")
                .setSmallIcon(R.drawable.ic_launcher)
                .setLargeIcon(Bitmap.createScaledBitmap(icon, 128, 128, false))
                .setContentIntent(pendingIntent)
                .setOngoing(true).build();

        startForeground(101, notification);

1 个答案:

答案 0 :(得分:0)

1)服务在后台运行所以onDestroy()方法需要在服务上调用方法。

stopSelf();

2)你想关闭应用程序关闭服务然后你需要实现onTaskRemoved()并调用

stopSelf();

3)并且您想要在活动结束时停止服务,然后onDestroy()您需要调用的活动方法遵循代码。

@Override
public void onDestroy() {
    super.onDestroy();
    Intent serviceIntent=new Intent(this,ServiceClass.class);
    stopService(serviceIntent);
}