Xử Lý Bất Đồng Bộ Trong Android Cơ Bản, Xử Lý Bất Đồng Bộ Trong Lập Trình Android Cơ Bản

Xử lý bất đồng bộ, hay còn gọi là xử lý đa tiến trình với AsyncTask là phương tiện để xử lý công việc sử dụng background thread và giao tiếp với UI thread mà không dùng Thread hay Handler, có dữ liệu trả về. Vì được khuyến cáo là nên sử dụng AsyncTask thay cho Handler nên mình sẽ bỏ qua không nói đến trong bài này. 

Đối với AsyncTask thì ta cần tạo một lớp kế thừa từ AsyncTask, sau đó từ MainActivity ta gọi hàm execute() của tiến trình này là OK..

Đang xem: Xử lý bất đồng bộ trong android

VD: 

public class DoLogin extends AsyncTask

Các khái niệm về AsyncTask

 AsyncTask có 3 đối số là các Generic Type:

*

Params: Là giá trị ((biến) được truyền vào khi gọi thực thi tiến trình và nó sẽ được truyền vào doInBackgroundProgress: Là giá trị (biến) dùng để update giao diện diện lúc tiến trình thực thi, biến này sẽ được truyền vào hàm onProgressUpdate.Result: Là biến dùng để lưu trữ kết quả trả về sau khi tiến trình thực hiện xong.

Những đối số nào không sử dụng trong quá trình thực thi tiến trình thì ta thay bằng Void

Thông thường trong 1 AsyncTask sẽ chứa 4 hàm, đó là :

*

onPreExecute() : Tự động được gọi đầu tiên khi tiến trình được kích hoạt.doInBackground(): Được thực thi trong quá trình tiến trình chạy nền, thông qua hàm này để ta gọi hàm onProgressUpdate để cập nhật giao diện (gọi lệnh publishProgress). Ta không thể cập nhật giao diện trong hàm doInBackground().onProgressUpdate (): Dùng để cập nhật giao diện lúc runtime.onPostExecute(): Sau khi tiến trình kết thúc thì hàm này sẽ tự động sảy ra. Ta có thể lấy được kết quả trả về sau khi thực hiện tiến trình kết thúc ở đây.

Xem thêm: do.w.n.lo.ad autocad 2007 full crack mien phi

Trong 4 hàm trên thì hàm doInBackground() bắt buộc phải tồn tại, trình biên dịch sẽ yêu cầu bạn add nó vào, còn các hàm khác có thể khuyết, nhưng theo khuyến cáo các bạn nên sử dụng đầy đủ 4 hàm đã nêu.

DEMO ứng dụng của AsyncTask

Bài ví dụ đơn giản là cập nhật Progressbar (không quản lý kết quả trả về), nên đối số 1 và đối số 3 ta để Void, đối số 2 ta để Integer. tui sẽ sử dụng 2 kiểu progressBar cùng thể hiện xử lý.

*

Đầu tiên tạo một ứng dụng như hình, và một class dùng để xử lý MyAsyncTask kế thừa AsyncTask.

Layout XML:

Class MyAsynceTask.java:

Override protected void onPreExecute() { ProgressBar progressBar=(ProgressBar) contextCha.findViewById(R.id.progressBar); progressBar.setVisibility(View.VISIBLE); // TODO Auto-generated method stub super.onPreExecute(); Toast.makeText(contextCha, “onPreExecute!”, Toast.LENGTH_LONG).show(); } //sau đó tới hàm doInBackground //tuyệt đối không được cập nhật giao diện trong hàm này
Override protected Void doInBackground(Void… arg0) { for(int i=0;iVà MainAcivity.java. Tiến trình MyASyncTask sẽ được thực thi khi bên MainActivity ta gọi phương thức: .execute():

package com.example.erp_tuyen.asynctaskdemo;import android.app.Activity;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.ProgressBar;import android.widget.TextView;public class MainActivity extends Activity { Button button; MyAsyncTask mytt; public ProgressBar progressBar,progressBar1;
Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); progressBar =(ProgressBar)this.findViewById(R.id.progressBar); progressBar1 =(ProgressBar)this.findViewById(R.id.progressBar1); stopProg(); button=(Button)this.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() {
Override public void onClick(View arg0) { // TODO Auto-generated method stub doStart(); } }); } public void stopProg(){ progressBar.setVisibility(View.GONE); } private void doStart() { //truyền this (chính là MainActivity hiện tại) qua Child Thread mytt =new MyAsyncTask(this); //Kích hoạt Tiến trình //khi gọi hàm này thì onPreExecute của mytt sẽ thực thi trước mytt.execute(); }}Như vậy là đã hoàn tất. Code đã được comment rất tỷ mỹ, hãy để lại comment để được giải đáp hoặc đặt câu hỏi lên fanpage của hoanhtao3d.vn.

Xem thêm: download Bản Photoshop Cs5 Ổn Định, Dễ Dàng Cờ Rắc Và Sử Dụng

Bạn có thể tham khảo source code tại đây

Trong bài tiếp tui sẽ làm một demo về AsynceTask có dữ liệu trả về, đống thời có kết nối với SQL Server, các bạn chú ý theo dõi.

Xem thêm bài viết thuộc chuyên mục: Đồng bộ

Khuyễn Mãi Hot