2015-09-20 8 views
5

मैं वॉचकिट एक्सटेंशन से एक आईओएस ऐप में संदेश भेजने के लिए sendMessage विधि का उपयोग कर रहा हूं। उत्तर प्राप्त करने के लिए औसत पर लगभग 230 एमएस लगता है। यह समय इस बात पर निर्भर नहीं है कि आईओएस ऐप स्क्रीन पर है या पृष्ठभूमि में चल रहा है या नहीं। 230 मिमी लगभग पृथ्वी के परिधि और पीछे यात्रा करने के लिए प्रकाश के लिए लेता है। लेकिन जब मैं इसका परीक्षण कर रहा हूं तो फ़ोन मेरी घड़ी से 30 सेमी बैठा है।आईओएस में वॉचकिट एक्सटेंशन से संदेश क्यों भेजना और उत्तर वापस लेना इतना धीमा है?

प्रश्न:

  1. ऐसा क्यों है इतनी धीमी गति से है?
  2. क्या यह इतना धीमा होना चाहिए?
  3. क्या इसे तेजी से बनाने का कोई तरीका है?

एक अवलोकन: वॉचोस 1 संचार में मेरे पिछले प्रयोगों के मुताबिक थोड़ा तेज था, एक राउंडट्रिप लगभग 50 एमएस लेता था। https://github.com/evgenyneu/WatchKitParentAppBenchmark

आईओएस: 9.0, watchOS:

WatchKit विस्तार से संदेश भेजें

let session = WCSession.defaultSession() 

session.sendMessage(["message from watch":""], replyHandler: { reply in 
    // Getting reply from iOS app here 
}, errorHandler: nil) 

func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) { 

    replyHandler(["reply from iOS":""]) 
} 

डेमो एप्लिकेशन iOS ऐप्लिकेशन से संदेश प्राप्त करें 2.0

उत्तर

2

AFAIK, जब आप अन्य डिवाइस पर कोई संदेश भेजते हैं, तो संदेश स्थानीय निर्देशिका पर फ़ाइल करने के लिए संग्रहीत किया जाएगा जिसे WatchDirectory कहा जाता है।

यह निर्देशिका अन्य डिवाइस जैसे ब्लूटूथ के माध्यम से अन्य iCloud ड्राइव ऐप या ड्रॉप बॉक्स के रूप में सिंक्रनाइज़ की जाएगी। क्योंकि इस दृष्टिकोण को आईओएस और वॉचोज़ ऐप के लिए चल रहे ऐप की आवश्यकता नहीं है, जबकि स्थानांतरण समाप्त हो जाएगा।

जब निर्देशिका पर नई फ़ाइलें पहुंचीं, तो आईओएस (या वॉचओएस) सामग्री को संसाधित करने के लिए WCSession से संबंधित API को आमंत्रित करेगा। यदि आवश्यक हो, तो आईओएस (या watchOS) प्रेषण संदेश से पहले पृष्ठभूमि में गंतव्य ऐप जागृत करेगा।

watchOS1 के साथ, घड़ी एक्सटेंशन आईओएस पर चलता है, केवल दूरस्थ यूआई ऐप्पलवॉच पर चलता है। तो प्रक्रियाओं के बीच संचार, संवाद करने के लिए इसे और अधिक सरल प्रक्रिया की आवश्यकता होती है।

sendMessage अन्य संचार API की तुलना में अधिक महंगा तरीका है जो WCSession द्वारा प्रदान किए जाते हैं। आईओएस इसका उपयोग तब तक नहीं कर सकता जब तक कि घड़ी ऐप अग्रभूमि तक नहीं चलता है, और वॉचओएस से sendMessage का उपयोग करके आईफोन को जागृत करना होगा और पृष्ठभूमि में आईओएस ऐप लॉन्च करना होगा। प्रेषित संदेशों को संभालने के बाद, आईओएस गंतव्य ऐप को मार सकता है जो स्मृति को वापस पाने के लिए पृष्ठभूमि पर चल रहा है।

तो, आईएमओ का कोई कारण नहीं है कि यह तेज़ होना चाहिए।

0

मेरे मामले में डिवाइस पर तुरंत मेरी यूआई ताज़ा के लिए:

func session(session: WCSession, didReceiveMessage message: [String : AnyObject]) { 
    //receive message from watch 
    dispatch_async(dispatch_get_main_queue()) { 
     self.textLabel.text = message["optionSent"]! as? String 
    } 

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