2012-11-23 21 views
6

मैं एंड्रॉइड में एक आईओएस ऐप लिख रहा हूं। यह एक ऐसा काम है जिसे मैंने एंड्रॉइड सीखने और सीखने के लिए सेट किया है। एंड्रॉइड में मैं विभिन्न एसिंक संदेश विकल्पों के बारे में सीख रहा हूं। जो मैंने पाया है अब तक हैं:एन -1 एसिंक कॉलबैक कार्यान्वयन

Callbacks 
Broadcasts 
Message Handlers 

मैं यह तय करने की कोशिश कर रहा हूं कि मेरे उद्देश्यों के अनुरूप कौन सा दृष्टिकोण सर्वोत्तम है। मेरे आईओएस एप्लिकेशन में मेरे पास 10 स्क्रीन ऑब्जेक्ट्स और 1 समन्वयक ऑब्जेक्ट है। यह मेरा एन -1 है।

जिस तरह से मेरा आईओएस वर्तमान में काम करता है वह है मेरी स्क्रीन ऑब्जेक्ट मेरे समन्वयक में एक प्रतिनिधि विधि के रूप में स्वयं को एक कार्य विधि कहती है। समन्वयक कुछ एसिंक काम करता है और जब काम पूरा हो जाता है तो प्रतिनिधि पर विभिन्न विधियों को कॉल करता है: कारण के साथ पूरा/असफल आदि

एकाधिक स्क्रीन ऑब्जेक्ट्स एक ही समय में काम करने का अनुरोध कर सकते हैं।

अब तक मेरी भावना है कि एंड्रॉइड में कॉलबैक/संदेश हैंडलर दृष्टिकोण 1-1 रिश्ते की तरह है।

मैं स्थानीय प्रसारण प्रबंधक का उपयोग करने की दिशा में झुका रहा हूं। यह प्रतिनिधि तरीकों की तुलना में एनएसएनोटिफिकेशन की तरह प्रतीत होता है लेकिन एन -1 रिश्तों के लिए लगता है।

प्रसारण प्रबंधक एन -1 एसिंक काम प्राप्त करने का सबसे अच्छा तरीका है?

कॉलबैक और हैंडलर के 1-1 रिश्ते के बारे में भी मेरी धारणा सही है?

उत्तर

2

आप वास्तव में एनएसएनोटिफिकेशन जैसे प्रसारणों का उपयोग कर सकते हैं, लेकिन आम तौर पर मैं अपने ऐप के विभिन्न हिस्सों के बीच संदेश में प्रसारण का उपयोग करता हूं, उदाहरण के लिए किसी विशिष्ट भाग के बजाय सेवा और गतिविधि के बीच संवाद करने के लिए।

मुझे नहीं लगता कि आप एंड्रॉइड पर आईओएस में जो भी करते हैं, वही नहीं कर सकते हैं। आपके पास आईओएस में एक प्रोटोकॉल होगा जो परिभाषित करता है कि कॉल करने के लिए कौन से फ़ंक्शंस हैं, और आप इंटरफेस का उपयोग करके जावा/एंड्रॉइड में भी ऐसा कर सकते हैं।

आईओएस में आप की तरह कुछ होगा: SpecialStuff अपने प्रोटोकॉल या इंटरफ़ेस होने के साथ

doStuffWithObject(SpecialStuff object) {} 

:

doStuffWithObject:(NSObject<SpecialStuff> *)object {} 

जबकि जावा में आप के लिए होगा। क्योंकि आपके पास एंड्रॉइड में performSelectorOnBackground नहीं है, यह थोड़ा और काम है। या तो टाइमर का उपयोग करें, शायद हैंडलर के साथ संयोजन में एक अलग थ्रेड या ASyncTask का उपयोग करें जो कि आपको सबसे अच्छा सेवा प्रदान करता है और असीमित कार्य कितना बड़ा है।

ASyncTask निश्चित रूप से देखने लायक है।


आप निश्चित रूप से भी Observer और Observable का उपयोग कर सकता।

एक हैंडलर और टाइमर के साथ एक साधारण उदाहरण जो हर सेकेंड के नए श्रोताओं को सूचित करता है (ध्यान दें कि हैंडलर इस मामले में मुख्य धागे पर बनाया गया है, जैसे कि आप performSelectorOnMainThread का उपयोग करने के समान संदेश भेज सकते हैं आईओएस):

class SomeExample { 

    private final ArrayList<TimeListener> timeListeners; 

    private final Handler handler = new Handler(); 
    private final TimeUpdateRunnable timeUpdateRunnable = new TimeUpdateRunnable(); 

    public SomeExampleView { 

     timeListeners = new ArrayList<TimeListener>(); 

     updateTimer = new Timer("General Update Timer"); 

     TimeUpdateTask timeUpdateTask = new TimeUpdateTask(); 
     updateTimer.scheduleAtFixedRate(timeUpdateTask, (60 * 1000) - (System.currentTimeMillis() % (60 * 1000)), 60 * 1000); 
    } 

    public void addTimeListener(TimeListener timeListener) { 
     timeListeners.add(timeListener); 
    } 

    public boolean removeTimeListener(TimeListener timeListener) { 
     return timeListeners.remove(timeListener); 
    } 


    class TimeUpdateTask extends TimerTask { 
     public void run() { 
      handler.post(timeUpdateRunnable); 
     } 
    } 

    private class TimeUpdateRunnable implements Runnable { 
     public void run() { 
      for (TimeListener timeListener : timeListeners) { 
       timeListener.onTimeUpdate(System.currentTimeMillis()); 
      } 
     } 
    } 
} 

और मेरे श्रोता इंटरफ़ेस जो Observer

public interface TimeListener { 
    void onTimeUpdate(long time); 
} 
+0

इस उत्तर के समान है मेरे लिए संदेह का एक बहुत निकाल देता है। आपके परिश्रम के लिए धन्यवाद – dubbeat

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