Hôm bữa mình đã giới thiệu với anh em về cách Android chạy nền và đa nhiệm, hôm nay tới lượt iOS. Anh em đọc qua cho biết cái máy của mình chạy như thế nào, và vì sao thỉnh thoảng có app bị “load lại” khi anh em quay lại xài nó.
Trạng thái của app sẽ quyết định những gì app được phép làm. Những gì được phép làm mình sẽ nói sau, còn đây là các trạng thái của 1 app trên iOS:
Apple nói rằng một khi app đã vào trạng thái chạy background, app phải làm ít việc nhất có thể, hoàn thành nhanh nhất có thể những gì còn sót lại (ví dụ: đang cập nhật thông tin profile Facebook mà thoát ra, thì app Facebook phải nhanh chóng hoàn thành tác vụ này rồi ngưng), và giải pháp RAM nhiều nhất có thể. Và lý tưởng nhất, một khi app đã chạy nền thì app không nên làm thêm bất kì thứ gì nữa.
Khi lập trình viên làm app, Apple có một số cách để họ ra lệnh cho app làm một số việc ứng với từng trạng thái. Trong đó, Apple nói rất nhiều về việc app luôn phải chuẩn bị sẵn sàng để bị vô hiệu hóa và đưa vào trạng thái Inactive, vì người dùng có thể về home bất kì lúc nào. Cái mà Apple khuyên đó là:
Tất nhiên, iOS cũng hỗ trợ một số tác vụ chạy nền được phép vận hành trong thời gian dài, ví dụ như:
Có một điều đáng chú ý, đó là iOS sẽ giám sát việc chạy nền của các app, cộng với hành vi của người dùng, để quyết định xem liệu app đó có còn được phép chạy nền trong tương lai hay không và tần suất chạy nền là bao nhiêu. Ví dụ, nếu bạn dùng 1 app rất nhiều thì iOS sẽ ưu tiên cho app được phép chạy nền thường xuyên, còn nếu app ít xài thì iOS sẽ giãn số lần được phép chạy nền ra xa nhau hơn để tiết kiệm pin và tài nguyên hệ thống.
Trong iOS cũng có chức năng Background App Refresh, bạn có thể chỉnh lại những app nào được phép xài tính năng này. Background App Refresh cho phép một số app dù đã bị suspend nhưng vẫn có thể lấy nội dung mới từ Internet về. Ví dụ, app Notes cần phải thỉnh thoảng lấy ghi chú mới về để khi bạn mở app thì có sẵn các ghi chú mới đã đồng bộ sẵn sàng.
Cách iOS chạy đa nhiệm cũng tương tự như Android, tức là khi bạn mở một app mới thì nó sẽ “chồng” lên trên app cũ. Bạn có thể thấy được thứ tự những app này bằng cách truy cập vào màn hình đa nhiệm, cái này cơ bản chắc anh em cũng đã biết rồi ha.
Khi bạn vuốt app để về home, hoặc chuyển sang app khác, thì app cũ được đưa vào trạng thái suspended. Và sau một thời gian không dùng nữa, app sẽ bị kill hoàn toàn, đưa về trạng thái not running. Thế nên lâu lâu anh em quay lại các app mình từng dùng trước đây thì thấy nó bị “load lại”, tức là app của anh em đã bị kill rồi đấy và bị giải phóng hoàn toàn khỏi bộ nhớ RAM.
Còn nếu anh em quay lại app mình đang dùng sau chỉ vài phút, app không bị tắt hẳn nên mọi thứ vẫn còn ở đấy, anh em có thể tiếp tục dùng app như bình thường. Đó là do app chỉ mới bị suspend, vẫn còn lưu lại trong RAM.
Nếu một app mới chạy lên mà không đủ bộ nhớ, iOS sẽ bắt đầu kill dần các app đang bị suspended để đảm bảo app mới có thể hoạt động. Mình thấy rằng iOS làm điều này gay gắt hơn so với Android, còn chi tiết điều kiện, cách thức tắt app thì Apple không công bố rõ ràng, ngay cả Google cũng không nói nhiều về cách hoạt động của cơ chế tắt app này.
Apple có cung cấp một hàm tên là applicationWillTerminate để lập trình viên sửa soạn cho app trước khi nó bị giết hẳn (ví dụ như hoàn thành tác vụ đang làm, đóng các file đang truy cập…). App sẽ có khoảng 5 giây để hoàn thành mọi thứ trước khi bị “giết”. Nếu hàm trên không chạy xong trong thời gian này, hệ thống sẽ tự động kill app luôn mà không đợi nữa.
Nếu bạn tắt 1 app từ giao diện đa nhiệm, app đó sẽ được giải phóng hoàn toàn ra khỏi bộ nhớ, và quan trọng là nó không thể lấy nội dung từ Internet nữa cho tới lần sau bạn mở app ra. Ví dụ, nếu Spotify đang chơi nhạc, mà bạn kill nó hẳn luôn thì việc chơi nhạc cũng sẽ bị dừng ngay lập tức.
Còn nếu bạn để cho iOS tự động xử lý, app sẽ được đưa vào trạng thái suspended và khi đó nó vẫn có thể chạy một số tác vụ nền, chẳng hạn như chơi nhạc, gọi điện VoIP… Tất nhiên như đã nói ở trên, iOS sẽ giám sát việc này để xem liệu bạn có dùng app nhiều hay không, nếu có thì app mới được update thường xuyên, còn không thì thời gian giãn cách giữa các lần được chạy nền sẽ dài ra.
Theo tinhte.vn