android - software - क्या BroadcastReceiver.onReceive हमेशा यूआई थ्रेड में चलाता है?
android system download (4)
मेरे ऐप में, मैं एक कस्टम BroadcastReceiver
Context.registerReceiver
बनाता हूं और इसे Context.registerReceiver
माध्यम से मैन्युअल रूप से अपने संदर्भ में पंजीकृत करता हूं। मेरे पास एक AsyncTask
भी है जो AsyncTask
माध्यम से नोटिफ़ायर- AsyncTask
को प्रेषित करता है। इरादे एक गैर-यूआई कार्यकर्ता थ्रेड से भेजे जाते हैं, लेकिन ऐसा लगता है कि BroadcastReceiver.onReceive
रिसीवर.ऑन रिसीव (जिसे इरादे कहा जाता है) हमेशा यूआई थ्रेड में चलाता है (जो मेरे लिए अच्छा है)। क्या यह गारंटी है या मुझे उस पर भरोसा नहीं करना चाहिए?
क्या BroadcastReceiver.onReceive हमेशा यूआई थ्रेड में चलाता है?
आमतौर पर, यह सब निर्भर करता है कि आप इसे कैसे पंजीकृत करते हैं।
यदि आप अपने BroadcastReceiver
का उपयोग कर पंजीकरण करते हैं:
registerReceiver(BroadcastReceiver receiver, IntentFilter filter)
यह मुख्य गतिविधि थ्रेड (उर्फ यूआई थ्रेड) में चलेगा।
यदि आप एक अलग थ्रेड पर चल रहे वैध Handler
का उपयोग करके अपने BroadcastReceiver
Handler
पंजीकृत करते हैं:
registerReceiver (BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler)
यह आपके Handler
के संदर्भ में चलाएगा
उदाहरण के लिए:
HandlerThread handlerThread = new HandlerThread("ht");
handlerThread.start();
Looper looper = handlerThread.getLooper();
Handler handler = new Handler(looper);
context.registerReceiver(receiver, filter, null, handler); // Will not run on main thread
क्या BroadcastReceiver.onReceive हमेशा यूआई थ्रेड में चलाता है?
हाँ।
जैसा कि पिछले उत्तरों सही ढंग से बताए गए हैं, onReceive
उस थ्रेड पर चलेगा, जिस पर यह रजिस्टर किया गया है, यदि onReceive
registerReceiver()
जो एक हैंडलर स्वीकार करता है उसे बुलाया जाता है - अन्यथा मुख्य धागे पर।
सिवाय इसके कि रिसीवर LocalBroadcastManager
ब्रॉडकास्ट LocalBroadcastManager
साथ पंजीकृत है और प्रसारण sendBroadcastSync
माध्यम से है - जहां यह apparently पर थ्रेड पर sendBroadcastSync.
जो sendBroadcastSync.
हां Context.registerReceiver (ब्रॉडकास्ट रिसीवर रिसीवर, IntentFilter फ़िल्टर, स्ट्रिंग प्रसारण पैरामिशन, हैंडलर शेड्यूलर)