मैं इस तरह किसी अन्य सेवा से सेवा बाध्य करने के लिए कोशिश कर रहा हूँ:जब बिल्कुल सेवा के लिए कनेक्ट की गई सेवा को कॉल किया जाएगा?
public class ServiceA extends Service {
private ServiceB mDataService;
private boolean mIsBound;
@Override
public void onCreate(){
super.onCreate();
doBindService();
/* ... */
}
@Override
public void onStart(final Intent intent, final int startId){
/*...*/
}
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
mDataService = ((ServiceB.LocalBinder)service).getService();
}
public void onServiceDisconnected(ComponentName className) {
mDataService = null;
}
};
void doBindService() {
bindService(new Intent(ServiceA.this, ServiceB.class), mConnection, Context.BIND_AUTO_CREATE);
mIsBound = true;
}
void doUnbindService() {
if (mIsBound) {
unbindService(mConnection);
mIsBound = false;
}
}
}
यह एक सरल टुकड़ा है कि मैं Goolge के नमूनों से ले लिया :) कोड ठीक काम करता है और mDataService ServiceB उदाहरण के लिए एक संदर्भ रखती है, है, लेकिन एक बात है जिसे मैं समझ नहीं पाया: onServiceConnected
कॉलबैक को कॉल के बाद onStart
पर कॉल किया जाता है। जैसा कि मैंने एंड्रॉइड के दस्तावेज़ों पर देखा, the callback is running on the main thread - लेकिन क्या मैं इस पर भरोसा कर सकता हूं कि यह मेरे मामले में हमेशा इस क्रम में होगा? ऑनक्रेट -> ऑनस्टार्ट -> ऑन-सर्विस कनेक्ट?
यूप। और निम्नलिखित को बड़े लाल अक्षरों के साथ कहीं भी बताया जाना चाहिए: ** सेवा कनेक्शन की प्रतीक्षा करते समय गतिविधि/सेवा स्टार्टर थ्रेड को अवरुद्ध न करें! ** (अच्छी तरह से, इसे कभी भी अवरुद्ध न करें, लेकिन सेवा के मामले में बाध्यकारी होने पर यह बदतर है) – snuk182
-1, देव गाइड गलत है। 'bindService()' एक मान वापस करता है। Http://developer.android.com/reference/android/content/Context.html से, "यदि आपने सेवा के लिए सफलतापूर्वक बाध्य किया है, तो सत्य वापस कर दिया गया है; अगर कनेक्शन नहीं बनाया जाता है तो झूठा वापस कर दिया जाता है ताकि आपको प्राप्त नहीं होगा सेवा वस्तु। " –