Anh giải thích sơ quá một chút:
- AsyncTask dùng để làm gì:
- Trong Android, đôi khi chúng ta sẽ thực hiện một số operation mà thời gian từ lúc gửi request đến lúc nhận response có thể hơi lâu như network operation: download ảnh, down phim…; database query, lấy thông tin danh sách ứng dụng trong hệ điều hành, gửi file bluetooth… Người ta hay gọi chúng là Background operations.
- Main Thread (thread dùng để update giao diện) thì thực thi công việc theo cơ chế hàng đợi FIFO, do đó nếu em thực hiện background operation bằng main thread sẽ dẫn tới hiện tượng đơ, treo màn hình do công việc sau muốn chạy phải đợi công việc trước được thực hiện xong.
Vậy nên Google làm ra AsyncTask để thực hiên background operation. Không dùng Main Thread nữa.
-
Tại sao lại extends AsyncTask:
-AsyncTask là abstract class, nó chưa implement cho em cái gì cả. Nên nếu em muốn thực hiện một công việc nào đó bằng AsyncTask em phải extends nó và tạo một class cụ thể. Còn viết ở đâu thì tùy vào mục đích sử dụng. Em tách ra class riêng cũng được mà để nó làm inner class cũng được.
-
String… params:
-Cái này trong java gọi là vargars. Tức là em có thể truyền vào nhiều tham số có kiểu dữ liệu là String (thay String bằng Integer, hoặc Long… cũng được). Thường dùng trong trường hợp em chưa biết được số lượng tham số cụ thể cần truyền vào là bao nhiêu.
-
Ba cái parametres trong <> là gì?
-Trong ví dụ có đoạn khai báo
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long>
- URL: Chỗ này là kiểu dữ liệu em muốn truyền vào trước khi chạy AsyncTask.
- Integer: là kiểu dữ liệu trả về trong khi đang chạy AsyncTask: ví dụ như số % phim đã được download…
- Long: là kiểu dữ liệu trả về khi chạy xong AsyncTask.
Truyền vào thì ta làm như sau:
new DownloadFilesTask().execute(url1, url2, url3);
url1, url2, url3 có kiểu dữ liệu là URL. Chính là vargars anh nói ở trên.
Em muốn làm Android thì phải vững Java core, đó là điều bắt buộc. Không vững Java thì không vững Android. Không vững Android chưa chắc đã không vững Java 