Google უარყოფს Android-ის AsyncTask API-ს Android 11-ში

ასინქრონული ლოგიკის Android API, AsyncTask, გამოდის. AOSP-ის ვალდებულების თანახმად, API მოძველდება Android 11-ში.

უკვე წლებია, Android-ის AsyncTask არის ძირითადი ინსტრუმენტი დამწყები და გამოცდილი დეველოპერებისთვის. თუ თქვენ ოდესმე გამოგიძიათ Google-ში რაიმე სახის ასინქრონული ლოგიკის სახელმძღვანელო Android-ში, დიდი შანსია, რომ პირველი რამდენიმე შედეგი ვარაუდობს AsyncTask-ის გამოყენებას. არც ეს არის შემთხვევითი არჩევანი. AsyncTask თავდაპირველად შეიქმნა ფონის ოპერაციებსა და აპლიკაციის UI-ს შორის ურთიერთქმედების გასამარტივებლად. გარკვეული პერიოდის განმავლობაში ამას კარგად აკეთებდა. AsyncTask ნამდვილად ეხმარება ასინქრონული ამოცანების გამარტივებას. თუმცა ეს არ ნიშნავს რომ ის იდეალურია.

ერთი რამ, რაც ბევრმა აპლიკაციამ უნდა გააკეთოს, არის ინფორმაციის მოპოვება დისტანციური სერვერიდან. ვინაიდან ქსელის მოთხოვნებს შეიძლება გარკვეული დრო დასჭირდეს, ჩვეულებრივ მნიშვნელოვანია მათი ასინქრონულად შესრულება, რათა არ გამოიწვიოს აპლიკაციის გაყინვა. ოპერაციის დასრულების შემდეგ, UI შეიძლება განახლდეს. თუმცა, შესაძლებელია, რომ ქსელის მოთხოვნის დასრულებამდე, ინტერფეისის შესაბამისი ნაწილი აღარ არსებობდეს, რამაც შეიძლება გამოიწვიოს ავარია ან სხვა შეცდომები. მიუხედავად იმისა, რომ AsyncTask ამარტივებს მთლიან პროცესს, ის არ პატივს სცემს Android-ის აპლიკაციის სასიცოცხლო ციკლს. ეს ნიშნავს, რომ არ არის ჩაშენებული დაცვა AsyncTask-ისგან, რომელიც დასრულდება ინტერფეისის შეცვლის შემდეგ. რა თქმა უნდა, შესაძლებელია ხელით დაამატოთ ჩეკები და სხვა დაცვა, მაგრამ ეს ამატებს ბევრ განმეორებით კოდს (AKA boilerplate). მსგავსი პრობლემების გამო, AsyncTask ერთგვარი გზაზე დაეცა. Google-ს ასევე არ შეუტანია ბევრი ცვლილება მის მუშაობაში.

ისე, როგორც ჩანს, Google-ის აზრია, რომ AsyncTask სცილდება შენახვას. ბოლოდროინდელი AOSP commit-ში, AsyncTask მოძველდა და მოიხსენია მსგავსი მიზეზები, რაზეც ახლა ვისაუბრე. მიუხედავად იმისა, რომ ეს ნამდვილად არ არის დიდი ცვლილება საბოლოო მომხმარებლებისთვის, ეს შეიძლება ბევრს ნიშნავდეს დეველოპერებისთვის. თუ თქვენ ინახავთ ძველ კოდების ბაზას ან ახლახან იწყებთ ასინქრონულ ამოცანებს Android-ში, სავარაუდოდ მოგიწევთ შეცვალოთ რამდენიმე კოდი. თუმცა, საბედნიეროდ, Google-მა დეველოპერები მტვერში არ დატოვა.

AsyncTask-ის შეზღუდვების გამო დროთა განმავლობაში გაჩნდა ალტერნატივები, როგორიცაა RxJava და Kotlin-ის ახალი (ish) Coroutines ბიბლიოთეკა. ამ ალტერნატივებს აქვთ ბევრად მეტი მოქნილობა და მახასიათებლები, ვიდრე AsyncTask, ამიტომ მათ საკმაოდ დიდი პოპულარობა მოიპოვეს. AsyncTask-ის გაუქმების შესახებ შეტყობინებაში Google გირჩევთ გამოიყენოთ Java-ს Concurrency Framework ან Kotlin Coroutines.

პირადად მე უკვე დავიწყე კოტლინის კორუტინის გამოყენება და უკან არ მიმიხედავს. რა თქმა უნდა, ვიცი, რომ ბევრმა ადამიანმა თავისი კოდი მჭიდროდ გააერთიანა AsyncTask-ის ირგვლივ, ასე რომ, ეს, ალბათ, მცირედი უხერხულობაა მათთვის. კარგია, რომ არჩევანის უამრავი ალტერნატივა არსებობს. შეიძლება შემაშფოთებელი იყოს თქვენი კოდის შეცვლა, მაგრამ ამჯერად მაინც შესაძლებელია.

თუ გსურთ მეტი დეტალი, შეგიძლიათ შეამოწმოთ ვალდებულება აქ. ვალდებულება დღეს ადრე გაერთიანდა და თუ Android-ის ტექნიკური გამოშვება არ იქნება მზად, ამ ცვლილებას მომავალ წელს Android 11-ში აისახება.