Acara utama tahun ini di dunia pengembang iOS dan MacOS, WWDC, selalu menyenangkan semua orang yang terlibat dalam industri dengan merilis versi baru dari sistem operasi, kerangka kerja, perangkat keras - secara umum, semua yang sebenarnya perlu dikerjakan.
Tahun ini tidak menjadi pengecualian dan subjek diskusi aktif adalah versi baru iOS, SwiftUI, dan OS iPadOS untuk Anda-sendiri-mengerti-apa-perangkat.
Namun, ada topik yang kurang dibahas, tetapi tidak kalah menarik dari ini - misalnya, hal yang bermanfaat seperti pelaksanaan latar belakang aplikasi disentuh.
Secara singkat tentang topik tersebut
Bagi mereka yang tidak mengerti apa itu eksekusi Latar Belakang, mari kita jelaskan: eksekusi di latar belakang berarti aplikasi melakukan beberapa pekerjaan dalam keadaan ketika tidak secara fisik berjalan di layar ponsel cerdas pengguna (mis., Itu tidak ada di latar depan) .

Gambar ini jelas menunjukkan dalam kondisi apa aplikasi dapat tetap dan bagaimana untuk berpindah dari satu ke yang lain.
Selain itu, pengembang Apple dalam sesi ini fokus pada konsumsi sumber daya (Saya harap cukup jelas bahwa ketika bekerja di latar belakang, aplikasi terus mengkonsumsi energi). Tapi sekarang saatnya untuk langsung ke laporan.
Apa yang terjadi di WWDC
Sebenarnya, para pembicara mulai dengan hal yang sama seperti yang saya lakukan - secara singkat berbicara tentang bekerja di latar belakang dan menjelaskan tugas-tugas yang akan dilakukan di sana.

Kami bergerak lebih dekat ke pembangunan. Ada 3 pertimbangan utama untuk Apple dalam hal kinerja latar belakang:
- kekuatan
- kinerja
- kerahasiaan
Semuanya cukup sederhana - jika tugas aplikasi berjalan di latar belakang, eksekusi ini dapat terjadi saat aplikasi lain berjalan di latar depan. Dengan demikian, ada batasan sumber daya yang ditempatkan pada Anda untuk memastikan bahwa sumber daya tidak dikonsumsi secara berlebihan. Jika batas ini terlampaui, aplikasi Anda mungkin diberhentikan secara paksa oleh Apple, yang akan memperlambat waktu startup lebih lanjut. Mengenai privasi, perusahaan sangat menyarankan agar pengembang menggunakan semua fitur API mereka untuk memberi tahu pengguna tentang data apa yang digunakan aplikasi dalam pekerjaannya (bahkan di latar belakang).
Ngomong-ngomong, daftar API ini cukup mengesankan - mereka tidak melakukan tinjauan terpisah, tetapi saya menyarankan Anda untuk memperhatikannya.
Ya, dan pada sesi itu sendiri, pengembang Apple menunjukkan ikhtisar singkat tentang kemungkinan menggunakan contoh aplikasi messenger (layak menonton video dari WWDC).
BackgroundTasks
Hampir setengah dari laporan tahun ini dikhususkan untuk kerangka kerja ini.
2 jenis tugas yang diberikan kebaruan ini:
- App Segarkan Tugas
- Tugas Pemrosesan Latar Belakang
App Segarkan Tugas
BG App Refresh Task adalah jenis khusus tugas latar belakang yang dapat kita gunakan untuk memperbarui data aplikasi. Satu hal yang membuat jenis tugas ini sangat istimewa adalah perilaku pengguna. iOS mempelajari seberapa sering dan kapan pengguna meluncurkan aplikasi Anda, dan mencoba meluncurkan BGAppRefreshTask pada saat pengguna tidak mungkin menggunakan aplikasi tersebut.

