2012-03-09 4 views
5

एक ऐप में ऐसे हिस्सों हो सकते हैं जो अलग-अलग धागे पर चलते हैं और समाप्त होने पर कुछ ऑब्जेक्ट पर वापस कॉल करते हैं। एक सामान्य पैटर्न इस तरह दिख सकता है:Android पर एसिंक्रोनस कॉलबैक को संभालने के लिए अच्छी रणनीतियां क्या हैं?

1) एक दृश्य या टुकड़ा कुछ मॉडल को कॉल करता है। कॉल कुछ दृश्य या टुकड़ा

model.doSomething(context, new Runnable() { 
    public void run() { /* run on the main thread when model finishes */ } 
}); 

2) एक मॉडल एक थ्रेड का उपयोग करता है या AsyncTask कि कुछ करता है से निकलती है और फिर बुला धागे पर कॉलबैक कॉल - एक हैंडलर

void doSomething(Context context, Runnable callback) { 
    Handler handler = new Handler(); 
    // ... 
    // When finished (this is really done on some separate thread), 
    handler.post(callback); 
} 

3) का उपयोग करते हुए कॉलबैक कॉलिंग व्यू या फ्रैगमेंट के साथ कुछ नियंत्रण तर्क

कॉलबैक एक ऐसे दृश्य की स्थिति को छू सकता है जो किसी विंडो से जुड़ा हुआ नहीं है, जिससे ऐप में अस्थिरता हो सकती है।

इस स्थिति को संभालने के लिए कुछ अच्छी रणनीतियां क्या हैं?

उत्तर

1

ऐसा लगता है जैसे आप अपने मॉडल और अपने दृश्य के बीच संचार को अधिक संगत तरीके से संभालना चाहते हैं।

http://developer.android.com/reference/android/app/Service.html

यदि आप कर रहे हैं एप्लिकेशन केवल एक ही प्रक्रिया में चल रहा है, मैं के बाद से ज्यादा उपयोग में अधिक आसान IntentService में रखने का सुझाव देते हैं: एक अच्छा तरीका इन अलग करने के लिए एक सेवा का इस्तेमाल है।

http://code.google.com/p/iosched/

यह बहुत बड़ा लगता है, लेकिन वास्तुकला अच्छी तरह से डेटा चिंताओं (अलग करने या तो स्थानीय या दूरदराज के संसाधनों से के संबंध में सोचा जाता है:

इस का एक महान उदाहरण गूगल आईओ 2011 IOSched अनुप्रयोग है)।

आपके विचार में कॉलबैक बाध्य करने की बजाय अपनी सेवा में यह चलाने का दूसरा लाभ यह है कि सेवा गतिविधि के जीवन चक्र से बाहर रहती है, इसलिए आपको चिंता करने की ज़रूरत नहीं है कि जब भी आपकी गतिविधि आपकी कॉलबैक के साथ होती है नष्ट कर दिया/रोक दिया है। कई बार कॉलबैक का उपयोग करते समय कॉलबैक का उपयोग किया जाएगा और गतिविधि अभी भी जीवित नहीं हो सकती है।

+0

धन्यवाद स्टीफन, मैं 2011 आईओएसएड ऐप पर एक नज़र डालेगा। एक सेवा ओवरकिल लगती है क्योंकि ऐसा लगता है कि संदेशों को सुरक्षित रूप से किसी दृश्य या टुकड़े पर पोस्ट करने का कोई तरीका होना चाहिए। मैं पोस्ट (...) का उपयोग करने के साथ प्रयोग कर रहा हूं, लेकिन मुझे अभी भी यह समझ में आ रहा है कि जब विंडो दिखाई नहीं दे रही है, और सामान्य रूप से एंड्रॉइड पैटर्न के मामले में यह कैसे काम करता है। –

+0

यह ओवरकिल जैसा लगता है लेकिन जब भी आप इस तरह के कॉलबैक पैटर्न का उपयोग कर रहे हैं, तो आप आमतौर पर कुछ प्रकार के लंबे एसिंक कार्य को कर रहे हैं। चूंकि आमंत्रण और समापन के बीच एक बड़ा समय अंतर हो सकता है, इसलिए आपको चिंता करना शुरू करना होगा कि समय आपके राज्य को कैसे प्रभावित करेगा। गतिविधि जीवन चक्र में काम करते समय यह अधिक परेशानी हो जाती है क्योंकि आपकी गतिविधि की वर्तमान स्थिति में कोई गारंटी नहीं है। –

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