मुझे पता है कि उत्तर पहले ही स्वीकार कर लिया गया था, लेकिन मैंने सोचा कि मैं इस बारे में लिखूंगा कि अगर कोई इस पर चलता है तो समस्या हल हो जाती है और उत्सुकता है कि कोड कैसा दिख सकता है।
यदि आप ओटो का उपयोग कर रहे हैं, तो मैंने मैनिफेस्ट से android:process
को हटाकर ऊपर दिए गए स्वीकृत उत्तर का पालन किया। मैंने यहां दिए गए उत्तर का भी पालन किया How to send event from Service to Activity with Otto event bus?, जहां मुख्य थ्रेड पर नहीं चलने के लिए एक बस अपवाद फेंक दिया गया था। इसलिए मैंने दो उत्तरों को जोड़ दिया और उपरोक्त लिंक के अनुसार मुख्य धागे पर निष्पादित करने के लिए एक बस बनाई।
public class MainThreadBus extends Bus {
private final Handler mHandler = new Handler(Looper.getMainLooper());
@Override
public void post(final Object event) {
if (Looper.myLooper() == Looper.getMainLooper()) {
super.post(event);
} else {
mHandler.post(new Runnable() {
@Override
public void run() {
MainThreadBus.super.post(event);
}
});
}
}
}
मैं तो एक बस सिंगलटन कि आवेदन में कहीं भी इस्तेमाल कर सकते हैं बनाया:
public final class BusProvider {
private static final MainThreadBus BUS = new MainThreadBus();
public static MainThreadBus getInstance() {
return BUS;
}
private BusProvider() {
}
}
मेरी SyncAdapter में मैं निम्नलिखित कोड घटना, BusProvider.getInstance().post(event);
शुरू करने और अपने आवेदन टुकड़ा में मैं बस करने के लिए सदस्यता के लिए इस्तेमाल किया घटना।
यह एप्लिकेशन पूरी तरह से ठीक काम करता था जब एप्लिकेशन अग्रभूमि में था और जब एप्लिकेशन को स्वाइप करने के बाद पृष्ठभूमि में सिंक एडाप्टर शुरू किया गया था।
लेकिन अगर ऐप बंद हो जाता है तो मैं 'सिंक' कार्यक्षमता खो दूंगा (क्योंकि' सिंक' प्रक्रिया आम साझा की जाती है और पृष्ठभूमि में काम कर रही है)? "विशेषता एंड्रॉइड: निर्यात किया गया =" सत्य "सेवा तक पहुंचने के लिए आपके ऐप (सिस्टम समेत) के अलावा अन्य प्रक्रियाओं की अनुमति देता है। विशेषता एंड्रॉइड: प्रक्रिया =": सिंक "सिस्टम को सिंक नाम की वैश्विक साझा प्रक्रिया में सेवा चलाने के लिए कहती है । " - http://developer.android.com/training/sync-adapters/creating-sync-adapter.html#DeclareSyncAdapterManifest – svenkapudija
@svenkapudija: आपको 'android: process =": सिंक "' का उपयोग करने के लिए ' SyncAdapter'।"क्योंकि: सिंक प्रक्रिया आम साझा की जाती है और पृष्ठभूमि में काम कर रही है" - यह आपके कई घटकों के बीच आम होगा जो 'एंड्रॉइड: प्रक्रिया = ": सिंक" 'का उपयोग करते हैं। [यह डिवाइस पर किसी और चीज़ के साथ आम नहीं होगा] (http://developer.android.com/guide/topics/manifest/service-element.html#proc)। – CommonsWare
यह भी सोचा कि सिंक एडाप्टर पृष्ठभूमि में चलाने के लिए सिंक आवश्यक था। यह पता नहीं है कि यह मामला नहीं है, और इसे हटाकर आप पृष्ठभूमि में सिंक कर सकते हैं जबकि अभी भी यूआई को पता है (ओटो या ब्रॉडकास्ट के माध्यम से) कि कुछ हुआ – Entreco