Bagaimana cara memulaiForeground () tanpa menampilkan pemberitahuan?

90

Saya ingin membuat layanan dan membuatnya berjalan di latar depan.

Sebagian besar kode contoh memiliki pemberitahuan di dalamnya. Tapi saya tidak ingin menampilkan pemberitahuan apa pun. Apakah itu mungkin?

Bisakah Anda memberi saya beberapa contoh? Apakah ada alternatif lain?

Layanan aplikasi saya sedang melakukan mediaplayer. Cara membuat sistem tidak mematikan layanan saya kecuali aplikasi mematikannya sendiri (seperti menjeda atau menghentikan musik dengan tombol).

Muhammad Resna Rizki Pratama
sumber
11
Anda tidak dapat memiliki layanan "Latar Depan" tanpa pemberitahuan. Titik.
Jug6ernaut
1
Bagaimana kalau memberi pemberitahuan "palsu"? itu tipuan?
Muhammad Resna Rizki Pratama
Setelah pemberitahuan latar depan disiapkan, Anda dapat menghapus "pemberitahuan berjalan di latar belakang" menggunakan aplikasi Rubber .
Laurent
1
@MuhammadResnaRizkiPratama, apakah Anda mempertimbangkan untuk mengubah jawaban yang diterima? Pertanyaan ini sangat populer tetapi jawaban yang diterima benar-benar ketinggalan zaman, terlalu berat, dan membuat asumsi mengapa pengembang membutuhkan ini. Saya menyarankan jawaban ini karena dapat diandalkan, tidak mengeksploitasi bug OS, dan berfungsi di sebagian besar perangkat Android.
Sam

Jawaban:

95

Sebagai fitur keamanan platform Android, Anda tidak dapat , dalam keadaan apa pun , memiliki layanan latar depan tanpa pemberitahuan. Hal ini karena layanan latar depan menghabiskan lebih banyak sumber daya dan tunduk pada batasan penjadwalan yang berbeda (yaitu, tidak terbunuh dengan cepat) daripada layanan latar belakang, dan pengguna perlu mengetahui apa yang mungkin memakan baterai mereka. Jadi, jangan lakukan ini.

Namun, adalah mungkin untuk memiliki "palsu" pemberitahuan, yaitu, Anda dapat membuat ikon pemberitahuan transparan (iirc). Ini sangat tidak jujur ​​bagi pengguna Anda, dan Anda tidak punya alasan untuk melakukannya, selain mematikan baterai mereka dan dengan demikian menciptakan malware.

Kristopher Micinski
sumber
3
Terima kasih. Itu membuat saya jelas mengapa setForeground membutuhkan notifikasi.
Muhammad Resna Rizki Pratama
21
Sepertinya Anda punya alasan untuk melakukannya, pengguna telah memintanya. Meskipun mungkin tidak jujur ​​seperti yang Anda katakan, itu diminta untuk produk yang sedang saya kerjakan oleh kelompok pengujian. Mungkin Android harus memiliki opsi untuk menyembunyikan pemberitahuan dari beberapa layanan yang Anda tahu selalu berjalan. Jika tidak, bilah notifikasi Anda akan terlihat seperti pohon Natal.
Radu
3
@Radu sebenarnya Anda tidak boleh memiliki banyak aplikasi di latar depan: itu akan menghabiskan masa pakai baterai Anda, karena dijadwalkan berbeda (pada dasarnya, aplikasi tersebut tidak mati). Ini mungkin dapat diterima untuk mod, tetapi saya tidak melihat opsi itu membuatnya menjadi vanilla Android dalam waktu dekat. "Pengguna" biasanya tidak tahu yang terbaik untuk mereka ..
Kristopher Micinski
2
@Radu yang tidak mendukung argumen Anda. "Aplikasi pemenang penghargaan" biasanya adalah aplikasi yang benar-benar "memperbaiki" lubang Android melalui ketidakkonsistenan sistem (seperti pembunuh tugas). Tidak ada alasan bahwa Anda harus menggunakan layanan latar depan hanya karena "aplikasi pemenang penghargaan" melakukannya: jika Anda melakukannya, Anda mengakui membunuh baterai pengguna.
Kristopher Micinski
2
Ternyata, metode ini tidak akan berfungsi lagi mulai 4.3. plus.google.com/u/0/105051985738280261832/posts/MTinJWdNL8t
erbi
79

