2016-03-03 8 views
12

फ़ायरबेस के उपयोग से एक एंड्रॉइड एप्लिकेशन में, फायरबेस एक क्वेरी उत्तर देता है, तो मुझे पृष्ठभूमि में लंबे संचालन निष्पादित करने की आवश्यकता होती है। उदा .:फायरबेस एंड्रॉइड: ऑनडाटा चेंज() ईवेंट हमेशा मुख्य यूआई थ्रेड में निष्पादित किया जाता है?

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

मुझे पता है कि firebase अतुल्यकालिक मोड में क्वेरी निष्पादित लेकिन onDataChange() विधि भले ही मैं एक कस्टम पृष्ठभूमि थ्रेड में क्वेरी कॉल करने के लिए प्रयास करते हैं, हमेशा मुख्य यूआई थ्रेड में क्रियान्वित किया जा रहा है।

क्या कोई जानता है कि इस उपयोग के मामले को कैसे प्रबंधित किया जाए?

उत्तर

16

आपके फायरबेस श्रोताओं के लिए कॉलबैक वास्तव में मुख्य यूआई थ्रेड पर निष्पादित किए जाते हैं।

यदि आपको कॉलबैक में भारी परिचालन करने की आवश्यकता है, तो AsyncTask पर स्पिन करें और वहां कार्य करें। AsyncTask.doInBackground() विधि एक अलग थ्रेड पर निष्पादित करता है, इसलिए यह एंड्रॉइड यूआई को अवरुद्ध नहीं करेगा। लेकिन AsyncTask. onPostExecute() फिर से मुख्य थ्रेड पर निष्पादित करता है, ताकि आप वहां से अपने यूआई दृश्य अपडेट कर सकें।

+0

ठीक है अब यह स्पष्ट है। मैं सीधे asDataChange() विधि में एक async कार्य लॉन्च करूंगा, और यह कार्य अंत में कॉलबैक UI श्रोता को निष्पादित करेगा। – toofoo

+8

क्या थ्रेड सेट करने का कोई तरीका है जहां आप कॉलबैक कार्रवाई वापस प्राप्त करना चाहते हैं? –

+1

फ्रैंक, क्या आपके पास यह विचार दिमाग में है? उस थ्रेड का चयन करने में सक्षम होने के लिए जिसे आप फायरबेस कॉलबैक वापस करना चाहते हैं? –

संबंधित मुद्दे