1. Tuyển Mod quản lý diễn đàn. Các thành viên xem chi tiết tại đây

Thực hiện các cuộc gọi không đồng bộ trong lập trình Android

Chủ đề trong 'Hỏi đáp Tin học' bởi nuongitq, 29/12/2015.

  1. 1 người đang xem box này (Thành viên: 0, Khách: 1)
  1. nuongitq

    nuongitq Thành viên quen thuộc

    Tham gia ngày:
    19/04/2015
    Bài viết:
    59
    Đã được thích:
    6
    Trong hầu hết các trường hợp, điều này là không thể chấp nhận được. Do đó, bạn cần phải đảm bảo rằng các kết nối đến máy chủ được thực hiện trong một thời trang không đồng bộ trong lập trình android.

    Cách đơn giản nhất để kết nối đến máy chủ không đồng bộ là sử dụng lớp AsyncTask có sẵn trong Android SDK. Sử dụng AsyncTask phép bạn thực hiện các tác vụ nền trong một chủ đề riêng biệt và sau đó trả về kết quả trong một thread UI. Sử dụng lớp này cho phép bạn thực hiện các hoạt động nền mà không cần phải xử lý các vấn đề luồng phức tạp.

    Sử dụng các ví dụ trước tải một hình ảnh từ máy chủ và sau đó hiển thị các hình ảnh trong một ImageView, bạn có thể bọc các mã trong một thể hiện của lớp AsyncTask, như hình dưới đây:

    Mã:
    public class MainActivity extends Activity{
    ImageView img;
    private class BackgroundTask extends AsyncTask
     {
    protected Bitmap doInBackground(String... url) {
    /---download an image---Bitmap bitmap = DownloadImage(url[0]);
    return bitmap;
    }
    protected void onPostExecute(Bitmap bitmap) {
    ImageView img = (ImageView) findViewById(R.id.img);
    img.setImageBitmap(bitmap);
    }
    }
    private InputStream OpenHttpConnection(String urlString)
    throws IOException
    {
    ...
    }
    Về cơ bản, bạn định nghĩa một lớp mở rộng lớp AsyncTask. Trong trường hợp này, có hai phương pháp trong lớp BackgroundTask - doInBackground() và onPostExecute(). Bạn đặt tất cả các mã mà cần phải được chạy không đồng bộ trong doInBackground () phương pháp. Khi công việc hoàn tất, kết quả được truyền lại qua các onPostExecute() phương pháp. Phương pháp onPostExecute() được thực thi trên thread UI, do đó nó là chủ đề an toàn để cập nhật các ImageView với bitmap tải về từ máy chủ.

    Để thực hiện nhiệm vụ không đồng bộ, chỉ cần tạo một thể hiện của lớp BackgroundTask và gọi nó thực hiện phương pháp execute():

    Mã:
    @Override
    public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    new BackgroundTask().execute(
    “http://www.streetcar.org/mim/cable/images/cable-01.jpg”);
    }
    ------------------------- || -------------------------

    Trung tâm Đào tạo hoc php tại hà nội

Chia sẻ trang này