Pembaruan: Ini telah "diperbaiki" di Android 7.1. https://code.google.com/p/android/issues/detail?id=213309

Sejak pembaruan 4.3, pada dasarnya tidak mungkin untuk memulai layanan startForeground()tanpa menunjukkan pemberitahuan.

Namun, Anda dapat menyembunyikan ikon menggunakan API resmi ... tidak perlu ikon transparan: (Gunakan NotificationCompatuntuk mendukung versi yang lebih lama)

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

Saya telah berdamai dengan kenyataan bahwa pemberitahuan itu sendiri masih perlu ada di sana, tetapi bagi siapa pun yang masih ingin menyembunyikannya, saya mungkin telah menemukan solusi untuk itu juga:

  1. Mulai layanan palsu startForeground()dengan notifikasi dan semuanya.
  2. Mulai layanan nyata yang ingin Anda jalankan, juga dengan startForeground()(ID pemberitahuan yang sama)
  3. Hentikan layanan pertama (palsu) (Anda dapat menelepon stopSelf()dan dalam panggilan onDestroy stopForeground(true)).

Voilà! Tidak ada pemberitahuan sama sekali dan layanan kedua Anda terus berjalan.

Lior Iluz
sumber
23
Terima kasih untuk ini. Saya rasa beberapa orang tidak menyadari bahwa ada pengembangan Android yang dilakukan untuk penggunaan bisnis internal (artinya, ini tidak dimaksudkan untuk pernah muncul di pasar atau dijual kepada Joe Blow). Kadang-kadang orang meminta hal-hal seperti "berhenti menampilkan pemberitahuan layanan" dan ada baiknya untuk melihat solusi meskipun tidak halal untuk konsumsi umum.
JamieB
5
@JamieB Saya sangat setuju ... Saya menyarankan kepada Dianne Hackborn mereka perlu memikirkan kembali seluruh konsep layanan latar belakang dan mungkin menambahkan izin untuk menjalankan layanan di latar belakang tanpa pemberitahuan. Tidak masalah bagi kami para pengembang jika ada pemberitahuan atau tidak - itu adalah permintaan USER untuk menghapusnya! :) Ngomong-ngomong, dapatkah Anda memverifikasi bahwa ini juga berfungsi untuk Anda?
Lior Iluz
1
@JamieB user875707 mengatakan untuk menyetel parameter ikon (id sumber daya ikon) ke 0, bukan id notifikasi (Jika demikian, seperti yang dikatakan dalam dokumen "startForeground" tidak akan berfungsi).
wangqi060934
9
Anda harus, tentu saja, menganggap ini tidak akan berfungsi di versi platform yang akan datang.
hackbod
1
@JamieB Saya benar-benar menguji ini sekarang di Android 5.0.1 dan masih berfungsi untuk saya.
Lior Iluz
20

Ini tidak lagi berfungsi sejak Android 7.1 dan mungkin melanggar kebijakan pengembang Google Play .

Sebaliknya, minta pengguna memblokir notifikasi layanan .


Inilah implementasi saya dari teknik yang dijawab oleh Lior Iluz .

Kode

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

}

ForegroundEnablingService.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" />

Kesesuaian

Diuji dan dikerjakan:

  • Emulator Resmi
    • 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 Galaxy?
    • 4.4.2
    • 5.X
  • Genymotion
    • 5.0
    • 6.0
  • CyanogenMod
    • 5.1.1

Tidak lagi berfungsi sejak Android 7.1.

Sam
sumber
2
Belum mengujinya, tapi alangkah baiknya memiliki setidaknya izin untuk itu !!! +1 untuk bagian "Ke Google", Pengguna saya mengeluh tentang pemberitahuan yang diperlukan agar aplikasi tetap berjalan di latar belakang, saya juga mengeluh tentang pemberitahuan yang diperlukan untuk skype / llama dan aplikasi lain di luar sana
Rami Dabain
maaf bagaimana contoh ini bisa digunakan untuk mendengarkan alarm. Saya sedang mengembangkan aplikasi yang mengatur alarm dengan alarmManager dan masalah yang saya hadapi adalah ketika saya menutup aplikasi (Aplikasi terbaru-> Hapus) semua alarm juga dihapus dan saya perlu mencari cara untuk mencegah hal ini
Ares91
@ Ares91, coba buat pertanyaan StackOverflow terpisah untuk itu, dan pastikan untuk menyertakan info sebanyak mungkin, termasuk kode yang relevan. Saya tidak tahu banyak tentang alarm, dan pertanyaan ini hanya tentang layanan.
Sam
@Sam layanan mana yang harus dipanggil terlebih dahulu, ForegroundEnablingService atau Forground
Kamran Majeed
@AndroidManForegroundService
Sam
14

