SORU
28 EYLÜL 2010, Salı


android tasarım konuları: AsyncTask vs Servisi (İntentService?)

Aşağıdaki adımları yapmak gerekir: android uygulaması tasarlıyorum

  1. kullanıcı bir düğmeye basar ya da başka gösterir "sync veri".
  2. sync işlemi REST web servisleri ve sunucu arasında veri taşımak için kullanacak.
  3. verileri yerel bir sqlite veritabanında saklanır.
  4. sync işlemi için UI mesajları/durum güncellemeleri sağlayacaktır
  5. kullanıcı, uygulamanın diğer kısımlarına dolaşır ve eşitleme işlemi sırasında daha fazla iş yapmak için izin verilmemelidir.

Sync işlemi çalışır ilk kez, 10-20 dakika sürebilir. İlk eşitleme sonra, daha az veri transfer ve depolanacak ve Bu işlem 1-2 dakika ya da daha az almak için bekliyorum.

Yapmakta olduğum bir sürü okuma android hakkında AsyncTask ve çeşitli örnekler kullanarak bir Hizmet ... Ama bilmiyorum tam olarak anlamak tasarımları ve takaslar seçme bir tasarım üzerinde. Ben şu anda demo projem bir AsyncTask kullanarak saplama. (En) Android REST istemci uygulamaları Geliştirme izledikten sonra: http://code.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html# tasarım desenleri burada anlatılan aşırı karışmış gibi terk ediyorum ben sadece "o" henüz alamadım. çünkü karmaşık, belki de

Java, spring, web ve masaüstü uygulama arka plandan geliyorum. Ve bir el cihazı üzerinde düşünmeye tasarımı benim için oldukça yeni. (Ne ekran düzeni değiştiğinde olur? Bir senkron çalışan ben yokken telefon çaldığında ne olacak?) 2 geri adımlar atıyor Eğer ilk sync gibi uzun süren bir süreç olacak olursa, bana sorun -^ hakkında düşünmek için iyi bir yoldur . bir uygulama, bir telefon üzerinde çalışan çözüm, kullanıcı deneyimi, kullanıcı beklentileri?

Zaten bu soru ile mücadele eden ve daha tecrübeli bazı android geliştiricileri orada duymak isterdim.

CEVAP
14 Kasım 2010, Pazar


Bence bu bir ana/ortalama Android geliştirme en zor/zor kısmıdır. BlackBerry mesela bu ZAMANLARDA daha kolaydır.

Kesinlikle Service kullanmak gerekir.

AsyncTask uygun değil, çünkü sıkı bir şekilde "bağlı" Activity) Context kolu (aksi olmaz edebilmek için güncelleme UI Activity AsyncTask). Ancak bir Activity Activity arka planda gittiği OS tarafından öldürülmüş olabilir. Arka plan gitme sebebi gelen arama - kullanıcı anahtarları olabilir örnek Telefon uygulaması için Activity görünmez olur. Bu durumda (mevcut RAM durumuna bağlı olarak) işletim sistemi arka planda () kullanıcı için görünmez öldürmeye karar verebilir faaliyetleri.

Bazı geliştiriciler uzun süren eylemler içinde olması için statik bir şeyleri düzenleyerek bu geçici çözüm. Bazı Application örnek kullanmanızı öneriyoruz. Bu statik şeyler olduğundan ve Application tüm uygulama süreci var süre var. Ancak bu yanlış çözümler vardır. Android işlemler de OS için zaman karar verdiğinde öldürmüş olabilir. Android işletim sistemi ve hangi sırayla öldürebilir ne hakkında kendi hususlar var. Tüm işlemler 5 seviyelerine devided "killability". Bu seviyeleri belirtilen yere Here is the doc. İlginç bir okuma var:

Bir işlem bir hizmet çalıştığı için arka plan ile daha yüksek sırada yer aldı faaliyetleri başlatan bir aktivite uzun süren bir işlem de yapabilir bu işlem için bir servisi başlatmak için sadece bir iş parçacığı spawn —yerine eğer bu işlem özellikle Olası faaliyet dayanmak. Örnekler bu müzik çalıyor ve bir resim yükleme arka plan bir web sitesine fotoğraf makinesi ile çekilmiş. Bir servisi kullanarak, garanti operasyon azından "hizmet olacak süreci" öncelik, ne olursa olsun faaliyet.

Kullanıcılar uzun süren bir eylem başlatmak nereye* *12 emin olmak için ProgressDialog bir kullanıcı yapmaz göstermelidir eylem çalışırken başka bir şey. Kılavuzu here.

Ayrıca, büyük olasılıkla eğer Activity şu anda görünmez ise uzun süren eylem tamamlama (ya da başarısız) hakkında kullanıcı bildirmek için NotificationManager kullanmalısın. Burada başlamak için NotificationManager info.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CrazyMan

    CrazyMan

    14 Mayıs 2008
  • ::..ηєѕѕ мιχ..::

    ::..ηєѕѕ

    15 Aralık 2006
  • Peyton

    Peyton

    28 Aralık 2008