Ne olursa olsun bir uygulamayı arka planda çalışmaya zorlamak için bir yol var mı?


12

Ice Cream Sandwich'de (ICS) işletim sistemi uygulamanızı kategorize eder ve her kategorinin işletim sisteminin, bellek bittiğinde ilk olarak hangi uygulamanın kapanacağını belirlemek için kullandığı kendi eşiği vardır.

Biriniz tarafından geçen süreyi ölçmek için arka planda çalışacak bir zamanlayıcı açtınız, sonra birkaç uygulama daha açtınız ve sadece sıfırlandığını veya kapatıldığını görmek için zamanlayıcınıza geri döndünüz mü? Cidden, gerçekten dayanılmaz derecede sinir bozucu.

İşletim sistemi yetersiz kaldığında bile bir uygulamayı arka planda çalışmaya zorlamak için bir yol var mı?


7
Bu App tarafından kötü bir kod bir işarettir. Bir kullanıcı asla bununla uğraşmak zorunda kalmamalı ve Android, bir Uygulamanın durumunu kaydedip daha sonra geri yükleyebilmesi için araçlar (eski Android sürümlerinden beri) sağlar. Uygulama geliştiricisine bir hata raporu göndermelisiniz.
Flow

Yanıtlar:


8

Kabul edilen cevap yanlış veya güncel değil. Xposed uygulaması için "Uygulama Ayarları" modülü, uygulamaların öldürülmesini veya serbest bırakılmasını önlemek için uygulama başına temelde belirtmenize olanak tanır:

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

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

Bu tür düşük düzeyli davranışları değiştiren uygulamalarla oynarken elbette sorumlu özen gösterilmelidir.


Bunun kök gerektirdiğini ve ağır bir Android OS modifikasyonunun yüklenmesi olduğunu belirtmek gerekir.
sweisgerber.dev

5

Basit cevap: Hayır. Android, kullanılmayan belleği boşaltmak için her zaman OOM (Bellek Dışı) kullanır. Bazı görev yöneticileriyle uygulamaların önceliklerini (en azından yeniden başlatılıncaya kadar) değiştirebilirsiniz, ancak o zaman bile bellek azalsa bile, arka plandaki uygulamalar öldürülmeye başlar.

Bu senaryoyu düşünün: önyüklemede çalışan, arabellek taşmasına neden olan ve tüm belleğinizi barındıran kötü kodlanmış bir uygulama indirdiniz. Normalde, bu uygulama öldürülür, ancak açık kalacak şekilde ayarlanmışsa, yeniden başlatılıncaya kadar telefonunuzu etkili bir şekilde tuğlalar ve bundan sonra tekrar tekrar başlar.

Bazı zamanlayıcılar, bu sorunu önlemek için yüksek öncelikli hizmetleri kullanır, ancak zamanlayıcı arka planda iken yeterince yüksek performanslı, kaynak barındıran uygulamalar başlatırsanız, sonunda öldürülür.


1
Bu şekilde olması gerekmez, IMO. Sistemin eski yöntemlerini varsayılan olarak yapmasına izin verin ve kullanıcının belirli bir uygulamanın ihtiyaç duyulduğunda belirli bir anda arka planda çalışmasını istemesi durumunda bu seçeneği sağlayın. Başka bir izin kategorisine sahip olmak gerekmez, çünkü kullanıcıların bir uygulamayı "sabitlemesine" bağlıdır. Bir uygulamanın çalıştıktan sonra kalıcı olarak durdurulamaz olmasını istemiyorum. Sadece sorumda açıkladığım gibi bir ihtiyaç olduğunda bunu yapmak için bir seçenek istiyorum.
supertonsky

1
@onik bir arabellek taşması hafızasıyla ilgisi yoktur. Arabellek taşmasının ne olduğunu biliyor musunuz?

3
@onik yani cevap hayır, arabellek taşmasının ne olduğunu bilmiyorsunuz. Anladım.

1
@onik ayrıca bağlantılı bir listedeki sonsuz bir döngü, Integer.MAX_VALUEzamanları döngüye sokmadan çok önce bir OOM'ye girebilir . Sizce neden her şey sınırlıdır Integer.MAX_VALUE?

1
@onik doğru: tanım gereği, arabellek taşması ayrılan bellek boyutunu genişletemez. Ayrılan bellek boyutunu genişletirse, arabellek taşması olmaz. Sanırım sonsuz bir döngü düşünüyorsun.
Mooing Duck

1

