Apakah ada cara untuk memaksa aplikasi agar tetap berjalan di latar belakang tidak peduli apa?

12

Pada Ice Cream Sandwich (ICS) OS mengkategorikan aplikasi Anda dan masing-masing kategori memiliki ambangnya sendiri di mana OS digunakan untuk menentukan aplikasi mana yang ditutup lebih dulu ketika kehabisan memori.

Adakah di antara Anda yang terganggu oleh, misalnya Anda membuka penghitung waktu untuk berjalan di latar belakang untuk mengukur waktu yang berlalu dari sesuatu, lalu Anda membuka beberapa aplikasi lagi dan kembali ke penghitung waktu Anda hanya untuk melihatnya diatur ulang atau ditutup? Maksudku, serius, ini benar-benar menyebalkan.

Apakah ada cara untuk memaksa aplikasi agar tetap berjalan di latar belakang tidak peduli apa pun saat OS kehabisan memori?

supertonsky
sumber
7
Itu pertanda kode buruk oleh Aplikasi. Seorang pengguna seharusnya tidak perlu repot dengan ini dan Android menyediakan sarana sehingga Aplikasi dapat menyimpan status mereka dan mengembalikannya nanti (sejak versi Android awal). Anda harus mengirim laporan bug ke pengembang Aplikasi.
Aliran

Jawaban:

8

Jawaban yang diterima ternyata salah atau ketinggalan zaman. Modul "Pengaturan Aplikasi" untuk aplikasi Xposed memungkinkan Anda menentukan secara per aplikasi untuk menjaga aplikasi agar tidak terbunuh atau dibebaskan:

http://repo.xposed.info/module/de.robv.android.xposed.installer

http://repo.xposed.info/module/de.robv.android.xposed.mods.appsettings

Perawatan yang bertanggung jawab tentu saja harus dilakukan ketika bermain dengan aplikasi mengubah perilaku tingkat rendah tersebut.

Torsi
sumber
Orang harus mencatat, bahwa ini memerlukan root dan merupakan instalasi modifikasi OS Android berat.
sweisgerber.dev
5

Jawaban sederhana: Tidak. Android selalu menggunakan OOM (Kehabisan Memori) memprioritaskan untuk membebaskan memori yang tidak digunakan. Anda dapat mengubah prioritas aplikasi (setidaknya sampai reboot) dengan beberapa task manager tetapi meskipun itu jika kehabisan memori, aplikasi di latar belakang mulai terbunuh.

Pikirkan skenario ini: Anda telah mengunduh aplikasi berkode buruk yang berjalan saat boot, menyebabkan buffer overflow dan menyimpan semua memori Anda. Biasanya, aplikasi ini terbunuh, tetapi jika tetap dibuka secara efektif akan merusak ponsel Anda sampai reboot, dan setelah itu dimulai lagi, dan lagi, dll.

Beberapa penghitung waktu menggunakan layanan dengan prioritas tinggi untuk menghindari masalah ini, tetapi jika Anda meluncurkan aplikasi pemogokan sumber daya berkinerja tinggi yang cukup ketika pengatur waktu berada di latar belakang, penghitung waktu pada akhirnya akan terbunuh.

onik
sumber
1
Tidak harus seperti itu, IMO. Biarkan sistem melakukan cara-cara lama secara default dan jika pengguna bermaksud satu aplikasi tertentu untuk berjalan di latar belakang pada saat tertentu ketika kebutuhan muncul, berikan saja opsi itu. Tidak perlu memiliki kategori izin lain karena itu adalah kebijaksanaan pengguna untuk "menyematkan" aplikasi. Saya tidak ingin aplikasi terhenti secara permanen setelah dijalankan. Saya hanya ingin opsi untuk melakukan ini ketika ada kebutuhan seperti apa yang saya jelaskan dalam pertanyaan saya.
supertonsky
1
@onik buffer overflow tidak ada hubungannya dengan memonopoli memori. Apakah Anda tahu apa itu buffer overflow?
3
@onik jadi jawabannya tidak, Anda tidak tahu apa itu buffer overflow. Mengerti.
1
@onik juga loop tak terbatas dalam daftar tertaut tentu bisa membuat Anda menjadi OOM jauh sebelum Anda mengulang Integer.MAX_VALUEkali. Mengapa Anda pikir segala sesuatunya dibatasi Integer.MAX_VALUE?
1
@onik benar: menurut definisi, buffer overflow tidak dapat memperluas ukuran memori yang dialokasikan. Jika memperluas ukuran memori yang dialokasikan, itu bukan buffer overflow. Anda berpikir tentang loop tak terbatas, saya pikir.
Mooing Duck
1

