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

here और here विवरण।


क्या BroadcastReceiver.onReceive हमेशा यूआई थ्रेड में चलाता है?

हाँ।


जैसा कि पिछले उत्तरों सही ढंग से बताए गए हैं, onReceive उस थ्रेड पर चलेगा, जिस पर यह रजिस्टर किया गया है, यदि onReceive registerReceiver() जो एक हैंडलर स्वीकार करता है उसे बुलाया जाता है - अन्यथा मुख्य धागे पर।

सिवाय इसके कि रिसीवर LocalBroadcastManager ब्रॉडकास्ट LocalBroadcastManager साथ पंजीकृत है और प्रसारण sendBroadcastSync माध्यम से है - जहां यह apparently पर थ्रेड पर sendBroadcastSync. जो sendBroadcastSync.


हां Context.registerReceiver (ब्रॉडकास्ट रिसीवर रिसीवर, IntentFilter फ़िल्टर, स्ट्रिंग प्रसारण पैरामिशन, हैंडलर शेड्यूलर)





android