YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Vietnamese subtitles

← 08-03 App Lifecycle and Services

Get Embed Code
10 Languages

Showing Revision 1 created 08/01/2015 by TTmagic Nguyen.

  1. Quay lại bài 4 ta đã học được rằng Android runtime
  2. sẽ kill các app mà không hiện activites nào
  3. để giải phóng tài nguyên cần thiết bởi các app đang hiển thị.
  4. Nhưng nếu app của bạn có các tasks mà nó cần tiếp tục
  5. khi activity không hiển thị thì sao?
  6. Ví du như downloading files, uploading photos, hay playing music.
  7. Well, sẽ có một application component để làm điều đó.
  8. Services.
  9. Ta đã giới thiệu activities, content providers,
  10. broadcast receivers và intents.
  11. Services là mảnh ghép cuối cùng của bảng xếp hình Android app component.
  12. Bạn start services cũng như khi bạn làm với activities,
  13. bằng việc truyền trong một intent trong lệnh startService.
  14. Và bạn có thể stop services bằng cách tương tự.
  15. Bằng việc gọi stopService và truyền vào
  16. tên của service bạn muốn dừng.
  17. Không giống như activities, services không có giao diện người dùng
  18. và nó chạy với mức ưu tiên cao hơn các background activities.
  19. Điều này nghĩa là một app với một service đang chạy,
  20. ít có khả năng bị killed bởi the runtime
  21. để giải phóng tài nguyên cho các activities đang hiển thị.
  22. Trên thực tế, mặc định, hệ thống sẽ cố restart services
  23. mà bị chấm dứt trước khi nó bị dừng từ trong app.
  24. Điều này được thể hiện trong lifecycle đơn giản này.
  25. So với activities, services được thiết kế
  26. để chạy các tác vụ lâu hơn mà không nên bị gián đoạn.
  27. Thường thì, bạn chỉ cần override onStartCommand,
  28. là nơi bạn bắt đầu tác vụ chạy nền
  29. mà bạn muốn chạy.
  30. Nhưng chú ý là không có handlers nào để theo dõi các thay đổi trong trạng thái,
  31. để phản ánh app đang di chuyển tới background.
  32. Điều này vì bản thân các dịch vụ đang chạy,
  33. gửi một tín hiệu tới framework,
  34. mà app đang chứa được cân nhắc là ưu tiên cao hơn
  35. các apps khác trong background mà không có các running services.
  36. Trong vài trường hợp, service của bạn có thể thực hiện một task
  37. mà trong khi không có UI, không thể bị gián đoạn
  38. mà không can thiệp vào trải nghiệm người dùng.
  39. Ví dụ, chơi nhạc hay điều hướng xe hơi.
  40. Trong các trường hợp này bạn có thể chỉ ra rằng services của bạn
  41. nên chạy dưới nên
  42. bằng việc gọi startForeground.
  43. Bạn sẽ chú ý rằng lệnh này có chứa một notification.
  44. nó sẽ được hiển thị và không thể bị bỏ qua
  45. cho đến khi service dừng hoặc bạn gọi stopForeground.
  46. Bạn sẽ học thêm về notifications sau đây, với Dan.
  47. Nhưng giờ, chú ý rằng một foreground service chạy với mức ưu tiên
  48. tương tự với một foreground activity.
  49. Làm nó gần như không thể bị kill trong lúc chạy
  50. để giải phóng bộ nhớ.
  51. Giờ bạn có thể nghĩ về bản thân, tôi có thể thoát khỏi rất nhiều rắc rối
  52. với lifecycles, chỉ việc tạo một service chạy lâu
  53. hoặc thậm chí là foreground services.
  54. Well, tôi lớn lên theo bờ biển ở Australia,
  55. nên tôi đã học được rằng bơi ngược dòng
  56. là rất mệt mỏi và vô ích.
  57. Trong trường hợp này, nghĩa là càng làm cho hệ thống
  58. khó quản lý tài nguyên hơn,
  59. cuối cùng dẫn tới một trải nghiệm người dùng tồi tệ.
  60. Hãy bơi theo dòng.
  61. Dùng các foreground services chỉ khi nào và để làm gì
  62. thực sự cần thiết.
  63. Và dừng tất cả service nhanh nhất có thể.
  64. Cũng quan trọng để chú ý rằng cũng như activities và recieivers,
  65. services chạy trên Main thread.
  66. Nên bạn sẽ không phải dùng một background thread asynctask
  67. để chạy một tác vụ tốn thời gian bạn muốn làm trong service.
  68. Để làm cuộc sống đơn giản hơn, bạn có thể dùng intent servicec class.
  69. Nó có các bài luyện tập tốt nhất, để sử dụng intent
  70. để được thực hiện trong một service.
  71. Nó tạo một hàng đợi của các intents sắp tới, được truyền khi startService được gọi.
  72. chúng nó sau đó được xử lý tuần tự trên background thread,
  73. trong onHandleIntent handler trong intent service của bạn.
  74. Khi hàng đợi rỗng, service sẽ tự chấm dứt
  75. cho đến khi một intent mới được nhận, và process lại bắn đầu
  76. Services là một công cụ mạnh mẽ và thật quan trọng để hiểu
  77. bạn có thể sử dụng nó như nào,
  78. nhưng trong thực tế có một nền tảng thay thế
  79. để thực hiện service của bạn.
  80. Dù nó là một intent service để chạy các background task
  81. hay sync adapter mà bạn sẽ được học sau sau trong bài này,
  82. tuyệt vời để thực hiện đồng bộ dữ liệu nền.