Tidak. Namun, dua metode untuk mengatasi masalah muncul di pikiran tetapi keduanya hanya dapat diterapkan oleh pengembang: Yang pertama adalah menampilkan pemberitahuan, Android akan memberikan aplikasi yang melakukan ini prioritas yang lebih tinggi daripada yang lain. Yang kedua adalah untuk menghemat waktu mulai sehingga ketika timer pada akhirnya restart, itu tidak akan diatur ulang.

Erik
sumber
1
Menjalankan Aplikasi tanpa alasan dengan prioritas Foreground (itulah sebabnya pemberitahuan diperlukan) dianggap praktik yang buruk. Seperti yang dikatakan sebelumnya: Android menyediakan Api yang bagus yang bahkan memungkinkan timer / penghitung yang tidak terpengaruh oleh pembunuh OOM. Ada posting yang bagus dari Dianne Hackborn tentang topik ini
Flow
Saya tidak ragu bahwa ada API seperti itu, tetapi di mana dalam pertanyaan ini telah disebutkan sebelumnya?
Erik
1
Juga, jelas ada alasan untuk menjaga aplikasi tetap berjalan jika memungkinkan dalam kasus ini, tidak seperti contoh game yang Anda posting.
Erik
4
Tidak, tidak ada alasan untuk membuat Aplikasi tetap berjalan hanya karena timer. Cukup gunakan onSaveInstanceStatedan onRestoreInstanceStateuntuk mengamankan status Aplikasi, termasuk informasi pengatur waktu. Tidak perlu dijalankan di Foreground. Bahkan jika itu alarm yang dapat Anda gunakan AlarmManageruntuk memastikan bahwa itu dieksekusi nanti. Satu-satunya alasan di mana Foreground harus digunakan adalah: 1. Anda memiliki aktivitas foreground aktual yang sedang berlangsung, seperti memutar musik atau menampilkan video. 2. Anda ingin menjaga koneksi data tetap terbuka (mis. IMAP IDLE (push)).
Alur
0

Metode 1: - Jika Anda membuat Sticky Thread dalam program ini, ya Anda bisa menjalankan program dengan paksa. Namun ingat pengguna pada mode pengaturan lanjutan dapat menghentikan aplikasi yang berjalan di latar belakang. Namun jika Anda menulis utas lengket dengan cara yang dimulai pada setiap acara yang terjadi maka ini dapat dicapai.

Metode 2: JIKA pengguna non-root Android dan Anda ingin menjalankan aplikasi di latar belakang th. gunakan skrip SL4 di latar belakang dari aplikasi. gunakan skrip yang akan melakukan pemeriksaan latar belakang dan program dan menulis ujung depan untuk menunjukkan sesuatu yang lain.

Misalnya: Di sebagian besar mesin game ini dibangun. Mereka terhubung ke server meskipun pengguna mematikan aplikasi. Alasan mesin membuat beberapa skrip di telepon yang diperiksa secara acak pada setiap acara tertentu dan bahwa TRIGGER digunakan untuk menjalankan aplikasi Anda secara terus-menerus di latar depan latar depan.

*** Maaf untuk TYPO's .. pemeriksa ejaan tidak tersedia. Semoga Anda mencapai apa yang ingin Anda dapatkan.

Becky Mannie
sumber
Selamat datang di Android Enthusiast, situs tanya jawab untuk pengguna akhir Android. Sejauh yang saya mengerti, 2 metode yang Anda berikan hanya dapat dilakukan dari sisi pengembang, yaitu mereka yang memiliki kode sumber aplikasi. Sayangnya, itu mungkin tidak bermanfaat bagi sebagian besar pembaca di sini karena mereka tidak mengembangkan aplikasi. Jika ini mungkin berlaku untuk non-pengembang, pertimbangkan untuk mengedit jawaban untuk memperjelas cara melakukan ini tanpa menyentuh kode sumber aplikasi . Terima kasih.
Andrew T.
-1

Terkadang ada opsi untuk mengunci aplikasi. Ini mencegah pembunuhan atau penghentian aplikasi itu di telepon.

Opsi kunci tidak tersedia di OS itu sendiri, menggunakan beberapa aplikasi pihak ketiga seperti GO Task Manager , dll, dapat membantu.

Jayesh Tiwari
sumber
2
Pembunuhan OOM dilakukan oleh kernel dan tidak ada aplikasi yang dapat mencegahnya atau "mengunci" suatu proses. Aplikasi yang Anda tautkan adalah pembunuh tugas yang membunuh aplikasi itu sendiri. Fitur penguncian yang Anda maksudkan hanya akan mencegah pembunuhan oleh pembunuh tugas.
Erik