Multitasking pada iOS

iPhone 4S Multitask Bar
iPhone 4S Multitask Bar by planetofgori

Salah satu topik yang seringkali mengundang perdebatan di kalangan pengguna iDevice, dan pengguna smartphone pada umumnya adalah soal multitasking.

Contoh yang sering keluhan pengguna iDevice yang sering jadi topik diskusi adalah mengapa iDevice menjadi lambat kalau menjalankan beberapa aplikasi secara bersamaan (multitasking). Dan seringkali, si pengguna iDevice mendapat “tips” atau arahan untuk menutup aplikasi-aplikasi yang ada pada multitasking bar untuk melegakan memori. Tips ini datang baik dari sesama pengguna iDevice, maupun pengguna platform lainnya.

Kadang-kadang iPhone saya lambat dan patah-patah saat menjalankan game-game HD, kalau ada yang mengalami hal yang sama dengan saya, tenang, tinggal dobel-klik tombol Home sampai multitasking bar muncul lalu tap dan tahan sampai ikon aplikasinya bergoyang dan hapus daftar aplikasi yang muncul.

iOS sudah diprogram oleh Apple untuk mengerjakan tugasnya sendiri. Anda tidak membeli iPhone seharga Rp. 7 jutaan untuk membantu iOS mengerjakan apa yang seharusnya bisa ia kerjakan sendiri. Ada alasannya mengapa iPhone disebut smartphone. Apple tidak ingin memberikan tanggung jawab atas pengelolaan memori kepada penggunanya, dan saya sendiri senang Apple membuat keputusan itu.

Multitasking

Mulai sejak iOS 4, iOS dilengkapi dengan fitur multitasking yang memungkinkan sebuah aplikasi tetap berjalan di background bahkan ketika pengguna telah berpindah ke aplikasi lainnya.

Multitasking bar

Apa itu multitasking bar?

iOS multitasking bar
iOS multitasking bar

Ketika Anda dobel-klik pada tombol Home dan muncul daftar aplikasi pada bagian bawah layar, sebenarnya apa itu?

Double-clicking the Home button displays a list of recently used apps. These apps are not necessarily actively in use, open, or taking up system resources. They will instantly launch when you return to them. Certain tasks or services can continue to run in the background.

Apple sebenarnya tidak menyebutnya sebagai “multitasking bar”, tetapi “recently used apps”. Namun, sudah ada semacam kesepakatan tidak tertulis di antara para pengguna iDevice bahwa area yang menampilkan daftar aplikasi tersebut disebut “multitasking bar”.

Multitasking bar menampilkan daftar aplikasi yang baru saja digunakan secara berurutan, bukan daftar aplikasi yang sedang berjalan.

Meskipun aplikasi yang sedang berjalan di background juga masuk pada multitasking bar, tetapi tidak semua aplikasi yang muncul adalah aplikasi yang sedang berjalan. Multitasking bar lebih mirip dengan history pada web browser ketimbang “Task Manager” pada Windows.

App States

Karena resource pada iDevice terbatas, setiap aplikasi harus memiliki perilaku yang berbeda untuk setiap kondisi. iOS harus membatasi apa yang bisa dilakukan sebuah aplikasi di background untuk meningkatkan daya tahan baterai dan meningkatkan pengalaman pengguna. Intinya, iOS punya aturan sendiri untuk aplikasi-aplikasi yang berjalan di background agar tidak membuat baterai boros dan mengganggu aplikasi yang sedang berjalan (foreground).

Kondisi-kondisi yang berlaku untuk aplikasi iOS
State changes in an iOS app

