Các cuộc gọi không đồng bộ trong Android

Thảo luận trong 'Game - Ứng dụng' bắt đầu bởi n_erudite, 29/12/15.

Đã xem: 941

  1. n_erudite Thành Viên

    Trong cuộc sống thực, điều này trình bày một số vấn đề do các kết nối mạng được vốn chậm. Khi bạn kết nối đến một máy chủ để tải về một số dữ liệu, giao diện người dùng của ứng dụng của bạn vẫn còn đông lạnh cho đến khi một phản ứng thu được. 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
    <String, Void, Bitmap> {
    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
    {
    ...
    }
    >> KHóa học android tại hà nội

    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 học photoshop tại hà nội

     
    Đang tải...
    nam lim xanh

    Bình Luận Bằng Facebook