Bildirim göstermedenForeground () nasıl başlatılır?


90

Bir servis oluşturup ön planda çalışmasını sağlamak istiyorum.

Çoğu örnek kodun üzerinde bildirimler vardır. Ama herhangi bir bildirim göstermek istemiyorum. Mümkün mü?

Bana bazı örnekler verebilir misin? Herhangi bir alternatif var mı?

Uygulama hizmetim mediaplayer yapıyor. Uygulamanın kendisini öldürmesi dışında sistemin hizmetimi öldürmemesini sağlama (müziği düğme ile duraklatma veya durdurma gibi).


11
Bildirim olmadan "Ön Plan" hizmetine sahip olamazsınız. Dönem.
Jug6ernaut

1
"Sahte" bildirim vermeye ne dersiniz? bu bir numara mı?
Muhammad Resna Rizki Pratama

Ön plan bildirimi ayarlandıktan sonra, Kauçuk uygulamasını kullanarak "arka planda çalışan bildirimleri" kaldırabilirsiniz .
Laurent

1
@MuhammadResnaRizkiPratama, kabul edilen yanıtı değiştirmeyi düşünür müsün? Bu soru son derece popüler, ancak kabul edilen cevap tamamen güncel değil, çok ağır ve geliştiricinin buna neden ihtiyaç duyduğuna dair varsayımlarda bulunuyor. Bu cevabı öneriyorum çünkü güvenilir, işletim sistemi hatalarından yararlanmıyor ve çoğu Android cihazda çalışıyor.
Sam

Yanıtlar:


95

Android platformunun bir güvenlik özelliği olarak, yapamazsın altında, herhangi bir koşul, aynı zamanda bir bildirim kalmadan ön plana hizmeti var. Bunun nedeni, önceden planlanmış bir hizmetin daha fazla miktarda kaynak tüketmesi ve arka plan hizmetlerinden farklı zamanlama kısıtlamalarına tabi olmasıdır (yani, o kadar çabuk öldürülmez) ve kullanıcının pilini neyin tüketeceğini bilmesi gerekir. Yani, bunu yapma.

Ancak, olduğu , yani bir "sahte" bildirimi olması mümkün, bir şeffaf bildirim simgesine (iirc) yapabilirsiniz. Bu, kullanıcılarınız için son derece samimiyetsizdir ve pillerini öldürmek ve böylece kötü amaçlı yazılım oluşturmak dışında bunu yapmak için hiçbir nedeniniz yoktur.


3
Teşekkürler. Bu, setForeground'un neden bildirime ihtiyaç duyduğunu anlamamı sağlıyor.
Muhammad Resna Rizki Pratama

21
Görünüşe göre bunu yapmak için bir sebebiniz var, kullanıcılar bunu istedi. Dediğiniz gibi samimiyetsiz olsa da üzerinde çalıştığım bir ürün için test grupları tarafından talep edildi. Belki de Android, her zaman çalıştığını bildiğiniz bazı hizmetlerden gelen bildirimleri gizleme seçeneğine sahip olmalıdır. Aksi takdirde bildirim çubuğunuz bir Noel ağacı gibi görünecektir.
Radu

3
@Radu aslında ön planda bu kadar çok uygulamaya sahip olmamalısınız : bu, pil ömrünüzü öldürür, çünkü bunlar farklı şekilde programlanır (aslında ölmezler). Bu bir mod için kabul edilebilir olabilir, ancak bu seçeneğin yakın zamanda Android'e geçmesini göremiyorum. "Kullanıcılar" genellikle kendileri için neyin en iyi olduğunu
bilmezler

2
Argümanınızı desteklemeyen @Radu. "Ödüllü uygulamalar" genellikle Android'deki boşlukları sistem tutarsızlıkları yoluyla (görev sonlandırıcılar gibi) "düzelten" uygulamalara denir. Bir ön plan hizmetini kullanmak zorunda olmanız için hiçbir neden yok çünkü "ödüllü uygulamalar" kullanıyor: Eğer öyleyse, kullanıcının pilini öldürdüğünüzü kabul ediyorsunuz.
Kristopher Micinski

