Trao đổi với tôi

http://www.buidao.com

10/20/10

[Android] Cơ bản về lập trình Android

Công việc làm đồ án tuy hơi bận rộn một chút nhưng cũng muốn dành chút thời gian post bài vì kể từ khi post bài iPhone cho đến giờ chưa có bài nào hay hay cho anh em bạn bè xem cả làm mọi người vào blog của tớ cũng thấy phát chán.
Hôm nay mình mạo muội post bài giới thiệu mở đầu về lập trình trong Android để mọi người cùng tham khảo.

Mở đầu mình xin giới thiệu một chút về Android.
Android là một nền tảng phần mềm mở, hoàn toàn mở. Nói đến nền tảng phần mềm mình cũng xin giải thích luôn vì sao lại nói Android là một nền tảng phần mềm. Vì nếu như bạn nói nó là một hệ điều hành thì không đủ, nếu nói là một ngôn ngữ lập trình thì không đúng, còn nếu nói nó là một API thì càng không phải.
Android nó bao gồm cả nền tảng phần cứng lẫn phần mềm. Nói đến Android bạn cần phải hiểu là nền tảng phần cứng + hệ điều hành + nền tảng phát triển phần mềm (Android SDK + Java). Cũng giống như iPhone vậy, iPhone cũng được coi như là một nền tảng phần mềm do Apple xây dựng dựa trên nền tảng hệ điều hành MAC OS còn Android thì dựa vào nhân Linux do Google xây dựng. Cũng vì Android sử dụng nhân Linux nên các máy điện thoại sử dụng hệ điều hành Android khởi động bao giờ cũng chậm. Ngược lại với iPhone thì hệ điều hành Android là một hệ điều hành đa tiến trình. Khi bạn lập trình thread trên Android bạn sẽ thấy nó cực kì phức tạp và gặp nhiều rắc rối nếu như bạn chưa hiểu Android. Lấy một ví dụ đơn giản nhé.
Lỗi dưới đây là một lỗi cực kì cơ bản mà nếu như bạn chưa gặp chưa hiểu được lỗi này thì coi bạn chưa biết gì về Android.
Uncaught handler: thread Thread-10 exiting due to uncaught exception
04-08 19:07:11.495: ERROR/AndroidRuntime(271): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
Lỗi trên là lỗi khi bạn đang cố gắng update UI từ một thread mà thread đó không phải là UI thread
VD:
ArrayAdapter<...> aa
...
new Thread(){
public void run(){

aa.notifyDataSetChanged();//Đoạn mã này đang cố gắng update lại thành phần giao diện trong UI thread đang chạy. Vì vậy nó sẽ báo lỗi như trên. Cách khắc phục là bạn phải sử dụng một Handler Thread để trao đổi Message với UI Thread
}
}.start();

Bạn chú ý là khi lập trình Android không được tuỳ tiện sử dụng Thread vì bản thân hầu hết các đối tượng trong Android đều là thread. Chẳng hạn, AlertDialog khi show nó sẽ tự tạo một thread vì vậy nếu bạn đặt dialog này trong một vòng for thì lỗi là cái chắc.

Android cung cấp cho chúng ta những đối tượng thread để chúng ta thao tác để không phải đau đầu nhưng mà mình chưa hiểu hết.

Khi bạn sử dụng thread trong Android bạn cũng cần chú ý cho là đầu tiên trong hàm run bạn phải gọi Looper.preparer();
kết thúc hàm run bạn phải gọi Looper.loop()
Nếu bạn sử dụng hàm runOnUIThread() thì không cần phải gọi 2 hàm này, nếu gọi sẽ bị Runtime Exception ngay đấy. Bởi vì hàm runOnUIThread đã xử lý gọi rồi nên gọi lại nữa là bị lỗi.

Thế đấy, có chút xíu thế thôi mà chắc các bạn đọc đã hoa cả mắt rồi.

Nói chung thì lập trình trên Android khá phức tạp. Tuy nhiên, cũng có những cái sướng đó là mọi thành phần ứng dụng cũng như dữ liệu trong Android đều được cho sử dụng thoải mái.

Ví dụ bạn có thể sử dụng lại một phần giao diện của Ứng dụng Contact trong Android. Mọi dữ liệu trong Android đều được quản lý bằng con trỏ và đường dẫn giống như đường dẫn thư mục trong windows vậy. Bạn chỉ cần biết cấu trúc đường dẫn là có thể lấy mọi thứ trong Android như tin nhắn, hình ảnh, các cuộc gọi nhỡ, thông tin contacts,...