Ada lima kondisi yang diberikan sistem untuk aplikasi:

  1. Not running (Tidak berjalan)
  2. Artinya aplikasi tidak atau belum dijalankan, atau telah dihentikan sepenuhnya oleh sistem.

  3. Inactive (Tidak aktif)
  4. Aplikasi sedang berjalan tetapi sedang tidak menerima input dari pengguna. Misalnya, sebuah aplikasi sedang berjalan tetapi tidak aktif karena layar telah dikunci oleh pengguna.

  5. Active (Aktif)
  6. Aplikasi sedang berjalan dan aktif menerima input dari pengguna. Ini adalah kondisi normal dari aplikasi yang “sedang digunakan”.

  7. Background (Berjalan di belakang)
  8. Aplikasi tidak lagi berjalan/muncul di depan (foreground) tetapi dipindahkan ke belakang, tetapi aplikasi masih tetap mengeksekusi kode-kode, atau masih menggunakan CPU.

  9. Suspended
  10. Aplikasi berada berstatus Background dan tidak lagi mengeksekusi kode-kode. Aplikasi yang sedang berada pada kondisi ini tidak lagi mengeksekusi kode (0% CPU) tetapi tetap tersimpan di memori. Dan ketika sistem kekurangan memori, sistem akan menghentikan aplikasi yang ter-suspend (0% CPU) untuk membuat ruang lebih untuk aplikasi yang aktif atau foreground.

Kondisi Active dan Inactive tidak menarik untuk didiskusikan. Yang membuat banyak orang bingung adalah apa yang terjadi ketika aplikasi Active menjadi Background kemudian Suspended lalu Not Running.

Moving from the foreground to the background
Proses peralihan dari foreground ke background

Ketika Anda menekan tombol Home, menekan tombol sleep/power, atau ketika sistem menjalankan aplikasi lain secara otomaris, aplikasi yang berstatus Active atau foreground (yang sedang berjalan) akan beralih menjadi Inactive dan akan menerima pesan dari sistem yang menyuruhnya bersiap untuk masuk ke Background. Aplikasi tidak harus dihentikan sepenuhnya, tetapi tidak berjalan juga. Dan pada kebanyakan kasus aplikasi akan berpindah dari kondisi Background ke Suspended hanya dalam hitungan detik.

Aplikasi yang berada pada kondisi Suspended akan tetap tersimpan di memori. Ini dimaksudkan agar aplikasi bisa dengan cepat dibuka kembali ketika dibutuhkan.

Normalnya, Anda akan berpikir kalau sebuah aplikasi masih tersimpan di memori, Anda harus menghapusnya untuk membebaskan memori. Sebenarnya tidak perlu karena iOS akan melakukannya untuk Anda. Kalau Anda menutup aplikasi secara manual dari multitasking bar, itu artinya Anda telah mengambil alih pekerjaan si iOS.

Jika ada aplikasi berat atau game-game HD yang Anda jalankan dan membutuhkan memori lebih, maka sistem akan menghapus aplikasi-aplikasi yang berstatus Suspended, yaitu dengan mengalihkannya ke kondisi Not Running. Secara otomatis.

Anda mungkin akan bingung membedakan kondisi setiap aplikasi pada multitasking bar. Tapi intinya, multitasking bar akan selalu menampilkan aplikasi yang baru saja digunakan, entah itu statusnya Background, Suspended ataupun Not Running.

Background Tasks

Ketika sebuah aplikasi dialihkan ke Background, biasanya dalam beberapa detik saja aplikasi tersebut akan masuk ke kondisi Suspended. Tetapi ada juga aplikasi yang bisa meminta ijin untuk perpanjangan waktu pada Background dengan menyatakan dirinya sebagai “background tasks”, atau tugas yang berjalan pada latar belakang.

Sebagai contoh adalah aplikasi-aplikasi podcast yang mendownload konten audio dari internet. iOS mengijinkan aplikasi semacam ini untuk mendeklarasikan proses download menjadi sebuah “background task”. Jadi, meskipun aplikasinya telah berstatus Background, tetapi karena proses downloadnya dinyatakan sebagai background task maka aplikasinya tidak akan dialihkan ke Suspended karena sudah mendapat ijin dari sistem. Tetapi, meskipun beberapa aplikasi bisa meminta ijin khusus seperti ini untuk berlama-lama di background, iOS hanya memberikan batas waktu 10 menit untuk setiap aplikasi, sebelum dipaksa masuk ke kondisi Suspended.

Sekali lagi, Anda tidak perlu membantu iOS melakukan pekerjaannya sendiri.

Long-Running Background Tasks