Anda dapat menggunakan ini (seperti yang disarankan oleh @Kopher Micki):

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

MEMPERBARUI:

Harap dicatat bahwa ini tidak diperbolehkan lagi dengan rilis Android KitKat +. Dan perlu diingat bahwa ini kurang lebih melanggar prinsip desain di Android yang membuat operasi latar belakang terlihat oleh pengguna seperti yang disebutkan oleh @Kristopher Micinski

Snicolas
sumber
2
Perhatikan bahwa ini sepertinya tidak diterima lagi dengan SDK 17. Layanan tidak akan pergi ke latar depan jika drawable yang diteruskan ke notifikasi adalah 0.
Snicolas
Itu adalah bug dan semoga diperbaiki. Ide dari layanan Foreground adalah bahwa mereka tidak terlalu rentan untuk dibunuh, dan ini adalah cara untuk memastikan pengguna mengetahui keberadaannya.
Martin Marconcini
4
Dengan Android 18 pemberitahuan tidak lagi terlihat tetapi menunjukkan "Aplikasi sedang berjalan, Sentuh untuk informasi lebih lanjut atau untuk menghentikan aplikasi"
Emanuel Moecklin
1
Tangkapan layar dari salah satu pelanggan saya: 1gravity.com/k10/Screenshot_2013-07-25-12-35-49.jpg . Saya memiliki perangkat 4.3 juga dan dapat mengonfirmasi temuan itu.
Emanuel Moecklin
2
Peringatan: Saya menerima laporan kerusakan dari Sony Ericsson LT26i (Xperia S) dengan Android 4.1.2 (SDK 16): android.app.RemoteServiceException: Pemberitahuan buruk dikirim dari paket ...: Tidak dapat membuat ikon: StatusBarIcon (pkg = ... id = 0x7f020052 level = 0 visible = true num = 0) Saya telah menetapkan id ikon ke 0 hingga SDK 17, juga. Dari SDK 18 saya telah mengaturnya ke sumber daya drawable yang valid. Mungkin, Anda memerlukan id ikon yang valid dari SDK 16!
almisoft
13

Peringatan : meskipun jawaban ini tampaknya berfungsi, sebenarnya jawaban tersebut secara diam-diam mencegah layanan Anda menjadi layanan latar depan .

Jawaban asli:


Cukup setel ID notifikasi Anda ke nol:

// 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);
    ...

Keuntungan yang didapat adalah, sebuah Serviceakan dapat berjalan dengan prioritas tinggi tanpa dihancurkan oleh sistem Android, kecuali pada tekanan memori tinggi.

EDIT

Untuk membuatnya berfungsi dengan Pre-Honeycomb dan Android 4.4 dan lebih tinggi, pastikan Anda menggunakan NotificationCompat.Builderyang disediakan oleh Support Library v7, bukan Notification.Builder.

Anggrayudi H
sumber
1
Ini bekerja dengan sempurna untuk saya di 4.3 (18) @vlad sol. Mengapa belum ada suara positif lain untuk jawaban ini, saya bertanya-tanya?
Rob McFeely
1
Saya mencoba ini di Android N Preview 4 dan tidak berhasil. Saya mencoba Notification.Builder, Support Library v4 NotificationCompat.Builderdan Support Library v7 NotificationCompat.Builder. Notifikasi tidak muncul di panel samping notifikasi atau bilah status, tetapi layanan tidak berjalan dalam mode latar depan ketika saya memeriksanya menggunakan getRunningServices()dan dumpsys.
Sam
@ Sam, Jadi bug ini tidak muncul di versi sebelumnya, bukan?
Anggrayudi H
@AnggrayudiH, yang dimaksud dengan "bug ini", maksud Anda notifikasi tidak muncul? Atau maksud Anda layanan tidak beralih ke mode latar depan?
Sam
1
Ini tidak berhasil untuk saya. Proses dimulai sebagai latar depan saat id! = 0 dikirim, tetapi TIDAK dimulai sebagai latar depan saat id = 0. Gunakan adb shell dumpsys activity servicesuntuk memverifikasi.
pohon bit
10

