2012-08-07 9 views

उत्तर

4

यह पता लगाने के लिए कोई एपीआई नहीं है कि कितने ग्राहक सेवा के लिए बाध्य हैं।
यदि आप अपनी सेवा लागू कर रहे हैं, तो अपने सेवा कनेक्शन में आप बाध्य ग्राहकों की संख्या का ट्रैक रखने के लिए संदर्भ संख्या में वृद्धि/कमी कर सकते हैं।

MyService extends Service { 

    ... 

    private static int sNumBoundClients = 0; 

    public static void clientConnected() { 
     sNumBoundClients++; 
    } 

    public static void clientDisconnected() { 
     sNumBoundClients--; 
    } 

    public static int getNumberOfBoundClients() { 
     return sNumBoundClients; 
    } 
} 

MyServiceConnection extends ServiceConnection { 

    // Called when the connection with the service is established 
    public void onServiceConnected(ComponentName className, IBinder service) { 
     ... 
     MyService.clientConnected(); 
     Log.d("MyServiceConnection", "Client Connected! clients = " + MyService.getNumberOfBoundClients()); 
    } 

    // Called when the connection with the service disconnects 
    public void onServiceDisconnected(ComponentName className) { 
     ... 
     MyService.clientDisconnected(); 
     Log.d("MyServiceConnection", "Client disconnected! clients = " + MyService.getNumberOfBoundClients()); 
    } 
} 
+0

+1 हालांकि, यह केवल तभी काम करता है जब आपके पास स्थानीय क्लाइंट आपके क्लाइंट के समान प्रक्रिया में चल रहा हो। यदि आपकी सेवा रिमोट प्रक्रिया में चल रही है तो यह काम नहीं करता है और यह तब भी काम नहीं करता है जब आप अपने ग्राहकों के लिए अपनी सेवा प्रदान करते हैं जो आपके आवेदन का हिस्सा नहीं हैं। –

+0

डेविड सही है, मेरा उदाहरण केवल स्थानीय सेवा के लिए काम करेगा। –

+0

मुझे अभी तक रिमोट सेवा को लागू करने की आवश्यकता नहीं है, इसलिए मुझे यकीन नहीं है कि रिमोट कैलबैक सूची का उपयोग मेरे उदाहरण को दूरस्थ सेवा के साथ कैसे करने के लिए किया जाएगा। –

0

एक आसान, मानक यह करने के लिए तरीका हो प्रतीत नहीं होता:

के बाद विचार प्रदर्शित करने के लिए कुछ psudo कोड है। मैं 2 तरीकों से सोच सकता हूं। यहां आसान तरीका है:

disconnect() जैसी अपनी सेवा के एपीआई में एक कॉल जोड़ें। unbindService() पर कॉल करने से पहले ग्राहक को disconnect() पर कॉल करना चाहिए। बाध्य ग्राहकों की संख्या का ट्रैक रखने के लिए private int clientCount जैसी सेवा में सदस्य चर बनाएँ। onBind() में गिनती बढ़ाने और disconnect() में इसे कम करके बाध्य ग्राहकों की संख्या को ट्रैक करें।

जटिल तरीके से ग्राहकों को आपकी सेवा से कॉलबैक इंटरफ़ेस को लागू करने और RemoteCallbackList का उपयोग करके यह निर्धारित करने के लिए कि कितने ग्राहक वास्तव में बाध्य हैं।

0

आप onBind() (वृद्धि गिनती), onUnbind() अधिभावी द्वारा जुड़ा ग्राहकों का ट्रैक रख सकते (कमी गिनती और true वापसी) और onRebind() (वृद्धि गिनती)।

+0

[इस] के अनुसार (https://groups.google.com/forum/#!msg/android-developers/2IegSgtGxyE/iXP3lBCH5SsJ), 'ऑनबिंड()' को पहले अनुरोध के लिए एक बार और एक कैश 'IBinder' कहा जाता है सेवा को परेशान किए बिना बाद के अनुरोधों पर सिस्टम द्वारा वापस कर दिया जाता है। इस मुद्दे के बारे में दस्तावेज गलत है। – Daniel

संबंधित मुद्दे