2
Görünüşe göre, bu yöntem 4.3'ten itibaren artık çalışmayacak. plus.google.com/u/0/105051985738280261832/posts/MTinJWdNL8t
erbi

79

Güncelleme: Bu, Android 7.1'de "düzeltildi". https://code.google.com/p/android/issues/detail?id=213309

4.3 güncellemesinden bu yana, temelde startForeground() bildirim göstermeden bir hizmeti başlatmak imkansızdır .

Bununla birlikte, resmi API'leri kullanarak simgeyi gizleyebilirsiniz ... şeffaf bir simgeye gerek yoktur: ( NotificationCompatEski sürümleri desteklemek için kullanın )

NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setPriority(Notification.PRIORITY_MIN);

Bildirimin kendisinin hala orada olması gerektiği gerçeğiyle barıştım, ancak yine de gizlemek isteyenler için bunun için de bir geçici çözüm bulmuş olabilirim:

  1. startForeground()Bildirim ve her şeyle sahte bir hizmet başlatın.
  2. Çalıştırmak istediğiniz gerçek hizmeti de startForeground()(aynı bildirim kimliği) ile başlatın
  3. İlk (sahte) hizmeti durdurun (arayabilir stopSelf()ve onDestroy aramasına katılabilirsinizstopForeground(true) ).

Voilà! Hiç bildirim yok ve ikinci servisiniz çalışmaya devam ediyor.


23
Bunun için teşekkürler. Bence bazı insanlar, dahili iş kullanımı için devam eden Android geliştirmesinin farkında değil (yani, piyasada hiç görünmesi veya Joe Blow'a satılması amaçlanmıyor). Bazen insanlar "hizmet bildirimini göstermeyi durdur" gibi şeyler ister ve genel tüketim için koşer olmasa bile geçici çözümler görmek iyidir.
JamieB

5
@JamieB Daha fazla anlaşamadım ... Dianne Hackborn'a arka plan hizmetlerinin tüm konseptini yeniden düşünmeleri gerektiğini ve belki de bildirimler olmadan arka planda bir hizmet çalıştırmak için izin eklemelerini önerdim. Bir bildirim olup olmaması bizim için geliştiriciler için önemli değil - bunu kaldırmak KULLANICI'nın isteği! :) Bu arada, sizin için de çalıştığını doğrulayabilir misiniz?
Lior Iluz

1
@JamieB user875707, bildirim kimliğini değil, simge parametresini (simgenin kaynak kimliği) 0 olarak ayarlamayı söylüyor (Öyleyse, dokümanlar "startForeground" dediği için çalışmayacaktır).
wangqi060934

9
Elbette bunun platformun gelecekteki sürümlerinde çalışmayacağını varsaymalısınız.
hackbod

1
@JamieB Bunu şu anda Android 5.0.1'de test ettim ve hala benim için çalışıyor.
Lior Iluz

20

Bu artık Android 7.1'den itibaren çalışmamaktadır ve Google Play'in geliştirici politikalarını ihlal edebilir .

Bunun yerine kullanıcının hizmet bildirimini engellemesini sağlayın .


İşte içinde tekniğinin benim uygulaması var cevap tarafından Lior Iluz .

Kod

ForegroundService.java

public class ForegroundService extends Service {

    static ForegroundService instance;

    @Override
    public void onCreate() {
        super.onCreate();

        instance = this;

        if (startService(new Intent(this, ForegroundEnablingService.class)) == null)
            throw new RuntimeException("Couldn't find " + ForegroundEnablingService.class.getSimpleName());
    }

    @Override
    public void onDestroy() {
        super.onDestroy();

        instance = null;
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

}

ForegroundEnizingService.java

public class ForegroundEnablingService extends Service {

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if (ForegroundService.instance == null)
            throw new RuntimeException(ForegroundService.class.getSimpleName() + " not running");

        //Set both services to foreground using the same notification id, resulting in just one notification
        startForeground(ForegroundService.instance);
        startForeground(this);

        //Cancel this service's notification, resulting in zero notifications
        stopForeground(true);

        //Stop this service so we don't waste RAM.
        //Must only be called *after* doing the work or the notification won't be hidden.
        stopSelf();

