2016-03-03 12 views
12

Firebase'i kullanan bir Android uygulamasında, Firebase bir sorgu yanıtı verdiğinde arka planda uzun işlemleri yürütmem gerekir. Örn .: Firebase Android: onDataChange() olayı her zaman Ana Kullanıcı Arabirimi'nde yürütülür?

query.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot data) { 
     dosomething very long. . . 
     then call a callback forUI thread 
    } 

O Firebase uyumsuz modunda sorguyu yürütmek biliyorum ama onDataChange() yöntem ben özel bir arka plan Konu sorguyu aramaya çalıştığımda bile, her zaman ana UI Thread idam gibi görünüyor.

Bu kullanım durumunu nasıl yönetecek bilen var mı?

cevap

16

Firebase dinleyicilerinizin geri çağrıları, gerçek UI iş parçacığı üzerinde gerçekleştirilir.

Bir geri aramada ağır işlemler yapmanız gerekiyorsa, bir AsyncTask ürününü açın ve işi orada yapın. AsyncTask.doInBackground() yöntemi farklı bir iş parçacığı üzerinde çalışır, bu nedenle Android UI'yi engellemez. Ancak AsyncTask. onPostExecute() ana iş parçacığını yeniden çalıştırır, böylece kullanıcı arayüzü görünümlerinizi buradan güncelleyebilirsiniz.

+0

tamam şimdi daha açık. Doğrudan bir inync görevini onDataChange() yönteminde başlatacağım ve bu görev en sonunda geri çağrı UI Listener'ı yürütecek. – toofoo

+8

Geri arama işlemini geri almak istediğiniz yere iş parçacığı ayarlamanın bir yolu var mı? –

+1

Frank, aklında bu fikri var mı? Firebase geri aramasını döndürmek istediğiniz parçayı seçebilmek için? –

İlgili konular