fbpx
close

AsyncTask Android là gì? 4 bước triển khai AsyncTask trong Android

Tác giả: TinoHost Ngày cập nhật: 02/11/2021 Chuyên mục: Webmasters
Disclosure
Website Wiki.tino.org được cung cấp bởi Tino Group. Truy cập và sử dụng website đồng nghĩa với việc bạn đồng ý với các điều khoản và điều kiện trong chính sách bảo mật - điều khoản sử dụng nội dung. Wiki.tino.org có thể thay đổi điều khoản sử dụng bất cứ lúc nào. Việc bạn tiếp tục sử dụng Wiki.tino.org sau khi thay đổi có nghĩa là bạn chấp nhận những thay đổi đó.
Why Trust Us
Các bài viết với hàm lượng tri thức cao tại wiki.tino.org được tạo ra bởi các chuyên viên Marketing vững chuyên môn và được kiểm duyệt nghiêm túc theo chính sách biên tập bởi đội ngũ biên tập viên dày dặn kinh nghiệm. Mọi nỗ lực của chúng tôi đều hướng đến mong muốn mang đến cho cộng đồng nguồn thông tin chất lượng, chính xác, khách quan, đồng thời tuân thủ các tiêu chuẩn cao nhất trong báo cáo và xuất bản.

Khi sử dụng một ứng dụng trên Android, đôi khi bạn sẽ gặp phải tình trạng “Application Not Responding”. Phần lớn người dùng nghĩ rằng đây là tình trạng app bị treo, đứng máy hay lag. Tuy nhiên, vẫn còn một nguyên nhân khác dẫn đến tình trạng này. Đó là do UI Thread. Đối với nguyên nhân này, ta sẽ có giải pháp xử lý là AsyncTask. Vậy, AsyncTask Android là gì?

Tìm hiểu về AsyncTask Android

Hiện tượng “Application Not Responding” là gì?

Trong hệ điều hành Android, mỗi ứng dụng sẽ được hệ điều hành cung cấp cho một process và trên đó có một thread mặc định của ứng dụng. Android xử lý tất cả các tác vụ, tiến trình trên 1 thread duy nhất được gọi là Main UI thread. Main UI thread chỉ làm một việc trong sự kiện/task duy nhất trong tại một thời điểm.

Một task tốn nhiều thời gian trên Main UI thread sẽ dẫn đến tình trạng Android sẽ nhảy ra một thông báo có tên là: Application Not Responding (hay thường biết đến với cái tên ARN).

asynctask-android-la-gi

Thông thường, những tác vụ hao tốn nhiều tài nguyên như: giải nén file hoặc tải file từ Internet,… những tác vụ này cần phải thác khỏi Main UI thread. Nói cách khác, ta sẽ cần phải tạo ra xử lý đa nhiệm. Để thực hiện xử lý đa nhiệm ta có một số công cụ do Android cấp sẵn để dùng như:

  • Sử dụng Thread
  • Sử dụng Loader trong Android
  • Sử dụng IntentService
  • Hoặc dùng đến AsyncTask trong Android.

AsyncTask Android là gì?

Về lý thuyết, AsyncTask Android là một abstract Android class giúp Android trở nên “đa nhiệm” hơn khi xử lý main UI thread một cách hiệu quả. Bạn có thể sử dụng AsyncTask Android trong Android để thực hiện các tác vụ dài mà không làm ảnh hưởng đến main UI thread.

AsyncTask xuất hiện từ phiên bản API Level 3 trong Android, với mục đích đưa ra một tiêu chuẩn làm việc với main UI thread dễ dàng hơn.

asynctask-android-la-gi

AsyncTask được thiết kế như một class trợ giúp cho Thread và Handler, được sử dụng trong các hoạt động ngắn khoảng vài giây. Nếu bạn muốn tạo luồng dài hơi hơn, bạn nên sử dụng các class do java.util.concurrent cung cấp như: Executor, ThreadPoolExecutor hay FutureTask.

