0

Bir Etkinlikten başladığım ve bindiğim bir hizmetim var. Etkinliğin OnDestroy yönteminde hizmete katılıyorum. Servis Bir bildirim görüntüler ve ben onu ön plana koymak için startForeground() kullanırım. Hizmetin onUnbind() yönteminde stopself() ve stopForeground (true) olarak adlandırıyorum. Ancak hizmetin çalışmayı durdurmadığı anlaşılıyor. App kapalı ve bildirim gitti ama android stüdyoda android bellek monitörü devam ediyor. Bu neden oluyor? Hizmette stopForeground() işlevini çağıran bir işlev oluşturursam ve bunu Etkinliğin OnDestroy'undan önce çağırırsam, uygulama düzgün kapanır. Bellek monitörü durur. OnCreate içindeAndroid Service Marshmallow'ta Durmaya Devam Et

MainActivity(): OnDestroy içinde

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); 
    } 

MainActivity()

  unbindService(myConnection); 

Servis 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); 
+0

"Ama android stüdyosundaki android bellek monitörü devam ediyor" - "Devam et" ifadesinin ne anlama geldiğini bilmiyorum. Bir servisin durmasından dolayı işleminiz gitmiyor. [Prosesiniz bir süre çalışmaya devam edecektir] (http://developer.android.com/guide/components/processes-and-threads.html#Processes). Benzer şekilde, kendiniz için belirttiğiniz iş parçacıkları gibi, oluşturduğunuz tüm devam eden işler çalışmaya devam eder. Hizmetiniz bu tür bir şey yaptıysa, bu şeyleri onDestroy() 'ya da başka olası bir noktadan temizlemeniz gerekir. – CommonsWare

+0

@ CommonsWare- Bu sorun neden bir Bildirim ve StartForground() kullandığımda ortaya çıkıyor? – amanda45

+0

"Bu problem" in ne olduğunu bilmediğimden, buna cevap veremem. Lütfen sorunuzu düzenlemeyi ve daha ayrıntılı olarak, "android stüdyosunda android bellek monitörünün devam etmesini" neyin ne anlama geldiğini açıklamayı düşünün. – CommonsWare

cevap

0

1) servis arka plan böylece onDestroy() yöntemde çalışan Serviste çağrı yöntemini çağırmanız gerekir.

stopSelf(); 

2) Eğer onTaskRemoved() uygulamak ve

stopSelf(); 

3 aramaya gerek yakın ardından uygulamanın hizmetini kapatmak istiyor) Ve Yakın sonra gerek Faaliyet onDestroy() yöntemini Etkinliği hizmetini bırakmak istiyorsunuz takip kodunu çağırmak.

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