Semua aplikasi mendapat waktu beberapa detik untuk tinggal di background, setelah itu akan disuspend. Beberapa aplikasi bisa meminta ijin perpanjangan waktu 10 menit. Tapi, ada sejumlah aplikasi yang bisa berjalan di background tanpa batasan waktu, dan iOS mengijinkan ini dengan syarat khusus.

Ada lima jenis aplikasi yang diijinkan untuk berjalan di Backgound tanpa batas waktu:

  1. Aplikasi yang dapat memainkan konten audio pada latar belakang
  2. Contoh:

    • Aplikasi pemutar musik atau podcast
    • Aplikasi pemutar audio atau video yang mendukung AirPlay
    • Aplikasi-aplikasi VoIP

    Ketika aplikasi jenis ini memainkan konten audio atau video, aplikasinya akan tetap berjalan di background dan akan dicegah masuk Suspended oleh sistem. Tapi jika aplikasnya berhenti memainkan konten audio atau video, maka sistem akan mensuspendnya.

  3. Aplikasi yang melacak lokasi pengguna
  4. Contoh:

    • Apikasi berbasis GPS atau Maps
    • Aplikasi sosial yang memiliki fitur pelacakan lokasi

    Untuk aplikasi yang memiliki layanan jenis ini, pembaruan lokasi akan dibuat hanya jika lokasi dari pengguna berubah secara signifikan. Ideal untuk aplikasi sosial atau aplikasi yang menyediakan informasi berbasis lokasi kepada pengguna.

    Jika pembaruan muncul ketika aplikasi berada pada kondisi Suspended, sistem akan membangunkan aplikasi tersebut dengan mengalihkannya ke Background untuk mengangani pembaruan lokasi. Dan jika sebuah aplikasi dihentikan, sistem tetap akan menjalankannya kembali secara otomatis ketika pembaruan lokasi tersedia.

  5. Aplikasi yang mendukung panggilan suara berbasis internet atau VoIP
  6. Contoh: Skype untuk iOS.

    Dikarenakan aplikasi Voice over Internet Protocol (VoIP) memungkinkan pengguna untuk membuat panggilan menggunakan koneksi internet, maka aplikasi sejenis ini membutuhkan koneksi internet yang stabil.

    Aplikasi VoIP bisa saja disuspend oleh sistem, tetapi sistem akan menyediakan layanan untuk memonitoring panggilan masuk. Dan jika terdeteksi ada panggilan masuk, sistem akan membangunkan aplikasi VoIP tersebut dan mengalihkannya menjadi Active.

  7. Aplikasi Newsstand yang dapat mendownload konten
  8. Contoh: Newsstand dan aplikasi-aplikasi sejenis yang dapat mendownload majalah.

    Aplikasi Newsstand dan semacamnya yang dapat mendownload majalah terbaru bisa mendeklarasikan proses download sebagai background tasks, seperti halnya aplikasi podcast. Ketika server majalah mengirimkan notifikasi bahwa majalah terbitan terbaru telah dirilis, sistem akan mengecek apakah aplikasi Newsstand berjalan atau tidak, dan menjalankannya dan memberitahukan kepada pengguna bahwa ada terbitan terbaru.

  9. Aplikasi yang terhubung dan berkomunikasi dengan aksesoris tambahan
  10. Aplikasi yang berkomunikasi dengan aksesoris tambahan (baik melalui kabel atau bluetooth) bisa saja dijalankan atau dibangunkan dari kondisi Suspended jika aksesoris yang terhubung menyediakan pembaruan.

Sebelumnya saya sudah menyebutkan bahwa pengguna iDevice tidak perlu repot-repot mengurusi masalah multitasking di iOS. Tetapi ada pengecualian untuk itu, misalnya salah satu aplikasi yang berjalan di Background bertingkah aneh dan tidak dapat dihentikan dengan cara normal.

Developer diberikan kebebasan untuk merancang aplikasinya sendiri dengan ketentuan sebagai berikut:

  • Merespon dengan baik untuk setiap kondisi yang terjadi. Tidak dapat menangani transisi atau peralihan kondisi dapat menyebabkan kehilangan data atau memberikan pengalaman penggunaan yang buruk kepada pengguna.
  • Ketika dialihkan ke background, aplikasi harus mengubah perilakunya dengan sesuai.

