Threading in Android

khai niệm Multi-Threading nó thực sự luôn là bản chất của tất cả các platform. Nó cung cấp tối đa hiệu năng sử dụng của vi sử lý. Threading được sử dụng khi chương trình của bạn thực thi nhiều task tại cùng một thời điểm và trong bài viết này tôi cũng chỉ sưu tầm lại và viết lại theo cách của mình, một cách tuyệt vời để luyện từ vựng tiếng anh.Ok và chúng ta cùng bắt đầu tìm hiểu Threading trong Android.

Android cung cấp cho chứng ta hai phương thức sau để làm việc với Thread.

  • Handler.
  • Asyns Tasks

Handlers :

Khi bạn tạo một đối tượng từ class Handler, thì í sẽ xử lý hai đối tượng đó là Messages và Runable quan hệ với Message-Queue hiện tại. Hàng đợi message chứa các công việc cần thực thi theo cớ chế FIFO. Bạn sẽ cần Handler mỗi Activity nới mà background thread sẽ thông tin tới để update UI.

Handler

được quan hệ với các thread từ nới mà chúng được tạo ra. Chúng ta có thể thông tin tớ Handler bằng hai phương thức sau:

  • Messages
  • Runable object

Trong bài này chúng ta sẽ cùng làm rõ làm thế nào để sử dụng hai vấn đề trên. Chúng ta hãy cùng đi đến một ví dụ đơn giản mình họa khi chúng ta update một đoạn text của TextView mà sử dụng

Multiple thread

Sử dụng Messages

  • Đầu tiền chúng ta tạo một đối tượng Handler với một quan hệ với một phương thức call back để xử lý các messages nhận về (nó là phương thức mà nới UI update sẽ hoàn thành.)
  • Tiếp đó từ background thread chúng sẽ cần send một messages tớ handler

và đây là code của Activity của chúng ta :


//display each item in a single line
  txt.setText(txt.getText()+"Item "+System.getProperty("line.separator"));
     }
 };

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  txt=(TextView)findViewById(R.id.txt);
 }
 
 @Override
 protected void onStart() {
  super.onStart();
              // create a new thread
  Thread background=new Thread(new Runnable() {
   
   @Override
   public void run() {
    for(int i=0;i<10;i++)
    {
     try {
      Thread.sleep(1000);        b.putString("My Key", "My Value: 

"+String.valueOf(i));
// send message to the handler with the current message handler          

handler.sendMessage(handler.obtainMessage());
     } catch (Exception e) {
      Log.v("Error", e.toString());
     }
    }
   }
  });
  
  background.start();
 }
}

Sau đó running ta được kết quả sau :

ví dujg này là rất cơ bản. nó chỉ send những messages giống nhau.
Vậy chúng ta sẽ làm gì khi chúng ta muốn send cùng với data và nó sẽ thay đổi tại mỗi thời điểm khi được send. Câu trả lời là sử dụng Message.setData(Bundler bundler). Phương thức được tạo với một đối tượng Bundler và thêm data vào nó như sau :

public class MainActivity extends Activity {
 TextView txt;
 // our handler
 Handler handler = new Handler() {
  @Override
  public void handleMessage(Message msg) {
   // get the bundle and extract data by key
   Bundle b = msg.getData();
   String key = b.getString("My Key");
   txt.setText(txt.getText() + "Item " + key
   +System.getProperty("line.separator"));
  }
 };

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  txt = (TextView) findViewById(R.id.txt);
 }

 @Override
 protected void onStart() {
  super.onStart();
  // create a new thread
  Thread background = new Thread(new Runnable() {

   @Override
   public void run() {
    for (int i = 0; i < 10; i++) {
     try {
      Thread.sleep(1000);
                                        Message msg = new Message();
      Bundle b = new Bundle();
      b.putString("My Key", "My Value: " + String.valueOf(i));
      msg.setData(b);
      // send message to the handler with the current message handler
      handler.sendMessage(msg);
           } catch (Exception e) {
      Log.v("Error", e.toString());
     }
    }
   }
  });

  background.start();
 }
}

và đây là kết quả :

Sử dụng Runnalbes

Runnable r=new Runnable() {
   
   @Override
   public void run() {
    txt.setText("Runnable");
    
   }
  };
  
  handler.post(r);

Điều này sẽ thêm Runnable tới hàng đợi messages để được thực thi bởi handler.

Hãy để lại nguồn tham khảo khi bạn muốn đăng bài viết ở nơi khác.

Advertisements

3 thoughts on “Threading in Android

  1. Pingback: ProgressDialog in android « Savin

    1. Sharing Post author

      À có lẽ lúc để là i<50000 thì nó nó chạy nhanh quá, hok nhìn được cái progressbar này nên sửa lại chưa kịp sửa text, mình update lại liền, cảm ơn nha.

      Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s