Anda dapat menyembunyikan pemberitahuan di Android 9+ dengan menggunakan tata letak khusus dengan layout_height = "0dp"

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>

Diuji pada Pixel 1, android 9. Solusi ini tidak berfungsi di Android 8 atau kurang

phnmnn
sumber
1
Solusi yang bagus. Juga saya pikir itu membutuhkan ikon di android 10. Menggunakan gambar placeholder transparan untuk ikon memecahkan masalah.
shyos
7

Pembaruan: ini tidak lagi berfungsi di Android 4.3 dan di atasnya


Ada satu solusi. Coba buat notifikasi tanpa ikon pengaturan, dan notifikasi tidak akan muncul. Tidak tahu cara kerjanya, tapi memang :)

    Notification notification = new NotificationCompat.Builder(this)
            .setContentTitle("Title")
            .setTicker("Title")
            .setContentText("App running")
            //.setSmallIcon(R.drawable.picture)
            .build();
    startForeground(101,  notification);
Vladimir Petrovski
sumber
3
Di Android N Preview 4, ini tidak berfungsi. Android menampilkan (YourServiceName) is runningpemberitahuan, bukan milik Anda sendiri, ketika Anda tidak menentukan ikon. Menurut CommonsWare, ini telah terjadi sejak Android 4.3: commonsware.com/blog/2013/07/30/…
Sam
1
Saya melakukan beberapa pengujian hari ini dan memastikan bahwa ini tidak berfungsi di Android 4.3 ke atas.
Sam
5

Pembaruan: ini tidak lagi berfungsi di Android 4.3 dan di atasnya


Saya menyetel parameter icon ke konstruktor untuk Notification ke nol, dan kemudian meneruskan notifikasi yang dihasilkan ke startForeground (). Tidak ada kesalahan dalam log dan tidak ada pemberitahuan yang muncul. Namun, saya tidak tahu apakah layanan berhasil di latar depan - adakah cara untuk memeriksanya?

Diedit: Diperiksa dengan dumpsys, dan memang layanan ini berada di latar depan pada sistem 2.3 saya. Belum memeriksa dengan versi OS lain.

Alexander Pruss
sumber
9
Gunakan perintah "adb shell dumpsys activity services" untuk memeriksa apakah "isForeground" disetel ke true.
hitam
1
Atau panggil saja Notification()konstruktor kosong .
johsin18
Ini berhasil untuk saya. Pertama kali saya mendapatkan layanan saya untuk dijalankan semalaman jadi pasti di latar depan (ditambah kata dumpsys) dan tidak ada pemberitahuan.
JamieB
Perhatikan bahwa ini tidak lagi berfungsi di Android 4.3 (API 18). OS menempatkan notifikasi placeholder di panel samping notifikasi.
Sam
4

Blokir notifikasi layanan latar depan

Sebagian besar jawaban di sini tidak berfungsi, merusak layanan latar depan , atau melanggar kebijakan Google Play .

Satu-satunya cara untuk menyembunyikan notifikasi dengan andal dan aman adalah meminta pengguna memblokirnya.

Android 4.1 - 7.1

Satu-satunya cara adalah memblokir semua notifikasi dari aplikasi Anda:

  1. Arahkan pengguna ke layar detail aplikasi:

    Uri uri = Uri.fromParts("package", getPackageName(), null);
    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).setData(uri);
    startActivity(intent);
    
  2. Minta pengguna memblokir notifikasi aplikasi

Perhatikan bahwa ini juga memblokir toast aplikasi Anda.

Android 8.0 - 8.1

Tidak ada gunanya memblokir notifikasi di Android O karena OS hanya akan menggantinya dengan notifikasi " berjalan di latar belakang " atau " menggunakan baterai ".

Android 9+

Gunakan Saluran Pemberitahuan untuk memblokir pemberitahuan layanan tanpa mempengaruhi pemberitahuan Anda yang lain.

  1. Tetapkan notifikasi layanan ke saluran notifikasi
  2. Arahkan pengguna ke pengaturan saluran notifikasi

    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. Minta pengguna memblokir notifikasi saluran

Sam
sumber
2