        return START_NOT_STICKY;
    }

    private static final int NOTIFICATION_ID = 10;

    private static void startForeground(Service service) {
        Notification notification = new Notification.Builder(service).getNotification();
        service.startForeground(NOTIFICATION_ID, notification);
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

}

AndroidManifest.xml

<service android:name=".ForegroundEnablingService" />
<service android:name=".ForegroundService" />

Uyumluluk

Test edildi ve üzerinde çalışıyor:

  • Resmi Emülatör
    • 4.0.2
    • 4.1.2
    • 4.2.2
    • 4.3.1
    • 4.4.2
    • 5.0.2
    • 5.1.1
    • 6.0
    • 7.0
  • Sony Xperia M
    • 4.1.2
    • 4.3
  • Samsung Galaksi ?
    • 4.4.2
    • 5.X
  • Genymotion
    • 5.0
    • 6.0
  • CyanogenMod
    • 5.1.1

Artık Android 7.1'den itibaren çalışmıyor.


2
Henüz test etmedim, ancak bunun için en azından bir izne sahip olmak güzel olurdu !!! "Google'a" bölümü için +1, Kullanıcılarım uygulamanın arka planda çalışmaya devam etmesi için gereken bildirimden şikayet ediyor, ayrıca skype / lama ve diğer herhangi bir uygulama için gerekli bildirimden de şikayet ediyorum
Rami Dabain

bu örnek alarmları dinlemek için nasıl kullanılabileceği için üzgünüm. AlarmManager ile alarm ayarlayan bir uygulama geliştiriyorum ve yaşadığım sorun, uygulamayı kapattığımda (Son uygulamalar-> Temizle) tüm alarmların da kaldırılması ve bunu önlemenin bir yolunu
bulmam

@ Ares91, bunun için ayrı bir StackOverflow sorusu oluşturmayı deneyin ve ilgili kod dahil olmak üzere mümkün olduğunca fazla bilgi eklediğinizden emin olun. Alarmlar hakkında pek bir şey bilmiyorum ve bu soru sadece hizmetlerle ilgili.
Sam

@Sam, hangi hizmetin önce çağrılması gerektiği, ForegroundEnokingService veya Forground
Kamran Majeed

@AndroidManForegroundService
Sam

14

Bunu kullanabilirsiniz (@Kristopher Micinski tarafından önerildiği gibi):

Notification note = new Notification( 0, null, System.currentTimeMillis() );
note.flags |= Notification.FLAG_NO_CLEAR;
startForeground( 42, note );

GÜNCELLEME:

Lütfen buna Android KitKat + sürümlerinde artık izin verilmediğini unutmayın. Ve bunun, @Kristopher Micinski'nin bahsettiği gibi arka plan işlemlerini kullanıcılara görünür kılan Android'deki tasarım ilkesini aşağı yukarı ihlal ettiğini unutmayın.


2
Bunun SDK 17 ile artık kabul edilmediğini unutmayın.
Çekilebilir

Bu bir hataydı ve umarım giderilmiştir. Ön Plan hizmetlerinin fikri, öldürülmeye daha az meyilli olmalarıdır ve bu, kullanıcının varlığından haberdar olmasını sağlamanın bir yoludur.
Martin Marconcini

4
Android 18 ile bildirim artık görünmez değil, "Uygulama çalışıyor, Daha fazla bilgi için dokunun veya uygulamayı durdurmak için dokunun"
ifadesini gösteriyor

1
Müşterilerimden birinin ekran görüntüsü: 1gravity.com/k10/Screenshot_2013-07-25-12-35-49.jpg . Benim de 4.3 cihazım var ve bu bulguyu onaylayabilirim.
Emanuel Moecklin

2
Uyarı: Android 4.1.2 (SDK 16) ile Sony Ericsson LT26i'den (Xperia S) kilitlenme raporları alıyorum: android.app.RemoteServiceException: Paketten hatalı bildirim gönderildi ...: Simge oluşturulamadı: StatusBarIcon (pkg = ... id = 0x7f020052 level = 0 visible = true num = 0) SDK 17'ye kadar simge kimliğini 0 olarak ayarladım. SDK 18'den onu geçerli bir çekilebilir kaynağa ayarladım. Belki, SDK 16'dan geçerli bir simge kimliğine ihtiyacınız vardır!
almisoft

13

Uyarı : Bu yanıt işe yarıyor gibi görünse de, aslında sessizce hizmetinizin bir ön plan hizmeti olmasını engeller .

Orijinal cevap:


Bildiriminizin kimliğini sıfır olarak ayarlamanız yeterlidir:

// field for notification ID
private static final int NOTIF_ID = 0;