Hayır. Ancak, sorunu hafifletmek için iki yöntem akla geliyor, ancak her ikisi de yalnızca geliştirici tarafından uygulanabilir: Birincisi bir bildirim görüntülemek, Android bunu diğerlerinden daha yüksek önceliğe sahip uygulamalar verecek. İkincisi başlangıç ​​zamanını kaydetmek, böylece zamanlayıcı sonunda yeniden başlatıldığında sıfırlanmaz.


1
Uygulamaları Ön Plan önceliği ile nedensiz çalıştırmak (bu nedenle bildirim gereklidir) kötü uygulama olarak kabul edilir. Daha önce de söylendiği gibi: Android, OOM katilinden etkilenmeyen zamanlayıcılara / sayaçlara bile izin veren güzel bir Api sağlar. Dianne Hackborn bu konuda güzel bir yazı var
Flow

Böyle bir API olduğundan şüphe duymuyorum, ancak bu soruda daha önce nerede bahsedildi?
Erik

1
Ayrıca, yayınladığınız oyun örneğinin aksine, bu durumda mümkünse uygulamayı çalışır durumda tutmak için bir neden var.
Erik

4
Hayır, bir Uygulamanın yalnızca bir zamanlayıcı nedeniyle çalışmasını sağlamak için hiçbir neden yoktur. Zamanlayıcı bilgileri de dahil olmak üzere Uygulama durumunu korumak için onSaveInstanceStateve tuşlarını kullanın onRestoreInstanceState. Ön planda koşmanıza gerek yok. Daha AlarmManagersonra çalıştığından emin olmak için kullanabileceğiniz bir alarm olsa bile . Ön Plan'ın kullanılmasının tek nedeni: 1. Müzik çalmak veya video göstermek gibi devam eden gerçek ön plan etkinliğiniz vardır. 2. Bir veri bağlantısını açık tutmak istiyorsunuz (örn. IMAP IDLE (push)).
Flow

0

1. yöntem: - Programda Yapışkan İplik yaparsanız, evet programınızı zorla çalışır durumda tutabilirsiniz. Ancak, gelişmiş ayar modunda kullanıcının arka planda çalışan uygulamaları durdurabileceğini unutmayın. Ancak bir yapışkan iplik oluşmuş herhangi bir olayı başlayacak şekilde yazarsanız, o zaman bu elde edilebilir.

2. yöntem: Eğer kullanıcı rootlu değilse android ve u inci arka planda bir uygulama çalıştırmak istiyorum. app arka planda SL4 komut dosyası kullanın. arka plan denetimleri ve programları yapacak bir komut dosyası kullanın ve başka bir şey göstermek için ön uç yazın.

Örneğin: Çoğu oyun motorunda bu yerleşiktir. Kullanıcı uygulamayı kapatmış olsa bile sunucuya bağlanırlar. Motorun telefonda belirli bir olayda randaomly kontrol edilen birden fazla komut dosyası oluşturmasının ve TRIGGER'ın uygulamanızı ön planın arka planında sürekli olarak çalıştırmak için kullanılmasının nedeni.

*** TYPO'lar için üzgünüm .. yazım denetleyicisi kullanılamıyor. U almak istediğini elde umuyoruz.


Android son kullanıcıları için bir Soru-Cevap sitesi olan Android Enthusiast'a hoş geldiniz. Anlayabildiğim kadarıyla, sağladığınız 2 yöntem yalnızca geliştirici tarafından, yani uygulamanın kaynak koduna sahip olanlardan yapılabilir. Ne yazık ki, bu uygulama çoğu okuyucu için yararlı olmayabilir çünkü bir uygulama geliştirmiyorlar. Eğer bu sigara geliştirici için geçerli olabilir, düşünün düzenleme o üzerinde temizlemek yapma cevabını ing uygulamanın kaynak kodunu dokunmadan bu nasıl . Teşekkürler.
Andrew T.

-1

Bazen uygulamayı kilitlemek için bir seçenek vardır . Bu , söz konusu uygulamanın telefonda öldürülmesini veya durdurulmasını önler .

Kilitleme seçeneği işletim sisteminin kendisinde mevcut değildir, GO Task Manager gibi bazı üçüncü taraf uygulamaları kullanmak yardımcı olabilir.


2
OOM öldürme çekirdek tarafından yapılır ve hiçbir uygulama bunu engelleyemez veya bir işlemi "kilitleyemez". Bağlantı verdiğiniz uygulama, uygulamaların kendisini öldüren bir görev katilidir. Bahsettiğiniz kilitleme özelliği yalnızca görev katili tarafından öldürülmeyi önleyecektir.
Erik
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.