Soru & Cevap

Asenkron işlemlerde ön yüz donma sorunu

06.01.2016 - 11:19

Merhaba,

Amacım uygulama çalışırken arka planda bir takım işlemlerin olması ve kullanıcının bu esnada değişik uygulamalara girip çıkabilmesi. Arka plandaki işlemler bazen uzun sürebilmektedir. Bunun için;

- AsyncTask

- Service

- Intent Service

- Sync Framework

denemlerinde bulundum. İşlem olarak da genellikle Volley ile serverdan veri çekilmekte, Gson ile işlenmektedir. Bazı zamanlarda ön yüz ile etkileşim olabilmekte ama genellikle arkada sessiz sedasız çalışması beklentisindeyim.

Ancak her birinde işlemde ön yüz kilitlenmekte ve işlem sonunda açılmaktadır. Bazen işlem uzun sürerse ANR (Application Not Responding) yani uygulamadan yanıt alınamadı kapatmak istermisiniz şeklinde uyarı vermektedir.

Volley ve benzerlerini çağırmak için Context bilgisini parametre olarak göndermekteyim. Ben bundan dolayı ön yüzün kilitlendiğini sanıyorum. Ama Context olmadan da kütüphane kullanılamıyor.

Bir kod örneği veya herhangi bir fikriniz var mı?

Teşekkürler.

7 Görüntülenme

3 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-11052-1576825910.jpg
alikarakoc
06.01.2016 - 11:48

Arda,

Çok uzun süreli arka plan işlemleri (örneğin veritabanı güncelleme, dosya indirme) için Service sınıflarının kullanılması tavsiye edilir. 

AsyncTask, Thread yerine Service sınıfını kullanmanı tavsiye ederim. Bu durumda kasma donma kilitleme gibi bir sorunla karşılacağını sanmıyorum kendi uygulamamda 5 dakikada bir api servisime gidip veritabanı işlemleri yaptırıyorum başka uygulamada oyun oynarken herhangi bir kitleme veya kasmada olmuyor.

NOT: Arka planda Java Thread sınıfıyla çalıştırılan iş parçacıkları ön yüz elemanlarına müdahale edemez. Bunun için Handler adında bir sınıf kullanılmalıdır.

İyi çalışmalar.

Arda ALTAY
07.01.2016 - 11:22
O zaman muhtemelen bir şeyleri yanlış yapıyor olmalıyım. Gerçi Service denemedim. Intent Service denedim. Daha profesyonel olduğu belirtilen Sync Adapter i de denedim. hepsinde ön yüzde donma sorunu yaşıyorum. Sync Adapter (Framework) zaten servis ınıflarından oluşuyor. Anlamadığım kısım da bu oldu zaten. Sorunun şurada olduğunu tahmin ediyorum. Bir activity içinden Service sınıfını tetikliyorum. Serviste volley var. Volley çalışmak için context isiyor. Servise activity den context gönderiyorum. Sanki donmaya bu neden oluyor gibi algıladım. Yani servis kardeşim sen falanca activity den beni çağırdın. Orayı bir kasayım ben diyor... :)
Arda ALTAY
07.01.2016 - 11:25
Bu arada yablışlıkla başka uygulamada gezinsin yazmışım. Aynı uygulamanın farklı activity lerinde demek istemiştim.
Profile picture for user aaltay
aaltay
06.01.2016 - 09:25

Sorun runnable  ya da diğer seçeneklerin tamamında ekranda işlem süresince donma oluyor. Normalde yazılardan okuduğum ön yüzün donmaması gerektiği. ama donuyor bekliyorsun.

picture-11052-1576825910.jpg
alikarakoc
06.01.2016 - 02:04

Arda Merhaba,

Daha önce android tarafında Runnable ile yaptığım bir serviste 5 dakika da bir sunucuma Volley ile post edip gerekli işlemlerimi yaptırıyordum uygulama açık olsada başka uygulamada olsada hatta uygulama kapalı bile olsa sorunsuz çalışıyordu bende ? 

Sende ki sorun tam olarak nedir anlayamadım.