versi 4.3 (18) dan di atasnya menyembunyikan pemberitahuan layanan tidak dimungkinkan, tetapi Anda dapat menonaktifkan ikon, versi 4.3 (18) dan di bawahnya dimungkinkan untuk menyembunyikan pemberitahuan

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);
vlad sol
sumber
Meskipun jawaban ini mungkin benar dan berguna, akan lebih disukai jika Anda menyertakan beberapa penjelasan bersama dengan penjelasan bagaimana hal itu membantu memecahkan masalah. Ini menjadi sangat berguna di masa mendatang, jika ada perubahan (mungkin tidak terkait) yang menyebabkannya berhenti bekerja dan pengguna perlu memahami cara kerjanya dulu.
Kevin Brown
Menurut saya Android 4.3 sebenarnya adalah API 18. Selain itu, metode ini hanya menyembunyikan ikon dari bilah status; ikon masih ada di notifikasi.
Sam
untuk menyembunyikan ikon dari notifikasi Anda bisa menambahkan gambar kosong mBuilder.setSmallIcon (R.drawable.blank);
vlad sol
1
Saya melihat sumber kitkat, dan metode ID nol sepertinya tidak dapat berfungsi. jika ID-nya nol, record layanan diperbarui ke BUKAN latar depan.
Jeffrey Blattman
2

Saya telah menemukan di Android 8.0 itu masih mungkin dengan tidak menggunakan saluran notifikasi.

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 {
                //...
            }

        }
    }
}

Dan di BluetoothService.class:

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

        }

    }

Notifikasi terus-menerus tidak ditampilkan, namun Anda akan melihat notifikasi aplikasi Android 'x berjalan di latar belakang'.

Pete
sumber
1
Di Android 8.1: "Notifikasi buruk untuk startForeground: java.lang.RuntimeException: saluran tidak valid untuk notifikasi layanan"
T-igra
Secara pribadi, saya pikir apps are running in the backgroundnotifikasi itu bahkan lebih buruk daripada notifikasi khusus aplikasi, jadi saya tidak yakin pendekatan ini sepadan.
Sam
-2

Pembaruan: ini tidak lagi berfungsi di Android 7.1 dan di atasnya


Berikut adalah cara untuk membuat oom_adj aplikasi Anda menjadi 1 (Diuji dalam emulator SDK ANDROID 6.0).Tambahkan layanan sementara, Di panggilan layanan utama Anda startForgroundService(NOTIFICATION_ID, notificion). Kemudian mulai panggilan layanan sementara startForgroundService(NOTIFICATION_ID, notificion)dengan id notifikasi yang sama lagi, setelah beberapa saat dalam panggilan layanan sementara stopForgroundService (true) untuk menutup onging ontification.

Tshunglee
sumber
Ini adalah satu-satunya solusi yang saya sadari. Namun, itu sudah tercakup dalam jawaban lain .
Sam
-3

Anda juga bisa mendeklarasikan aplikasi Anda sebagai persistent.

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

Ini pada dasarnya menetapkan aplikasi Anda pada prioritas memori yang lebih tinggi, sehingga mengurangi kemungkinan dimatikannya aplikasi.

Penghuni
sumber
5
Ini salah, hanya aplikasi sistem yang dapat bertahan: groups.google.com/forum/?fromgroups=#!topic/android-developers/…
Snicolas
-6

Saya mengembangkan pemutar media sederhana beberapa bulan lalu. Jadi yang saya yakini adalah jika Anda melakukan sesuatu seperti:

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

startService (i);

Maka sistem seharusnya tidak dapat mematikan layanan Anda.

referensi : baca paragraf yang membahas kapan sistem menghentikan layanan

redM0nk
sumber
Saya membaca di beberapa artikel. Jika hanya melakukan startService () maka sistem membutuhkan lebih banyak memori. Jadi sistem akan mematikan layanan itu. itu benar? Saya hanya tidak punya waktu untuk melakukan percobaan dalam pelayanan.
Muhammad Resna Rizki Pratama
1
Muhammad, itu benar - tujuan startForeground () adalah untuk secara efektif memberikan layanan "prioritas memori" yang lebih tinggi daripada layanan latar belakang sehingga dapat bertahan lebih lama. StartForeground () harus menggunakan pemberitahuan sehingga pengguna lebih sadar akan layanan yang lebih persisten / lebih sulit dihentikan yang sedang berjalan.
DustinB
Ini tidak benar; secara praktis tidak mungkin membuat layanan yang tidak bisa dimatikan di Android. Android dengan mudah mematikan layanan non-latar depan untuk mengosongkan memori.
Sam