Ya, itu tidak akan bekerja lebih dari 30 detik - fitur ini sangat tidak menyenangkan, yang tersisa dari versi OS sebelumnya.
Pertimbangkan contoh kode dari Internet.
import UIKit import BackgroundTasks @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { BGTaskScheduler.shared.register( forTaskWithIdentifier: "pl.snowdog.example.refresh", using: DispatchQueue.global() ) { task in self.handleAppRefresh(task) } return true } private func handleAppRefresh(_ task: BGTask) { let queue = OperationQueue() queue.maxConcurrentOperationCount = 1 let appRefreshOperation = AppRefreshOperation() queue.addOperation(appRefreshOperation) task.expirationHandler = { queue.cancelAllOperations() } let lastOperation = queue.operations.last lastOperation?.completionBlock = { task.setTaskCompleted(success: !(lastOperation?.isCancelled ?? false)) } scheduleAppRefresh() } }
Ada beberapa poin yang perlu Anda hentikan dan pertimbangkan dengan lebih baik:
- Instal pengendali kedaluwarsa pada objek tugas (expirationHandler), karena sistem menyediakan waktu terbatas untuk menyelesaikan pekerjaan, dan jika terlampaui, Anda harus menghapus sumber daya.
- Pastikan bahwa metode setTaskCompleted telah dipanggil segera setelah operasi selesai.
- BGTaskScheduler adalah kelas utama yang digunakan untuk menjadwalkan pekerjaan latar belakang.
Tugas Pemrosesan Latar Belakang
Jenis lain dari peretasan latar belakang adalah Tugas Pemrosesan BG. Anda dapat menggunakannya untuk melatih model ML pada perangkat atau melakukan pembersihan dalam database. Apple berjanji bahwa sistem ini dapat mengalokasikan hingga beberapa menit waktu untuk jenis tugas ini, yang merupakan inovasi yang sangat penting untuk pekerjaan berat yang tidak masuk ke dalam 30 detik yang menyedihkan.
Sekali lagi sebuah contoh:
import UIKit import BackgroundTasks @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { BGTaskScheduler.shared.register( forTaskWithIdentifier: "pl.snowdog.example.train", using: DispatchQueue.global() ) { task in self.handleMLTrain(task) } return true } private func scheduleMLTrain() { do { let request = BGProcessingTaskRequest(identifier: "pl.snowdog.example.train") request.requiresExternalPower = true request.requiresNetworkConnectivity = true try BGTaskScheduler.shared.submit(request) } catch { print(error) } } }
Poin-poin penting:
- requiesExternalPower adalah nilai Boolean yang menunjukkan apakah perangkat yang terhubung ke sumber daya diperlukan untuk tugas pemrosesan.
- MembutuhkanNetworkConnectivity - Nilai Boolean yang menunjukkan apakah koneksi jaringan diperlukan untuk tugas pemrosesan.
Debugging
Di sini juga bukan tanpa fasilitas. Penundaan antara waktu eksekusi yang dijadwalkan dari tugas latar belakang dan saat ketika sistem memulai aplikasi untuk menyelesaikannya bisa beberapa jam. Saat mengembangkan aplikasi, Anda dapat menggunakan dua fungsi pribadi untuk meluncurkan tugas dan memaksa penyelesaian awal sesuai dengan waktu yang dipilih. Fitur debugging hanya berfungsi pada perangkat.
- Peluncuran Tugas:
e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"TASK_IDENTIFIER"]
- Pengakhiran awal tugas secara paksa:
e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateExpirationForTaskWithIdentifier:@"TASK_IDENTIFIER"]
Kesimpulannya
BackgroundTasks adalah cara terbaik untuk merencanakan kerja keras Anda dengan pengalaman pengguna terbaik menggunakan lingkungan Anda. Karena sejak versi ke-13 sistem, banyak metode untuk bekerja di latar belakang menjadi usang, kerangka kerja akan tetap sangat populer dalam aplikasi. Mengingat kemungkinan di atas, ini cukup logis.
Saya juga merekomendasikan menonton
video dari WWDC , contoh-contoh yang dijelaskan di sana sangat menarik.