    ...
    startForeground(NOTIF_ID, mBuilder.build());
    NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    mNotificationManager.cancel(NOTIF_ID);
    ...

Alabileceğiniz bir avantaj Service, yüksek bellek baskısı olmadığı sürece, Android sistemi tarafından yok edilmeden yüksek öncelikte çalışabilecek olmasıdır.

DÜZENLE

Pre-Honeycomb ve Android 4.4 ve üstü ile çalışmasını sağlamak için NotificationCompat.Builder, bunun yerine Support Library v7 tarafından sağlananı kullandığınızdan emin olun Notification.Builder.


1
Bu benim için 4.3 (18) @vlad sol'da mükemmel çalışıyor. Merak ediyorum, neden bu cevap için henüz başka olumlu oy yok?
Rob McFeely

1
Bunu Android N Preview 4'te denedim ve işe yaramadı. Denedim Notification.Builder, Destek Kitaplığı v4 NotificationCompat.Builderve Destek Kitaplığı v7 NotificationCompat.Builder. Bildirim bildirim çekmece veya durum çubuğunda görünmüyor, ama kullanırken işaretlendiğinde hizmet ön plan modunda çalışan değildi getRunningServices()ve dumpsys.
Sam

@Sam, Yani bu hata önceki sürümlerde görünmüyor, değil mi?
Anggrayudi H

@AnggrayudiH, "bu hata" derken, bildirimin görünmediğini mi söylüyorsunuz? Yoksa hizmetin ön plan moduna geçmediğini mi söylüyorsunuz?
Sam

1
Bu benim için çalışmıyor. İşlem id! = 0 gönderildiğinde ön plan olarak başlatılır, ancak id = 0 olduğunda ön plan olarak BAŞLATILMAZ. adb shell dumpsys activity servicesDoğrulamak için kullanın .
beetree

10

Layout_height = "0dp" ile özel düzen kullanarak Android 9+ üzerinde bildirimi gizleyebilirsiniz.

NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NotificationUtils.CHANNEL_ID);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.custom_notif);
builder.setContent(remoteViews);
builder.setPriority(NotificationCompat.PRIORITY_LOW);
builder.setVisibility(Notification.VISIBILITY_SECRET);

custom_notif.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="0dp">
</LinearLayout>

Pixel 1, android 9'da test edilmiştir. Bu çözüm Android 8 veya önceki sürümlerde çalışmaz


1
Güzel bir çözüm. Ayrıca android 10'da simge gerektirdiğini düşünüyorum. Simge için şeffaf bir yer tutucu resim kullanmak sorunu çözer.
shyos

7

Güncelleme: bu artık Android 4.3 ve sonraki sürümlerde çalışmıyor


Bir çözüm var. Simge ayarlamadan bildirim oluşturmayı deneyin ve bildirim görünmeyecektir. Nasıl çalıştığını bilmiyorum ama çalışıyor :)

    Notification notification = new NotificationCompat.Builder(this)
            .setContentTitle("Title")
            .setTicker("Title")
            .setContentText("App running")
            //.setSmallIcon(R.drawable.picture)
            .build();
    startForeground(101,  notification);

3
Android N Preview 4'te bu çalışmıyor. Android, (YourServiceName) is runningbir simge belirtmediğinizde kendi bildiriminiz yerine bir bildirim gösterir . CommonsWare'e göre, Android 4.3'ten beri durum böyle: commonsware.com/blog/2013/07/30/…
Sam

1
Bugün bazı testler yaptım ve bunun Android 4.3 ve üzeri sürümlerde çalışmadığını onayladım.
Sam