Trong bài viết sẽ giữ nguyên nhiều từ tiếng Anh như:

  • Class: lớp
  • Process: được sinh ra khi Android chạy và các ứng dụng trong Android đều được cấp 1 Process để thực thi.
  • Thread: là một thực thể trong Process và là đối tượng lên kế hoạch thực thi.
  • Handler: là một liên kết/ trao đổi được sinh ra trong quá trình các Thread trao đổi với nhau hoặc Thread sinh ra Handler.
  • Abstract: trừu tượng
  • Task: tác vụ
  • Event: sự kiện
  • Background: nền, trong bài sẽ ngầm hiểu là: chạy tác vụ dưới nền

Khi nào nên sử dụng AsyncTask Android

Thật sự, những thứ liên quan đến Abstract rất khó hiểu. Vì thế, Tino Group sẽ giải thích về AsyncTask Android là gì cùng trường hợp sử dụng AsyncTask trong Android nhé!

Ví dụ, bạn đang tải một file nhạc MP3 về thiết bị Android. Quá trình này diễn ra rất đơn giản trong mắt người dùng nhưng dưới nền, Android lại hoạt động rất phức tạp. Bạn có thể theo dõi sơ đồ sau để thấy quá trình tải 1 file MP3 là không hề đơn giản.

asynctask-android-la-gi

Điều này dẫn đến hệ lụy, khi chờ “hết thanh xuân” để máy chủ gửi file MP3 về, ứng dụng của bạn sẽ bị treo và hiện lên thông báo “Application Not Responding” vì lúc này main Thread vẫn đang chờ cho task tải MP3 hoàn tất.

Nếu điều này diễn ra thường xuyên, bản thân bạn có còn muốn tải nhạc về máy để nghe nữa hay không? Dĩ nhiên là “không” rồi đúng không nào?

Vì thế, Android cung cấp cho bạn một giải pháp chuyên dụng là class AsyncTask để tạo thêm một Thread mới và thực hiện task trên Thread đó giúp app không bị treo => người dùng không ảnh hưởng => người dùng hạnh phúc => bạn không “rate” 1 sao cho ứng dụng hoặc người dùng không “rate” 1 sao cho ứng dụng của bạn.

Một câu hỏi tiếp theo được đặt ra là: làm thế nào để triển khai AsyncTask trong Android?

Làm thế nào để triển khai AsyncTask trong Android?

4 bước triển khai AsyncTask trong Android

Khi AsyncTask thực thi, task sẽ trải qua 4 bước như sau:

  • Bước 1 onPreExecute()
  • Bước 2 doInBackground()
  • Bước 3 onProgressUpdate()
  • Bước 4 onPostExecute()

Chúng ta cùng nhau tìm hiểu chi tiết trong từng bước thông qua ví dụ tải file nhé! Trước tiên, bạn hãy tham khảo đoạn code mẫu dưới đây:

asynctask-android-la-gi

Bước 1: onPreExecute()

onPreExecute() sẽ được gọi trên UI thread khi task bắt đầu. Đây là bước cơ bản để bắt đầu quá trình chuẩn bị thực hiện một task. Ví dụ cụ thể nhất là sử dụng để tạo ra một thanh thông báo cho người dùng về % dữ liệu đã tải về.

Bước 2: doInBackground()

doInBackground() sẽ thực hiện nối tiếp dưới background với onPreExecute() ngay khi bước này hoàn tất. Vì doInBackground() hoạt động trên một Thread riêng với UI Thread. Do đó, bạn sẽ không thể và không được phép cập nhật giao diện tính toán quá trình ở đây.

Nếu bạn muốn thực hiện bạn sẽ cần phải sử dụng một hàm khác để hiển thị. Như trong ví dụ, hàm publishProgress(Progress…) sẽ là hàm được sử dụng để hiển thị % data đã tải về thiết bị.

Bước 3: onProgressUpdate()

onProgressUpdate() sẽ thực hiện nối tiếp theo publishProgress(Progress…) trên UI Thread. Thời gian thực hiện bước này là không xác định.

Phương thức này được sử dụng để hiển thị bất cứ hình dạng nào trong giao diện người dùng khi dưới nền vẫn đang thực hiện tính toán, ví dụ như bạn có thể tạo hiệu ứng cho thanh hiển thị % tải về hoặc hiển thị nhật ký tải về (giống như đoạn tải về trong IDM) bằng các văn bản.

asynctask-android-la-gi

Bước 4: onPostExecute()

onPostExecute() sẽ được gọi khi công việc tính toán của doInBackground() đã hoàn tất và kết thúc. Kết quả tính toán sẽ hiển thị dưới dạng một tham số và trả lên giao diện của người dùng.

