मेरे पास एक एंड्रॉइड गतिविधि है जिसे दो अलग-अलग प्रसारणों को पकड़ने की आवश्यकता है। मेरे वर्तमान दृष्टिकोण गतिविधि के भीतर एक भी BroadcastReceiver
है और इसके साथ दोनों प्रसारण को पकड़ने के लिए है:ब्रॉडकास्ट रिसीवर एकाधिक फ़िल्टर या एकाधिक ब्रॉडकास्ट रिसीवर के साथ?
public class MyActivity extends Activity {
private MyActivity.BroadcastListener mBroadcastListener;
private boolean mIsActivityPaused = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mylayout);
// Create the broadcast listener and register the filters
mIsActivityPaused = false;
mBroadcastListener = new BroadcastListener();
IntentFilter filter = new IntentFilter();
filter.addAction(Params.INTENT_REFRESH);
filter.addAction(Params.INTENT_UPDATE);
registerReceiver(mBroadcastListener, filter);
}
@Override
protected void onResume() {
super.onResume();
mIsActivityPaused = false;
}
@Override
protected void onPause() {
super.onPause();
mIsActivityPaused = true;
}
@Override
protected void onDestroy() {
unregisterReceiver(mBroadcastListener);
super.onDestroy();
}
private void refresh() {
// refresh
}
private void update() {
// update
}
private class BroadcastListener extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Params.INTENT_REFRESH && !mIsActivityPaused)) {
refresh();
} else if (intent.getAction().equals(Params.INTENT_UPDATE)) {
update();
}
}
}
}
मैं refresh()
निष्पादित करने के लिए केवल तभी मेरे गतिविधि स्क्रीन पर दिखाई देता है चाहता हूँ, लेकिन मैं INTENT_UPDATE
पकड़ने और निष्पादित करने के लिए चाहते हैं गतिविधि के पूरे जीवनकाल के दौरान update()
, इस पर ध्यान दिए बिना कि गतिविधि दिखाई दे रही है या नहीं।
मैं केवल दो फिल्टर है कि मैं onCreate
में रजिस्टर में से एक का पंजीकरण रद्द करना किसी भी तरह से नहीं मिला, तो मैं एक ध्वज का उपयोग सक्षम या कार्रवाई अक्षम करें, जब INTENT_REFRESH
प्रसारण पकड़ा है निष्पादित करने के लिए राज्य पर निर्भर करता करने के लिए गतिविधि का।
प्रश्न है: क्या यह सही दृष्टिकोण है?
या, यह बेहतर हो इस प्रकार दो अलग-अलग BroadcastReceivers के लिए होगा:
public class MyActivity extends Activity {
private MyActivity.BroadcastListenerRefresh mBroadcastListenerRefresh;
private MyActivity.BroadcastListenerUpdate mBroadcastListenerUpdate;
private boolean mIsBroadcastListenerRefreshRegistered = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Create the broadcast listeners
mBroadcastListenerRefresh = new BroadcastListenerRefresh();
mBroadcastListenerUpdate = new BroadcastListenerUpdate();
registerReceiver(mBroadcastListenerRefresh, new IntentFilter(Params.INTENT_REFRESH));
registerReceiver(mBroadcastListenerUpdate, new IntentFilter(Params.INTENT_UPDATE));
}
@Override
protected void onResume() {
super.onResume();
if (mBroadcastListenerRefresh != null && !mIsBroadcastListenerRefreshRegistered) {
registerReceiver(mBroadcastListenerRefresh, new IntentFilter(Params.INTENT_REFRESH));
mIsBroadcastListenerRefreshRegistered = true;
}
}
@Override
protected void onPause() {
super.onPause();
if (mBroadcastListenerRefresh != null && mIsBroadcastListenerRefreshRegistered) {
unregisterReceiver(mBroadcastListenerRefresh);
mIsBroadcastListenerRefreshRegistered = false;
}
}
@Override
protected void onDestroy() {
unregisterReceiver(mBroadcastListenerRefresh);
unregisterReceiver(mBroadcastListenerUpdate);
super.onDestroy();
}
private void refresh() {
// refresh
}
private void update() {
// update
}
private class BroadcastListenerRefresh extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Params.INTENT_REFRESH)) {
refresh();
}
}
}
private class BroadcastListenerUpdate extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Params.INTENT_UPDATE)) {
update();
}
}
}
}
और जो एक बेहतर प्रदर्शन है?
धन्यवाद, यह एक बेहतर समाधान है और यह काम करता है। –
@Waqas क्या आप ब्रॉडकास्ट रिसीवर का एक उदाहरण कार्यान्वयन प्रदान कर सकते हैं जो कई उद्देश्यों को प्राप्त करेगा? क्या यह सिर्फ एक बड़ा अगर-और-कथन है? – gonzobrains
@gonzobrains हाँ, कई उद्देश्यों के लिए आपको – waqaslam