हम दूरस्थ सेवाओं और हमारे यूआई के बीच राज्य परिवर्तनों को संवाद करने के लिए प्रसारण का उपयोग करते हैं। ऐसा करने से, हमने एक बहुत ही अजीब व्यवहार की खोज की: कभी-कभी (मुझे कोई संकेत नहीं मिल रहा है क्यों) इन प्रसारणों में लगभग 8 के दशक में देरी हो रही है।ब्रॉडकास्ट में देरी
हम उन्हें कैसे भेजने के लिए (बहुत बुनियादी, mState
सिर्फ एक enum है) (सेवा में रिमोट प्रक्रिया):
Intent intent = new Intent();
intent.setAction(ACTION_STATE_CHANGED);
intent.putExtra(EXTRA_STATE, mState);
Service.get().sendBroadcast(intent, null);
कैसे स्थिर रिसीवर पंजीकृत है (एप्लिकेशन):
<receiver android:name=".ServiceStateReceiver">
<intent-filter>
<action android:name="service.intent.action.STATE_CHANGE" />
</intent-filter>
</receiver>
रिसीवर क्लास (ऐप):
public class ServiceStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.v("State", "State via static received");
}
}
अब कभी-कभी देरी होती है (हमेशा एक ही राज्य के लिए)
राज्य enum:
public enum State {
DISCONNECTED,
BT_DISABLED,
BT_SCANNING,
BT_TIMEOUT,
BT_FAILURE,
BT_LOCATION_NEEDED,
CONNECTING,
ACTIVATION_FAILURE,
VIN_NEEDED,
CAR_MODEL_NEEDED,
MILEAGE_NEEDED,
READY,
IGNITION_OFF,
IGNITION_ON;
@Override
public String toString() {
return name();
}
}
अब अजीब हिस्सा आता है: मैं एक गतिशील रिसीवर रजिस्टर अगर हम हमेशा तुरंत वहाँ सभी प्रसारण प्राप्त। स्थिर व्यक्ति में अभी भी बड़ी देरी है। अगर मैं sendOrderedBroadcast
दोनों के माध्यम से प्रसारण भेजता हूं (स्थिर & गतिशील) इस देरी में है।
गतिशील रिसीवर:
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("State", "State via dynamic received");
}
}, new IntentFilter(State.ACTION_STATE_CHANGED));
क्या मैं अब तक की कोशिश की:
- मुख्य थ्रेड से/एक कार्यकर्ता धागा (कुछ भी नहीं बदला) प्रसारण भेजें
- अनुमति विशेषता के साथ खेला (कुछ भी नहीं बदला)
- एक पंक्ति में कई बार प्रसारण भेजता है (कुछ भी नहीं बदल रहा है, बस कई देरी वाले प्रसारण प्राप्त कर रहा है)
इसके अलावा: लॉगकट से कोई आउटपुट जो संबंधित प्रतीत होता है। विभिन्न उपकरणों (OnePlus 3 7.1.1, जेड 3 6.0.1, S7 एज 7.1.1) पर की कोशिश की, सभी एक ही व्यवहार
मुझे लगता है कि यह संबंधित हो सकता है दिखाने: Android network state change detection takes time
वहाँ भी इसके लिए एंड्रॉयड समस्या ट्रैकर में एक मुद्दा है: https://issuetracker.google.com/issues/62298626 – noongiya95