5

Güncelleme: bu artık Android 4.3 ve sonraki sürümlerde çalışmıyor


Simge parametresini Bildirim için yapıcıya sıfır olarak ayarladım ve ardından elde edilen bildirimi startForeground () öğesine geçtim. Günlükte hata yok ve bildirim görünmüyor. Yine de, hizmetin başarıyla ön plana çıkıp çıkmadığını bilmiyorum - kontrol etmenin bir yolu var mı?

Düzenlendi: dumpsys ile kontrol edildi ve gerçekten hizmet 2.3 sistemimde ön planda. Diğer işletim sistemi sürümlerini henüz kontrol etmedim.


9
"İsForeground" öğesinin true olarak ayarlanıp ayarlanmadığını kontrol etmek için "adb shell dumpsys activity services" komutunu kullanın.
siyah

1
Veya boş Notification()kurucuyu çağırın .
johsin18

Bu benim için çalıştı. Hizmetimi ilk kez bir gecede çalıştırdım, bu yüzden kesinlikle ön planda (artı dumpsys öyle diyor) ve bildirim yok.
JamieB

Bunun artık Android 4.3'te (API 18) çalışmadığını unutmayın. İşletim sistemi, bildirim çekmecesine bir yer tutucu bildirim yerleştirir.
Sam

4

Ön plan hizmet bildirimini engelle

Buradaki çoğu yanıt ya işe yaramıyor, ön plan hizmetini bozuyor veya Google Play politikalarını ihlal ediyor .

Bildirimi güvenilir ve güvenli bir şekilde gizlemenin tek yolu, kullanıcının bildirimi engellemesidir.

Android 4.1 - 7.1

Tek yol, uygulamanızdan gelen tüm bildirimleri engellemektir :

  1. Kullanıcıyı uygulamanın ayrıntılar ekranına gönderin:

    Uri uri = Uri.fromParts("package", getPackageName(), null);
    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).setData(uri);
    startActivity(intent);
    
  2. Kullanıcının uygulama bildirimlerini engellemesini sağlayın

Bunun, uygulamanızın tostlarını da engellediğini unutmayın.

Android 8.0 - 8.1

Android O'da bildirimi engellemeye değmez çünkü işletim sistemi onu " arka planda çalışan " veya " pil kullanan " ile değiştirecektir. " bildirimiyle değiştirecektir.

Android 9+

Diğer bildirimlerinizi etkilemeden hizmet bildirimini engellemek için bir Bildirim Kanalı kullanın .

  1. Bildirim kanalına hizmet bildirimini atayın
  2. Kullanıcıyı bildirim kanalının ayarlarına gönder

    Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS)
        .putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName())
        .putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId());
    startActivity(intent);
    
  3. Kullanıcının kanal bildirimlerini engellemesini sağlayın


2

sürüm 4.3 (18) ve üzeri gizleme hizmeti bildirimi mümkün değildir, ancak simgeyi devre dışı bırakabilirsiniz, sürüm 4.3 (18) ve altındaki bildirimi gizlemek mümkündür

Notification noti = new Notification();
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) {
    noti.priority = Notification.PRIORITY_MIN;
}
startForeground(R.string.app_name, noti);

Bu cevap muhtemelen doğru ve yararlı olsa da, problemin çözülmesine nasıl yardımcı olduğunu açıklamak için bazı açıklamalar eklemeniz tercih edilir. Çalışmayı durduran bir değişiklik (muhtemelen ilgisiz) varsa ve kullanıcıların bir zamanlar nasıl çalıştığını anlamaları gerekiyorsa, bu özellikle gelecekte yararlı olur.
Kevin Brown

Android 4.3'ün aslında API 18 olduğunu düşünüyorum. Ayrıca, bu yöntem simgeyi yalnızca durum çubuğundan gizler; simgesi bildirimde hala var.
Sam

bildirimden simgeyi gizlemek için mBuilder.setSmallIcon (R.drawable.blank) boş görüntü ekleyebilirsiniz;
vlad sol

