Merhabalar. Geliştirmekte olduğum android uygulamasının sürekli arka planda çalışmasını istiyorum.
Service kullanımını denedim ancak arka planda uygulama kapatılınca serviste sonlanıyor ve google, service kullanımını bataryayı çok tüketmesi açısından önermiyor burada nasıl bir yol izleyebilirim?
Yapmak istediğim şey veri tabanında belirli bir alanın değişmesiyle bir metodun çalıştırması ve verisini tekrar veri tabanına göndermesini amaçlıyorum. Veri tabanı olarak firebase database kullanıyorum.
Gökhan Özlük
G
yazılım bilgim az ancak şuna ne dersin. Uygulama içinde bir şarta bağlı tetikleme veya süre bazlı bir tetikleme ile yada başka bir etken ile başlayacak bir yapı hazırlayabilirsin. Böylece fazladan servisle uğramamış olursun. Kendi işini kendin yap mantığı bahsettiğim. Eksiğim varsa düzeltin arkadaşlar
Sorun bu tetiklemeyi yapamıyor olmamda çünkü uygulama arka planda çalışmadığı için zaman bağlı bir tetikleme yapma imkanım olmuyor. Eğer biliyorsanız firebase notifications var ve uygulama arka planda kapalı olsa bile bildirim gönderdiğinizde cihazlara bildirim gidiyor benimde böyle bir yapıya ihtiyacım var uygulama arka planda kapalı olsa bile veri değişince tetiklenmesi gerekiyor, ya da arka planda uygulamayı sürekli çalıştıracak bir yönteme.
servis kullanmadan uygulama kendi kendine çalışamıyor mu? Mesela basit bir alarm ile bu yapılabiliyor
Uygulamadan geri tuşuyla ya da home tuşuyla çıkınca uygulama tamamen kapatılmıyor bu durumda çalışıyor ancak açık olan uygulamaların olduğu kısımdan sürükleme hareketi ya da her hangi bir ram temizleme aracıyla kapatıldığında uygulama tamamen kapanmış oluyor yani artık çalışmadığı için tetikleme yapamıyorum. Dediğiniz gibi basit bir alarm bile bunu yapabiliyor ancak orada nasıl bir yol izliyorlar onu bilmiyorum.
Senin istedigin partial wake lock. PowerManager mgr = (PowerManager)context. GetSystemService(Context. POWER_SERVICE); WakeLock wakeLock = mgr. NewWakeLock(PowerManager. PARTIAL_WAKE_LOCK, "MyWakeLock"); wakeLock. Acquire();
Cpu her zaman uyanik tutar. Ekran kapansa bile. #
https://stackoverflow.com/questions/5286947/wake-locks-android-service-recurring
Teşekkürler deneyeceğim. Peki sizce service kullanımı doğru bir yaklaşım mı batarya yönünden?
Yaptiginiz isleme bagli. Database kontrolu timer veya kullanici arayuzu ile alakali ekstra islemlerin ayri ayri etkileri var. Isletim sisteminin batarya kontrol bitimi bunun hakkinda size daha detayli bilgi verirr. Ama islemciyi veya interneti kullanmayan bir servis batarya dostudur da diyemeyiz. Dediginiz gibi telefona alarm kurdugunuz zaman da servis calisiiyor.
Emre Savas Hocam banada yardımcı olabilirmisiniz
Sorunu okudum ama anlamadim .
Hocam sorun bir butona Üç seçenek vereceğim yapamadım Örnek fotoğraf atıyorum
firebase cloud function #
Cloud functions daha önce kullanmıştım ancak bu durumda nasıl kullanacağımı anlamadım.
veritabanındaki olusan degisikligi anlayip uygulamaya bildirim gönderebilirsin.
Anahtar kelime ya da link verebilir misiniz araştırmam için
https://blog.chizobaogbonna.me/device-to-device-push-notification-using-cloud-functions-for-firebase-5e607d74d7a2
turkce anlatimida vardi linki bulamadim
Oluşturduğunuz servisi sticky Mode olarak yazarsanız uygulama kapansa da servis çalışmaya devam eder
public int onStartCommand(Intent intent, int flags, int startId) { return START_STICKY; } Dediğiniz gibi sticky modda ancak yine de kapanıyor.
Hocam verdiğiniz kodları ekledim ve mainactivity den çağırmak için
Intent intent = new Intent(this, ServiceStarter. Class);
sendBroadcast(intent);
bu kodu yazdım burada hata mı var acaba olmadı da.
Sadece şunu değiştir
Onreceive nin içini
Intent i = new intent(context, süreklicalismasiniisteğinservis. Class);
Context. Startservice(i);
Diğer her yeri aynı kalsın
Main aktivitiden çağırma
Zaten burası otomatik cagiralacak sen sadece onreceive nin içini dediğim gibi yap
Dediğiniz gibi yaptım ancak olmuyor hocam teşekkürler.
Servisi başlattığınız activityde onDestroy komutuna stopService dediyseniz ondan dolayı kapatılıyordur. Ya da servis içerisine AsyncTask kullandıysanız stopSelf yazdıysanız kapatır diğer hallerde bağımlı değildir. Kapatılmaması gerekir. Tabi kullandığınız Started Service ise.
Bir de şu linkteki timerı kullanın stopService veya stopSelf olmadan
https://stackoverflow.com/questions/32259349/run-volley-request-every-5-minutes-in-background-android