ए Job डिजाइन द्वारा एक बहुत ही सरल जीवन चक्र है। इसकी "पूर्ण" स्थिति अंतिम है, जो एंड्रॉइड Activity
की "नष्ट" स्थिति के समान ही है। तो, एक माता-पिता Job
गाइड में समझाए गए अनुसार Activity
से संबद्ध होना सर्वोत्तम है। अगर आपको गतिविधि नष्ट हो जाती है तो आपको केवल माता-पिता की नौकरी रद्द करनी चाहिए। क्योंकि एक नष्ट गतिविधि का पुन: उपयोग नहीं किया जा सकता है, आप कभी भी अपनी नौकरी का पुन: उपयोग करने की आवश्यकता में भाग नहीं लेंगे।
प्रत्येक क्लिक पर काम शुरू करने के लिए अनुशंसित दृष्टिकोण अभिनेताओं का उपयोग करके है, क्योंकि वे आपको अनौपचारिक सहमति से बचने में मदद करते हैं। गाइड दिखाता है कि प्रत्येक क्लिक पर उन्हें कैसे शुरू किया जाए, लेकिन यह दिखाता नहीं है कि वर्तमान में चल रही कार्रवाई को कैसे रद्द किया जाए।
fun View.onClick(action: suspend() -> Unit) {
var currentJob: Job? = null // to keep a reference to the currently running job
// launch one actor as a parent of the context job
// actor prevent concurrent execution of multiple actions
val eventActor = actor<Unit>(contextJob + UI, capacity = Channel.CONFLATED) {
for (event in channel) {
currentJob = Job(contextJob) // create a new job for this action
try {
// run an action within its own job
withContext(currentJob!!) { action() }
} catch (e: CancellationException) {
// we expect it to be cancelled and just need to continue
}
}
}
// install a listener to send message to this actor
setOnClickListener {
currentJob?.cancel() // cancel whatever job we were doing now (if any)
eventActor.offer(Unit) // signal to start next action when possible
}
}
एक अभिनेता हमेशा सक्रिय रहती है अपनी मूल काम जब तक (एक गतिविधि से जुड़ा हुआ:
आप बाकी सब से अलग कोड रद्द करने योग्य का एक ब्लॉक बनाने के लिए withContext
के साथ एक संयोजन में Job
के एक ताजा उदाहरण की आवश्यकता होगी) रद्द कर दिया है। एक अभिनेता क्लिक के लिए इंतजार कर रहा है और प्रत्येक क्लिक पर action
शुरू करता है। हालांकि, action
के प्रत्येक आमंत्रण को में withContext
ब्लॉक का उपयोग करके लपेटा गया है, ताकि इसे अपने मूल नौकरी से अलग से रद्द किया जा सके।
ध्यान दें, यह कोड उन कार्यों के लिए काम करता है जो रद्द नहीं किए जा सकते हैं या रद्द करने के लिए कुछ समय लेते हैं। रद्द होने पर अपने संसाधनों को साफ़ करने की आवश्यकता हो सकती है, और, क्योंकि यह कोड एक अभिनेता का उपयोग करता है, यह सुनिश्चित करता है कि पिछली कार्रवाई की सफाई अगले शुरू होने से पहले समाप्त हो जाए।
स्रोत
2017-03-16 10:25:04