1
kitkat kaynağına bakıyorum ve sıfır kimlik yöntemi işe yarayacak gibi görünmüyor. kimlik sıfır ise, hizmet kaydı ön planda DEĞİL olarak güncellenir.
Jeffrey Blattman

2

Android 8.0'da bir bildirim kanalı kullanmamanın hala mümkün olduğunu öğrendim.

public class BootCompletedIntentReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

                Intent notificationIntent = new Intent(context, BluetoothService.class);    
                context.startForegroundService(notificationIntent);

            } else {
                //...
            }

        }
    }
}

Ve BluetoothService.class içinde:

 @Override
    public void onCreate(){    
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

            Intent notificationIntent = new Intent(this, BluetoothService.class);

            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

            Notification notification = new Notification.Builder(this)
                    .setContentTitle("Title")
                    .setContentText("App is running")
                    .setSmallIcon(R.drawable.notif)
                    .setContentIntent(pendingIntent)
                    .setTicker("Title")
                    .setPriority(Notification.PRIORITY_DEFAULT)
                    .build();

            startForeground(15, notification);

        }

    }

Kalıcı bir bildirim gösterilmez, ancak Android 'x uygulamaları arka planda çalışıyor' bildirimini göreceksiniz.


1
Android 8.1'de: "startForeground için hatalı bildirim: java.lang.RuntimeException: hizmet bildirimi için geçersiz kanal"
T-igra

Şahsen, apps are running in the backgroundbildirimin uygulamaya özel bir bildirimden bile daha kötü olduğunu düşünüyorum , bu yüzden bu yaklaşımın buna değip değmediğinden emin değilim.
Sam

-2

Güncelleme: bu artık Android 7.1 ve sonraki sürümlerde çalışmıyor


İşte uygulamanızın oom_adj'sini 1'e yapmanın bir yolu (ANDROID 6.0 SDK emülatöründe test edilmiştir).Ana servis aramanızda geçici bir servis ekleyin startForgroundService(NOTIFICATION_ID, notificion). Ve sonra startForgroundService(NOTIFICATION_ID, notificion)geçici hizmet çağrısı stopForgroundService'de (true) bir süre sonra ontification'ı reddetmek için aynı bildirim kimliğiyle geçici hizmet çağrısını yeniden başlatın.


Bildiğim tek çalışan çözüm bu. Ancak, zaten başka bir cevapla kaplıdır .
Sam

-3

Ayrıca başvurunuzu kalıcı olarak da ilan edebilirsiniz.

<application
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/Theme"
    *android:persistent="true"* >
</application>

Bu, temelde uygulamanızı daha yüksek bir bellek önceliğine ayarlar ve ölme olasılığını azaltır.


5
Bu yanlış, yalnızca sistem uygulamaları kalıcı olabilir: groups.google.com/forum/?fromgroups=#!topic/android-developers/…
Snicolas

-6

Birkaç ay önce basit bir medya oynatıcı geliştirdim. Yani inandığım şey şuna benzer bir şey yapıyorsanız:

Intent i = new Intent(this, someServiceclass.class);

startService (i);

O zaman sistem hizmetinizi öldüremez.

referans : sistemin hizmeti ne zaman durdurduğunu tartışan paragrafı okuyun


Bazı makalelerde okudum. Sadece startService () yaparsanız, sistemin daha fazla belleğe ihtiyacı vardır. Yani sistem bu hizmeti öldürecek. bu doğru? Hizmette deney yapmak için zamanım yok.
Muhammad Resna Rizki Pratama

1
Muhammed, bu doğru - startForeground () işlevinin amacı, hizmete arka plan hizmetlerinden daha yüksek bir "bellek önceliği" vererek hizmetin daha uzun süre hayatta kalmasını sağlamaktır. StartForeground (), kullanıcının çalışmakta olan daha kalıcı / öldürmesi daha zor bir hizmetten daha fazla haberdar olması için bir bildirim kullanmalıdır.
DustinB

Bu kesinlikle doğru değil; Android'de öldürülemeyen bir hizmet yapmak neredeyse imkansız. Android, hafızayı boşaltmak için ön planda olmayan hizmetleri kolayca öldürür.
Sam
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.