Meski begitu, ada saja faktor yang bisa membuat konsumsi resource menjadi meningkat dan membuat sebuah atau beberapa aplikasi menjadi tidak bekerja dengan semestinya. Ingat, ada lebih dari 800.000 aplikasi di App Store yang dibuat oleh developer yang berbeda-beda. Kemungkinan adanya beberapa dan mungkin banyak aplikasi yang tidak diprogram dengan benar atau tidak mengikuti ketentuan yang telah diberikan Apple sangatlah besar.

iOS Multitasking Explained

Mungkin Anda perlu melihat video berikut ini untuk lebih mengetahui bagaimana multitasking bekerja pada iOS.

Yang didemonstrasikan pada video tersebut adalah:

  1. Bagaimana aplikasi North Korea dialihkan dari Active ke Background lalu ke Suspended, kemudian ditutup dari multitasking bar.
  2. Bagaimana aplikasi Instacast HD (aplikasi podcast) tetap bisa menyelesaikan proses download di background meskipun tidak mengkonsumsi CPU sama sekali.
  3. TomTom (aplikasi GPS) akan berjalan tanpa batas waktu di background meski CPU yang digunakan 0%.
  4. Batman Arkham City Lockdown dan Real Racing 2 HD bersaing untuk mendapatkan memori sebanyak mungkin. Percobaan pertama Real Racing 2 HD menutup sendiri ketika Batman Arkham City Lockdown dijalankan, dan pada percobaan kedua Batman Arkham City Lockdown yang menutup ketika Real Racing 2 HD dijalankan.
  5. Batman Arkham City Lockdown memaksa aplikasi-aplikasi lain yang tersuspend membebaskan memorinya.

Kesimpulan

Inti dari tulisan ini adalah:

  1. Jika seseorang memberitahukan bahwa aplikasi yang ada di multitasking bar adalah aplikasi yang sedang berjalan, dan menghabiskan memori, itu tidak benar. Aplikasi yang ada pada multitasking bar adalah daftar aplikasi yang baru saja dijalankan.
  2. Ketika Anda menekan tombol Home, aplikasi yang aktif akan dialihkan dari Active ke Background dan dengan cepat akan dialihkan ke Suspended, kondisi di mana aplikasi tidak lagi aktif menggunakan CPU dan energi.
  3. Sebuah aplikasi bisa mendapat tambahan waktu 10 menit sebelum dipaksa masuk ke kondisi Suspended oleh sistem.
  4. Ketika sistem kekurangan memori, sistem akan secara otomatis mengalihkan aplikasi berstatus Suspended menjadi Not Running untuk membebaskan memorinya dan mengalokasikannya ke aplikasi lain yang membutuhkan.
  5. Ada lima jenis aplikasi (audio, GPS, VoIP, Newsstand dan aplikasi aksesoris) dan aplikasi bawaan seperti Mail yang bisa berjalan pada Background tanpa batasan waktu.

Special case

Oke, oke. Kita tidak perlu menutup aplikasi secara manual dari multitasking bar, dan kebiasaan seperti ini harus dihilangkan. Tapi, mengapa terkadang ada aplikasi yang berjalan lambat ketika ada aplikasi lain yang berjalan di background, dan kembali lancar jika aplikasi pada multitasking bar dihapus secara manual?

Kadang-kadang ada saja aplikasi yang bertingkah aneh di background dan tidak bisa ditutup dengan normal, atau ada aplikasi yang berjalan di background dan mengkonsumsi memori berlebih. Anda tetap bisa menutup aplikasi secara manual dari multitasking bar sebagai troubleshooting atau pemecahan masalah, tetapi tidak seharusnya dilakukan sehari-hari, setiap beberapa jam sekali, dan seterusnya.

Baca juga:

[Background App Refresh di iOS]

Sumber & Referensi:
[Fraser Speirs]
[Apple Knowledge Base]
[iOS Developer Library]