Ngoài ra, bạn có thể sử dụng cancel(boolean) để tạm dừng tại một thời điểm bất kỳ khi AsyncTask đang thực hiện công việc, mà không cần phải chờ AsyncTask hoàn tất toàn bộ công việc.

Đến đây, Tino Group đã hoàn tất việc giải đáp AsyncTask Android là gì cũng như giải thích 4 bước triển khai AsyncTask trong Android bằng ví dụ trực quan và dễ hiểu nhất có thể. Nếu bạn vẫn chưa hiểu, chuyện này vẫn bình thường khi làm việc với các Abstract. Ngoài ra, bạn có thể tham khảo tài liệu chính thức của Google về AsyncTask Android tại đây.

Cuối cùng, Tino Group xin chúc bạn sẽ có những gặt hái thành công lớn trong tương lai với sự nghiệp lập trình Android bạn đang theo đuổi!

Bài viết có tham khảo từ nhiều nguồn: vntalking, Developer Android, open planning,…

Những câu hỏi thường gặp về AsyncTask Android

Vì sao một số code AsyncTask không hoạt động trên Android 11 trở lên?

Theo những công bố mới nhất và tài liệu xác thực từ chính Android, tính đến thời điểm hiện tại có 2 field bị chặn hoặc không chấp nhận sử dụng ở Android 11 (Android cấp 30) bao gồm:

  • SERIAL_EXECUTOR, được thêm từ Android cấp 11
  • THREAD_POOL_EXECUTOR, được thêm từ Android cấp 11

Android API Level là gì?

Android cấp x, hay còn được gọi là Android API Level, là một giá trị số nguyên định danh phiên bản framework API được cung cấp bởi phiên bản của nền tảng Android.

Nếu bạn muốn biết thêm về cấp Android hay Android API Level, tài liệu chính thức của Google về <uses-sdk> sẽ giải đáp rất nhiều thắc mắc của bạn.

Vì sao có nhiều Fields, Public methods lại không được các phiên bản Android mới hỗ trợ?

Có thể nói việc các phiên bản Android mới không hỗ trợ không phải vì không được hỗ trợ. Nguyên nhân chính của việc các Fields, Public methods lại không được các phiên bản Android mới hỗ trợ là bị Android cắt bớt nhằm gia tăng trải nghiệm của người dùng.

Ví dụ: SERIAL_EXECUTOR và THREAD_POOL_EXECUTOR sẽ tạo ra một nhóm luồng ưu tiên duy nhất khiến các tác vụ khác bị ảnh hưởng => không tối ưu tác vụ, khiến người dùng phải chờ đợi làm giảm trải nghiệm của người dùng.

Chia sẻ một chút thông tin về bạn. Những thông tin này có thể được công khai.

Xem thêm bài viết

Bài viết liên quan

Mục lục

Xem nhiều

