Mang đến cho bạn hành trang là Kiến thức và Kinh nghiệm

Lựa chọn chủ đề bạn quan tâm

Cùng nhau thảo luận về các vấn đề

Hãy theo dõi chúng tôi nếu bạn thấy bổ ích

  1. Hỏi đáp IT
  2. Hỏi nhanh

Hỏi về AsyncTask trong Android ?

344 Lượt xem 2 Bình luận 0 Lượt báo xấu
Em mới học về Android,Mọi người cho em hỏi :

Async Task chủ yếu dùng để làm gì ?
Sao các tuts về AsynCTask lại thường tạo 1 class extends AsyncTask ngay trong main class ?
Và String...params ? How to truyền dữ liệu vào đó ? Và 3 cái Parameters trong <> khi extends.

mong mọi người giúp :((

Câu trả lời

- Bạn đã sẵn sàng thảo luận về chủ đề này. Hãy bấm "Viết bình luận", bạn có thể lựa chọn sử dụng tài khoản Facebook hoặc Google++

- Vì sự phát triển của cộng đồng CNTT/CNPM tại Việt Nam!

Unknown user
No responses yet

Anh giải thích sơ quá một chút:

  1. 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.

  1. 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.

  2. 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.

  3. 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

1 Lượt thích

Thật sự đây là hệ quả của việc học theo kiểu ăn xổi/đi tắt nên xuất hiện nhiều lỗ hổng kiến thức, lỗ hổng tư duy, không vận dụng được cái mình đã học để giải quyết các bài toán phức tạp hơn.
Muốn lấy/xử lí giá trị result ở ngoài method onPostExecute thì chỉ việc truyền object này cho 1 method của 1 object khác trong method onPostExecute thôi
0 Lượt thích

Từ khóa tìm kiếm

Câu trả lời mới nhất

Tin tuyển dụng