2010-09-11 9 views
8

bindService yöntemini kullanarak Hizmet oluşturmak istiyorum. Ancak bir Etkinliği kapattığımda Hizmetim yok edildi ve bunu istemiyorum.Android bindService veya/ve startService

OnCreate'da startForeground(NOTIFICATION_ID, notification); hizmetini kullanarak hizmeti ön plana almaya çalışıyorum ancak hizmet yine de yok. Servis yok olmaz bu iki yöntem arayarak

Intent bindIntent= new Intent(this, ServiceC.class); 
    startService(bindIntent); 
    bindService(bindIntent, onService, BIND_AUTO_CREATE); 

:

Şimdi çağrısı ile aynı anda Service başlatmak için iki yöntem deneyin. Uygulamam bu yöntemle iyi çalışıyor.

Birisi bunun iyi bir yol olup olmadığını bana açıklayabilir mi, yoksa eğer bana neden startForeground(NOTIFICATION_ID, notification); çalışmaz?

bindService'i kullanmanın en iyi yolu nedir, ancak aynı zamanda hizmetin kendini yok etmesini istemiyorum.

+0

Bu eski bir soru olduğunu biliyorum, ama utanmadan soran bindService kullanmak için doğru bir çözüm var mı? –

cevap

7

Aynı çözümü kullandım ve bu bir meşrudur. Service ref Gönderen:

Bir hizmet hem başlatılmış olması ve bunlara bağlı bağlantısı olabilir. Böyle bir durumunda, sistem başlatıldığı sürece hizmetini sürdürecektir veya Context.BIND_AUTO_CREATE bayrağıyla bir veya daha fazla bağlantısı vardır. Bu durumlardan hiçbiri beklemediğinde, hizmetinin onDestroy() yöntemi olarak adlandırılır ve hizmet etkin olarak sonlandırılmıştır. sadece sistem tarafından öldürülmekten hizmet önlemeye çalışır çünkü

startForeground() çalışmıyor, ama onun yaşam döngüsü başka bir şeydir: hiçbir şey bu hizmetin daha bağlı olduğunu ve başlamış olmasaydı, sadece durur .

+0

Yani bindService kullanarak bir çözüm yok mu? Tüm uygulamamızı bindService’den startService’e değiştirmeliyiz? –

0

Eğer startService() ile hizmete başlarsanız, imha edilmez. IntentService'i genişleten ve onHandleIntent() 'de bir döngüye sahip olan bir hizmeti başlatmayı denedim. Döngü bittiğinde, hizmet yok edilir ve Etkinlik bitişiyle ilişkili değildir. Kullanıcı uygulamayı kapatabilir, ancak servis öldürülmez.

public class MyService extends IntentService 
{ 
    private static final String serviceName = "MyService "; 

    public MyService() { 
    super(serviceName); 
    } 

    @Override 
    public void onDestroy() 
    { 
    Log.v(serviceName, "onDestroy"); 
    Toast.makeText(this, serviceName+" stopped", Toast.LENGTH_LONG).show(); 
    super.onDestroy(); 
    } 

    @Override 
    protected void onHandleIntent(Intent arg0) { 

    long endTime = System.currentTimeMillis() + 30*1000; 
    while (System.currentTimeMillis() < endTime) { 
     synchronized (this) { 
      try { 
       Log.v(serviceName, "Service loop"); 
       wait(1000); 
      } catch (Exception e) { 
      } 
     } 
    } 
    } 

} 
İlgili konular