giá tốt, chất lượng cao mình rất hài lòng
chất lượng dịch vụ tốt lắm...á
chất lượng dịch vụ rất tốt.
giá tốt, chất lượng cao mình rất hài lòng
Dịch vụ chăm sóc khách hàng tốt
Dùng rất oke nha mọi người
Dịch vụ chăm sóc khách hàng tốt, mình rất hài lòng về dịch vụ của TINOHOST
Đã mua rất nhiều tên miền tại Tinohost. Chất lượng tốt
dịch vụ và chăm sóc khách hàng rất tốt , mình rất thích tinohost , mình đã sử dụng nhiều dịch vụ của tinohost rồi
tuyệt vời chăm sóc khách hàng quá tốt
dịch vụ và chăm sóc khách hàng rất tốt , mình rất thích tinohost , mình đã sử dụng nhiều dịch vụ của tinohost rồi
Quá tốt - Quá xuất sắc và tuyệt
Hỗ trợ nhiệt tình. dịch vụ chất lượng
Đội ngũ support rất nhiệt tình.
Sử dụng dịch vụ của bạn Tinohost 2 3 năm nay chưa khi nào phải thất vọng.
host dùng chất lượng, miền giá rẻ
dịch vụ hỗ trợ rất nhanh, tốc độ hosting tốt
Hộ trợ tốt, nhanh. Tuyệt vời 🥰
tuyệt vời, dịch vụ cực tốt và hỗ trợ siêu nhanh
Làm việc nhanh chóng, giá thành hợp lí.
Hosting rẻ và nhanh thích hợp cho học sinh sinh viên như mình
dịch vu tốt ! Sẽ sử dụng thưởng xuyên !
Mỗi lần cần gì, nhắn Tino là được hỗ trợ ngay. Nên một đứa không biết gì về web như mình cũng tạo được blog. Cơ bản mình chỉ lo viết, mọi thứ có anh IT của Tino lo hết.
Nhìn chung thì Tino xứng đáng là một trong những nhà cung cấp host giá rẻ #1 tại VN. Bên này support khá nhanh và nhiệt tình nên quá trình sử dụng diễn ra tương đối trơn tru.
Chất lượng quá ok so với mức giá. Các SME có thể tham khảo để dựng web nhé.
uy tín chất lượng chuẩn cho 5 sao
Dịch vụ nhanh chóng thanh toán tiện lợi
Dịch vụ nhanh chóng, giá cả hợp lý
Chất lượng phục vụ ok, support khá nhanh chóng và chất lượng gói lớn tốt, gói nhỏ cần tốt hơn.
Dịch vụ tốt, giá cả hợp lý👍
Rất hay, rất tốt, rất hữu ích
Hỗ trợ rất nhanh và nhiệt tình
Chất lượng phục vụ ok, support khá nhanh chóng và chất lượng gói lớn tốt, gói nhỏ cần tốt hơn.
dịch vụ tốt, thanh toán nhanh chống
Hài lòng dịch vụ của tinohost
Sau khi sử dụng dịch vụ của TinoHost. Mình thấy website load nhanh hơn hẳn so với sử dụng ở nhà cung cấp cũ. Giá cả do mình đc mua với giá sale 99% của TinoHost nên rất là rẻ. Gói mình mua là gòi Hosting Bussiness 20GB. Thông số cấu hình cao nên web load khá mượt
Chúc TinoHost phát triển!
domain rẻ, có nhiều gói hữu ích thích hợp cho sinh viên
Hài lòng về dịch vụ và tư vấn
Dịch vụ tốt . Support nhiệt tình
Chất lượng OK
Nhanh chóng
dịch vụ rất tốt
Nhân viên support nhanh, hỗ trợ nhiệt tình, giao dịch tự động nên khá tiện
Đã dùng nhiều dịch vụ tại Tinohost, chất lượng tốt, rất hài lòng ...😀
Sự dụng rất hài lòng với các dịch vụ của tinohost
Dịch vụ tốt, uy tín chất lượng
Tino dịch vụ quá tuyệt vời
Giá rẻ, dịch vụ tốt, hỗ trợ nhanh chóng
dịch vụ rất tốt rất tuyệt vời
Giá hợp lý cho người mới dùng
Mình thấy Tinohost có giao diện thân thiện, dễ đăng ký sử dụng cho người mới tập tành làm web như mình. Hosting hỗ trợ có nhiều lựa chọn về dung lượng và giá cả! Thanh toán qua momo thuận tiện. Recommended!
wed quá ok làm việc nhanh ngọn
Dịch vụ tốt. Khá hài lòng vì support nhiệt tình
Dịch vụ quá tuyệt vời danh cho các bạn
Xin cảm ơn đội ngủ kỹ thuật. Các bạn rất chuyên nghiệp và thân thiện. Tôi sẽ giới thiệu các bạn cho bạn bè của mình.
Dịch vụ hỗ trợ tốt, ổn định, thanh toán dễ dàng.
Mình từng dùng VPS bên Vietel IDC, hay gặp lỗi vặt và bảo trì liên tục. Nhưng Tino thì rất ok
dùng tốt, nhanh, dễ sử dụng
Giao diện đẹp mắt, dễ sử dụng
Đề nghị xem lại vấn đề phục vụ khách hàng (livchat)!
Good. Tốc độ cao. Tùy chỉnh nhiều trên shared hosting.
hosting ngon, giá luôn rẻ, tôi làm code nhưng rất thích sài host tino
Tino cung cấp host rất chuyên nghiệp. Đội ngũ kỹ thuật hỗ trợ rất tận tâm và nhiệt tình. Mình sẽ tiếp tục ủng hộ Tino 🥰.
Rất tuyệt vời🙆🙆🙆🙆🙆🙆🙆🙆🙆
Xét về tầm giá thì TinoHost rất đáng để mua và sử dụng lâu dài.
Dịch vụ chất lượng, ủng hộ 1 năm nay rồi
tuyệt vời quá đi,tuyệt vời quá đi
Tốc độ ổn định, tư vấn nhiệt tình
mới tham gia, mong mọi người hỗ trợ thêm
Tốc độ khá tốt với gói rẻ nhất 9k
Giao dịch nhanh,support nhanh và tận tình,chuyển miền nhanh,Hosting Ok
mua sản phẩm dịch vụ tinhot rất tốt tặng ad 5tr ** luon nè🥰🥰🥰
tinohost
một truong những nơi bán hosting rẻ, chất lượng dành cho anh em nào cần để làm web
mua tại : tinohost.com
mình đã mua 2 tên miền + hosting của Tino Host . quả nhiên hiệu quả SEO cải thiện đáng kể và chứng chỉ bảo mật HTTPS miễn phí của Tino Host cũng ko kém phần quang trọng cho việc SEO website của mình
Tino host là một trong nhà cung cấp tốt nhất mình từng sử dụng. Với ưu đãi khuyến mại nhiều, giá thành rẻ kèm theo đó là sự support tuyệt vời của các admin. Nếu ai chưa lựa chọn được nhà cung cấp cho bản thân mình thì Tinohost sẽ là câu trả lời tốt nhất.
dịch vụ tốt, đội ngũ support nhiệt tình, cảm ơn #tinohost
Uy tín, chất lượng, nhân viên hỗ trợ nhiệt tình
mua 2 domain tại tinohost dùng rất chất lượng
Đã mua 02 domain và hosting tại TinoHost, hài lòng cách tư vấn và chăm sóc khách hàng của TinoHost :)
Giá rẻ cấu hình mạnh, black friday là sự bùng nổ của Tino
Hay web bán tài nguyên rất ngon
dịch vụ tốt, mua luôn host chất lượng cao của công ty nhân dịp blackfriday, cảm ơn #tinohost
Dịch vụ rất tốt, nhân viên tận tình.
Hỗ trợ nhiệt tình nhất trong các nhà cung cấp mih từng dùng. Không những server mạnh, ưu đãi có 1 không 2 mà còn nhiều plugin pro bản quyền đính kèm nữa. Quyết định gắn bó "Lifetime" với tino 😁
Dịch vụ tốt hỗ trợ nhanh chóng
Thích cách tư vấn tận tình và nhanh gọn của Tino mỗi khi có vấn đề trục trặc. Hosting ổn định, giá rẻ tốt lắm nhé mọi người
mình có mua 2 tên msiền của tino, mình rât thích cách tư vấn và chăm sóc khách hàng tại đây. Ngoài ra giá domain khá rẻ, phù hợp cho mọi người. 5 sao
Dịch vụ tốt, support nhiệt tình
tinohost tuyệt vời giá cả hợp lý
domain mua rất rẻ :))))
tốt, chất lượng, hostingok
Hosting tốt, giá cả cạnh tranh
Tuyệt vời , Hosting quá ổn
Chất lượng lắm ạ. Domain mua rẻ nhất thị trường
Dịch vụ tốt và chất lượng
Chất lượng lắm ạ. Domain mua rẻ nhất thị trường
Tino Host dùng quá ngon đi !💥💥💥💥💥
Tôi đã mua domain và hosting của các nhà cung cấp khác rồi, nhưng thực sự thấy không tốt bằng Tino, ngoài ra còn hỗ trợ rất tốt. Cảm ơn tino nhiều!
Next Reviews
CÔNG TY CỔ PHẦN TẬP ĐOÀN TINO
Trụ sở chính: L17-11, Tầng 17, Tòa nhà Vincom Center, Số 72 Lê Thánh Tôn,  Phường Bến Nghé, Q. 1, TP. Hồ Chí Minh

Văn phòng kinh doanh: Số 42 Trần Phú, Phường 4, Quận 5, TP HCM
GPKD số 0315679836 do Sở KH và ĐT TP Hồ Chí Minh cấp
Hotline: 0364 333 333
Góp ý/Phản ánh dịch vụ: 0933 000 886