SlideShare une entreprise Scribd logo
1  sur  17
Xử lý bất đông bộ
MultiUni
Trần Vũ Tất Bình
Thread
• Thông thường dùng Thread để xử lý các code
xử lý nặng, hoặc mất thời gian có thể gây
chậm chương trình hoặc giao diện bị block.
• Thread khá thông dụng và trong Android dùng
lớp Thread của Java.
http://developer.android.com/reference/java/lang/Thread.html
• Mặc định, mỗi ứng dụng chạy trong một
process và code được thực thi trong thread
chính của process đó.
Thread
• Nếu code xử lý quá lâu, không kịp phản hồi lại
các sự kiện người dùng trong 5 giây thì sẽ xuất
hiện dialog “Application is not responding” và
người dùng có thể force close ứng dụng ngay
lập tức.
• Dù không bị force close thì việc ứng dụng bị
lag là khó chấp nhận.
• Tham khảo 3 link sau:
http://developer.android.com/guide/practices/design/responsiveness.html
http://developer.android.com/guide/practices/design/seamlessness.html
http://developer.android.com/guide/practices/design/performance.html
Thread
Thread thread = new Thread() {
@Override
public synchronized void start() {
// Khởi tạo các đối tượng cần thiết tại đây
super.start();
}
@Override
public void run() {
// code xử lý chính của thread trong này
super.run();
}
};
thread.start(); //bắt đầu thread
Thread
• Lưu ý:
– Thread lần đầu thực thi gọi phương thức start(),
những lần sau chỉ gọi phương thức run(), không
gọi start() nữa.
– Các code xử lý liên quan đến giao diện chỉ được
xử lý trong thread chính của ứng dụng (ví dụ load
ảnh từ mạng về thì dung thread, nhưng hiển thị ảnh
lên ImageView thì xử lý trong thread chính)
– Sau khi thực thi xong phương thức run(), thread
không còn active nữa.
Handler
• Trong Android, để tiện việc giao tiếp giữa 2
thread (như đề cập ở slide trước) ta dùng đối
tượng Handler.
• Ngoài ra, có thể dùng Handler để đặt xử lý
một yêu cầu nào đó sau một khoảng thời gian
xác định.
• Chi tiết tại đây:
http://developer.android.com/reference/android/os/Handler.ht
ml
Handler
• Giao tiếp giữa 2 Thread:
– Giả sử trong phương thức run() của Thread trong
slide trước, đã lấy xong đối tượng Bitmap về.
Muốn truyền đối tượng Bitmap cho Thread chính
hiển thị lên màn hình:
Message msg = mHandler.obtainMessage(1, bitmap);
mHandler.sendMessage(msg);
– Trong code của Activity (mặc định là thread
chính), ta khai báo một đối tượng Handler tương
tứng như sau:
Handler
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
//Hiển thị Bitmap
mImageView.setImageBitmap((Bitmap)msg.obj);
}
super.handleMessage(msg);
}
};
Handler
• Vừa rồi, ta nhờ đối tượng mHandler lấy ra một
message và gắn mã vào cho message đó, kèm
theo đối tượng bitmap. Sau đó gửi đi.
• Message gửi đi sẽ được nhận phương thức
callback là handleMessage() của đối tượng
Handler.
• Handler còn có thể gửi message để xử lý sau một
khoảng thời gian định sẵn sendMessageAtTime hoặc xử
lý tại một thời điểm định sẵn sendMessageDelayed …
có thể tìm hiểu thêm trong tài liệu của lớp
Handler
Handler
• Handler được tạo trong thread nào thì sẽ sử
dụng message queue của thread đó.
• Có thể dùng Handler như bộ đếm giây khi chơi
nhạc, hoặc chức năng tương tự 
• Lưu ý là nếu trong message queue vẫn còn
message thì vẫn còn thực thi dù đã thoát khỏi
ứng dụng, cẩn thận chỗ này chứ không ứng
dụng chạy bậy đó.
AlarmManager
• Dùng AlarmManager để thực hiện đăng ký xử
lý một thao tác nào đó tại một thời điểm nhất
định trong tương lai (thường là thời gian dài).
• Nếu xử lý trong thời gian ngắn thì khuyến cáo
nên dùng Handler.
• Ưu điểm của AlarmManager, khi đến thời
điểm được đựt trước, dù ứng dụng đang không
chạy vẫn được gọi.
• Nếu tắt máy thì bật lại cũng không còn (lưu ý
điểm này)
AlarmManager
• Khởi tạo một alarm:
AlarmManager am = (AlarmManager)
getSystemService(ALARM_SERVICE);
Intent broadcastIntent = new Intent("org.multiuni.android.ACTION...");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this,
0, broadcastIntent, PendingIntent.FLAG_CANCEL_CURRENT);
am.set(AlarmManager.RTC_WAKEUP, triggerAtTime, pendingIntent);
AlarmManager
• Giải thích:
– Khởi tạo một đối tương AlarmManager để làm
việc với Alarm.
– Tạo một intent tên broadcastIntent, intent này được
dùng để gửi broadcast khi đến thời điểm định sẵn.
– PendingIntent được khởi tạo gồm context,
broadcastIntent ở trên và một cờ báo rằng nếu đã
có một Alarm tương tự thì bỏ nó đi và dùng cái
mới này.
– Sau cùng, set alarm với 3 thông số:
• Bộ đếm thời gian (có 4 loại, xem trong document của
AlarmManager)
• Thời gian chính xác để bật alarm lên.
• PendingIntent gửi đi (dùng để xác định tới thời điểm bật
alarm lên thì cần phát intent nào)
• Tham khảo thêm tại đây:
http://developer.android.com/reference/android/app/AlarmManag
er.html
Notification
• Trong những trường hợp các bạn muốn hiện
một thông báo về một sự kiện nào đó cho
người dùng mà khong muốn ảnh hưởng đến
công việc của họ hoặc không chắc họ có đang
cầm điện thoại (tin nhắn, cuộc gọi, email…)
• Hoặc bạn muốn hiển thị thông tin một việc nào
đó đang xảy ra trên điện thoại và mong người
dùng biết (đang nghe nhạc, đang trong cuộc
gọi, thiếu thẻ nhớ…)
 Notification
Notification
• Bạn có thể tạo một notification có âm báo,
rung, đèn led, icon…
• Notification có 2 dạng:
– One time
– On going
• Xem chi tiết tại
http://developer.android.com/reference/android/app/Notification
Manager.html
Notification
• Code demo chi tiết:
ApiDemos  com.example.android.apis.app 
StatusBarNotification.java

Contenu connexe

En vedette

Slide bài giảng lập trình Android DTU - Phần 2 (Thiết kế giao diện)
Slide bài giảng lập trình Android DTU - Phần 2 (Thiết kế giao diện)Slide bài giảng lập trình Android DTU - Phần 2 (Thiết kế giao diện)
Slide bài giảng lập trình Android DTU - Phần 2 (Thiết kế giao diện)Techacademy Software
 
Bài 1: Phát triển ứng dụng trên thiết bị di động
Bài 1: Phát triển ứng dụng trên thiết bị di động Bài 1: Phát triển ứng dụng trên thiết bị di động
Bài 1: Phát triển ứng dụng trên thiết bị di động Tuan Nguyen
 
Slide bài giảng lập trình Android DTU - Phần 5 (Broadcastreceiver)
Slide bài giảng lập trình Android DTU - Phần 5 (Broadcastreceiver)Slide bài giảng lập trình Android DTU - Phần 5 (Broadcastreceiver)
Slide bài giảng lập trình Android DTU - Phần 5 (Broadcastreceiver)Techacademy Software
 
Slide bài giảng lập trình Android DTU - Phần 2 (Bắt đầu với Helloworld)
Slide bài giảng lập trình Android DTU - Phần 2 (Bắt đầu với Helloworld)Slide bài giảng lập trình Android DTU - Phần 2 (Bắt đầu với Helloworld)
Slide bài giảng lập trình Android DTU - Phần 2 (Bắt đầu với Helloworld)Techacademy Software
 
lập trình di động
lập trình di độnglập trình di động
lập trình di độngtruong le hung
 
Bài 7: Toast – Dialog, ListView & Binding
Bài 7: Toast – Dialog, ListView & BindingBài 7: Toast – Dialog, ListView & Binding
Bài 7: Toast – Dialog, ListView & Bindinghoccungdoanhnghiep
 
Slide bài giảng lập trình Android DTU - Phần 4 (Activity)
Slide bài giảng lập trình Android DTU - Phần 4 (Activity)Slide bài giảng lập trình Android DTU - Phần 4 (Activity)
Slide bài giảng lập trình Android DTU - Phần 4 (Activity)Techacademy Software
 
Seminar: quản lý thời gian
Seminar: quản lý thời gianSeminar: quản lý thời gian
Seminar: quản lý thời gianTuan Nguyen
 
Slide bài giảng lập trình Android DTU - Phần 1
Slide bài giảng lập trình Android DTU - Phần 1Slide bài giảng lập trình Android DTU - Phần 1
Slide bài giảng lập trình Android DTU - Phần 1Techacademy Software
 
Tổng quan tài liệu Hướng dẫn hệ thống BMS
Tổng quan tài liệu Hướng dẫn hệ thống BMSTổng quan tài liệu Hướng dẫn hệ thống BMS
Tổng quan tài liệu Hướng dẫn hệ thống BMSJustin Hoang
 
Android Nâng cao-Bài 5:Notification Multiresolution Multilanguage
Android Nâng cao-Bài 5:Notification Multiresolution MultilanguageAndroid Nâng cao-Bài 5:Notification Multiresolution Multilanguage
Android Nâng cao-Bài 5:Notification Multiresolution MultilanguagePhuoc Nguyen
 
Android Nâng cao-Bài 4: Content Provider
Android Nâng cao-Bài 4: Content ProviderAndroid Nâng cao-Bài 4: Content Provider
Android Nâng cao-Bài 4: Content ProviderPhuoc Nguyen
 
Android Nâng cao-Bài 9-Debug in Android Application Development
Android Nâng cao-Bài 9-Debug in Android Application Development Android Nâng cao-Bài 9-Debug in Android Application Development
Android Nâng cao-Bài 9-Debug in Android Application Development Phuoc Nguyen
 
Android Nâng cao-Bài 6-Multi theme-adb tool-jUnit
Android Nâng cao-Bài 6-Multi theme-adb tool-jUnitAndroid Nâng cao-Bài 6-Multi theme-adb tool-jUnit
Android Nâng cao-Bài 6-Multi theme-adb tool-jUnitPhuoc Nguyen
 

En vedette (16)

Slide bài giảng lập trình Android DTU - Phần 2 (Thiết kế giao diện)
Slide bài giảng lập trình Android DTU - Phần 2 (Thiết kế giao diện)Slide bài giảng lập trình Android DTU - Phần 2 (Thiết kế giao diện)
Slide bài giảng lập trình Android DTU - Phần 2 (Thiết kế giao diện)
 
Bài 1: Phát triển ứng dụng trên thiết bị di động
Bài 1: Phát triển ứng dụng trên thiết bị di động Bài 1: Phát triển ứng dụng trên thiết bị di động
Bài 1: Phát triển ứng dụng trên thiết bị di động
 
Slide bài giảng lập trình Android DTU - Phần 5 (Broadcastreceiver)
Slide bài giảng lập trình Android DTU - Phần 5 (Broadcastreceiver)Slide bài giảng lập trình Android DTU - Phần 5 (Broadcastreceiver)
Slide bài giảng lập trình Android DTU - Phần 5 (Broadcastreceiver)
 
Slide bài giảng lập trình Android DTU - Phần 2 (Bắt đầu với Helloworld)
Slide bài giảng lập trình Android DTU - Phần 2 (Bắt đầu với Helloworld)Slide bài giảng lập trình Android DTU - Phần 2 (Bắt đầu với Helloworld)
Slide bài giảng lập trình Android DTU - Phần 2 (Bắt đầu với Helloworld)
 
lập trình di động
lập trình di độnglập trình di động
lập trình di động
 
Bài 7: Toast – Dialog, ListView & Binding
Bài 7: Toast – Dialog, ListView & BindingBài 7: Toast – Dialog, ListView & Binding
Bài 7: Toast – Dialog, ListView & Binding
 
Slide bài giảng lập trình Android DTU - Phần 4 (Activity)
Slide bài giảng lập trình Android DTU - Phần 4 (Activity)Slide bài giảng lập trình Android DTU - Phần 4 (Activity)
Slide bài giảng lập trình Android DTU - Phần 4 (Activity)
 
Bài 6: Working with DATA
Bài 6: Working with DATABài 6: Working with DATA
Bài 6: Working with DATA
 
Seminar: quản lý thời gian
Seminar: quản lý thời gianSeminar: quản lý thời gian
Seminar: quản lý thời gian
 
Bài 8: ListView & Binding
Bài 8: ListView & BindingBài 8: ListView & Binding
Bài 8: ListView & Binding
 
Slide bài giảng lập trình Android DTU - Phần 1
Slide bài giảng lập trình Android DTU - Phần 1Slide bài giảng lập trình Android DTU - Phần 1
Slide bài giảng lập trình Android DTU - Phần 1
 
Tổng quan tài liệu Hướng dẫn hệ thống BMS
Tổng quan tài liệu Hướng dẫn hệ thống BMSTổng quan tài liệu Hướng dẫn hệ thống BMS
Tổng quan tài liệu Hướng dẫn hệ thống BMS
 
Android Nâng cao-Bài 5:Notification Multiresolution Multilanguage
Android Nâng cao-Bài 5:Notification Multiresolution MultilanguageAndroid Nâng cao-Bài 5:Notification Multiresolution Multilanguage
Android Nâng cao-Bài 5:Notification Multiresolution Multilanguage
 
Android Nâng cao-Bài 4: Content Provider
Android Nâng cao-Bài 4: Content ProviderAndroid Nâng cao-Bài 4: Content Provider
Android Nâng cao-Bài 4: Content Provider
 
Android Nâng cao-Bài 9-Debug in Android Application Development
Android Nâng cao-Bài 9-Debug in Android Application Development Android Nâng cao-Bài 9-Debug in Android Application Development
Android Nâng cao-Bài 9-Debug in Android Application Development
 
Android Nâng cao-Bài 6-Multi theme-adb tool-jUnit
Android Nâng cao-Bài 6-Multi theme-adb tool-jUnitAndroid Nâng cao-Bài 6-Multi theme-adb tool-jUnit
Android Nâng cao-Bài 6-Multi theme-adb tool-jUnit
 

Similaire à 7. xu ly bat dong bo

Android chapter22-services
Android chapter22-servicesAndroid chapter22-services
Android chapter22-servicesmanhvokiem
 
5. broadcast receiver
5. broadcast receiver5. broadcast receiver
5. broadcast receiverJustin Hoang
 
Bài giảng kỹ thuật lập trình hook
Bài giảng kỹ thuật lập trình hookBài giảng kỹ thuật lập trình hook
Bài giảng kỹ thuật lập trình hookjackjohn45
 
Hướng Dẫn Lập Trình Android: 5. BroadcastReceiver
Hướng Dẫn Lập Trình Android: 5. BroadcastReceiverHướng Dẫn Lập Trình Android: 5. BroadcastReceiver
Hướng Dẫn Lập Trình Android: 5. BroadcastReceiverWendy587439
 
Meo lap trinh_tech24.vn
Meo lap trinh_tech24.vnMeo lap trinh_tech24.vn
Meo lap trinh_tech24.vnphiagame
 
Giới thiệu Android- Bài 2
Giới thiệu Android- Bài 2Giới thiệu Android- Bài 2
Giới thiệu Android- Bài 2hoccungdoanhnghiep
 
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...VKhang Yang
 
Lập trình cơ bản: Function, khái niệm hàm, phân loại hàm trong Java (có ví dụ...
Lập trình cơ bản: Function, khái niệm hàm, phân loại hàm trong Java (có ví dụ...Lập trình cơ bản: Function, khái niệm hàm, phân loại hàm trong Java (có ví dụ...
Lập trình cơ bản: Function, khái niệm hàm, phân loại hàm trong Java (có ví dụ...CodeGym Đà Nẵng
 
Bao cao thuc tap tuan 5
Bao cao thuc tap tuan 5Bao cao thuc tap tuan 5
Bao cao thuc tap tuan 5Thanh Tuan Ngo
 
Cấu trúc android
Cấu trúc androidCấu trúc android
Cấu trúc androiddhinh_190192
 
Mai kim thi bao cao thuc tap tuan 1
Mai kim thi   bao cao thuc tap tuan 1Mai kim thi   bao cao thuc tap tuan 1
Mai kim thi bao cao thuc tap tuan 1Tehichan Mai
 
Hướng dẫn làm quen với stm8 f103 - tincanban.com
Hướng dẫn làm quen với stm8 f103 - tincanban.comHướng dẫn làm quen với stm8 f103 - tincanban.com
Hướng dẫn làm quen với stm8 f103 - tincanban.comThùy Linh
 
IT120-2. Bắt đầu với Hello World
IT120-2. Bắt đầu với Hello WorldIT120-2. Bắt đầu với Hello World
IT120-2. Bắt đầu với Hello WorldMultiUni
 
Lập trình Android cơ bản bằng tiếng Việt
Lập trình Android cơ bản bằng tiếng ViệtLập trình Android cơ bản bằng tiếng Việt
Lập trình Android cơ bản bằng tiếng Việtlaptrinhandroid
 
Phân tích Confuser 1.9.0.0 - Anti-tamper protection - Bản dịch
Phân tích Confuser 1.9.0.0 - Anti-tamper protection - Bản dịchPhân tích Confuser 1.9.0.0 - Anti-tamper protection - Bản dịch
Phân tích Confuser 1.9.0.0 - Anti-tamper protection - Bản dịchLevis Nickaster
 
Life cycle của Android
Life cycle của AndroidLife cycle của Android
Life cycle của AndroidNguyễn Anh
 
bt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdfbt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdfHiNht6
 

Similaire à 7. xu ly bat dong bo (20)

Android chapter22-services
Android chapter22-servicesAndroid chapter22-services
Android chapter22-services
 
5. broadcast receiver
5. broadcast receiver5. broadcast receiver
5. broadcast receiver
 
Bài giảng kỹ thuật lập trình hook
Bài giảng kỹ thuật lập trình hookBài giảng kỹ thuật lập trình hook
Bài giảng kỹ thuật lập trình hook
 
Hướng Dẫn Lập Trình Android: 5. BroadcastReceiver
Hướng Dẫn Lập Trình Android: 5. BroadcastReceiverHướng Dẫn Lập Trình Android: 5. BroadcastReceiver
Hướng Dẫn Lập Trình Android: 5. BroadcastReceiver
 
Meo lap trinh_tech24.vn
Meo lap trinh_tech24.vnMeo lap trinh_tech24.vn
Meo lap trinh_tech24.vn
 
Giới thiệu Android- Bài 2
Giới thiệu Android- Bài 2Giới thiệu Android- Bài 2
Giới thiệu Android- Bài 2
 
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emul...
 
Lập trình cơ bản: Function, khái niệm hàm, phân loại hàm trong Java (có ví dụ...
Lập trình cơ bản: Function, khái niệm hàm, phân loại hàm trong Java (có ví dụ...Lập trình cơ bản: Function, khái niệm hàm, phân loại hàm trong Java (có ví dụ...
Lập trình cơ bản: Function, khái niệm hàm, phân loại hàm trong Java (có ví dụ...
 
Bao cao thuc tap tuan 5
Bao cao thuc tap tuan 5Bao cao thuc tap tuan 5
Bao cao thuc tap tuan 5
 
Tuan5
Tuan5Tuan5
Tuan5
 
SMS-2 (1).pptx
SMS-2 (1).pptxSMS-2 (1).pptx
SMS-2 (1).pptx
 
Cấu trúc android
Cấu trúc androidCấu trúc android
Cấu trúc android
 
Mai kim thi bao cao thuc tap tuan 1
Mai kim thi   bao cao thuc tap tuan 1Mai kim thi   bao cao thuc tap tuan 1
Mai kim thi bao cao thuc tap tuan 1
 
Hướng dẫn làm quen với stm8 f103 - tincanban.com
Hướng dẫn làm quen với stm8 f103 - tincanban.comHướng dẫn làm quen với stm8 f103 - tincanban.com
Hướng dẫn làm quen với stm8 f103 - tincanban.com
 
IT120-2. Bắt đầu với Hello World
IT120-2. Bắt đầu với Hello WorldIT120-2. Bắt đầu với Hello World
IT120-2. Bắt đầu với Hello World
 
Lập trình Android cơ bản bằng tiếng Việt
Lập trình Android cơ bản bằng tiếng ViệtLập trình Android cơ bản bằng tiếng Việt
Lập trình Android cơ bản bằng tiếng Việt
 
Phân tích Confuser 1.9.0.0 - Anti-tamper protection - Bản dịch
Phân tích Confuser 1.9.0.0 - Anti-tamper protection - Bản dịchPhân tích Confuser 1.9.0.0 - Anti-tamper protection - Bản dịch
Phân tích Confuser 1.9.0.0 - Anti-tamper protection - Bản dịch
 
Jmeter tool
Jmeter toolJmeter tool
Jmeter tool
 
Life cycle của Android
Life cycle của AndroidLife cycle của Android
Life cycle của Android
 
bt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdfbt-mon-lap-trinh-huong-doi-tuong.pdf
bt-mon-lap-trinh-huong-doi-tuong.pdf
 

Plus de Justin Hoang

Tam bien kieu Phap
Tam bien kieu PhapTam bien kieu Phap
Tam bien kieu PhapJustin Hoang
 
Huong dan su dung Adobe Presenter
Huong dan su dung Adobe PresenterHuong dan su dung Adobe Presenter
Huong dan su dung Adobe PresenterJustin Hoang
 
Giao trinh corel draw
Giao trinh corel drawGiao trinh corel draw
Giao trinh corel drawJustin Hoang
 
3.thiet ke giao dien tren android
3.thiet ke giao dien tren android3.thiet ke giao dien tren android
3.thiet ke giao dien tren androidJustin Hoang
 
2.bat dau voi hello world
2.bat dau voi hello world2.bat dau voi hello world
2.bat dau voi hello worldJustin Hoang
 
1.gioi thieu ve android sdk
1.gioi thieu ve android sdk1.gioi thieu ve android sdk
1.gioi thieu ve android sdkJustin Hoang
 
Hacking your Android (slides)
Hacking your Android (slides)Hacking your Android (slides)
Hacking your Android (slides)Justin Hoang
 
Tutorial How to change the icon
Tutorial How to change the iconTutorial How to change the icon
Tutorial How to change the iconJustin Hoang
 
Giao trinh Corel Draw (By Hoang Ngoc Giao)
Giao trinh Corel Draw (By Hoang Ngoc Giao)Giao trinh Corel Draw (By Hoang Ngoc Giao)
Giao trinh Corel Draw (By Hoang Ngoc Giao)Justin Hoang
 
Giao trinh mang may tinh (Toan tap)
Giao trinh mang may tinh (Toan tap)Giao trinh mang may tinh (Toan tap)
Giao trinh mang may tinh (Toan tap)Justin Hoang
 
Universal modules TXM1.8x Siemens
Universal modules TXM1.8x SiemensUniversal modules TXM1.8x Siemens
Universal modules TXM1.8x SiemensJustin Hoang
 
Mod Two Homology and Cohomology (Jean Claude)
Mod Two Homology and Cohomology (Jean Claude)Mod Two Homology and Cohomology (Jean Claude)
Mod Two Homology and Cohomology (Jean Claude)Justin Hoang
 
Cach in file auto cad
Cach in file auto cadCach in file auto cad
Cach in file auto cadJustin Hoang
 

Plus de Justin Hoang (16)

Tam bien kieu Phap
Tam bien kieu PhapTam bien kieu Phap
Tam bien kieu Phap
 
Huong dan su dung Adobe Presenter
Huong dan su dung Adobe PresenterHuong dan su dung Adobe Presenter
Huong dan su dung Adobe Presenter
 
Giao trinh corel draw
Giao trinh corel drawGiao trinh corel draw
Giao trinh corel draw
 
6. service
6. service6. service
6. service
 
3.thiet ke giao dien tren android
3.thiet ke giao dien tren android3.thiet ke giao dien tren android
3.thiet ke giao dien tren android
 
2.bat dau voi hello world
2.bat dau voi hello world2.bat dau voi hello world
2.bat dau voi hello world
 
1.gioi thieu ve android sdk
1.gioi thieu ve android sdk1.gioi thieu ve android sdk
1.gioi thieu ve android sdk
 
Hacking your Android (slides)
Hacking your Android (slides)Hacking your Android (slides)
Hacking your Android (slides)
 
Tutorial How to change the icon
Tutorial How to change the iconTutorial How to change the icon
Tutorial How to change the icon
 
Access Toan Tap
Access Toan TapAccess Toan Tap
Access Toan Tap
 
Autocad toan tap
Autocad toan tapAutocad toan tap
Autocad toan tap
 
Giao trinh Corel Draw (By Hoang Ngoc Giao)
Giao trinh Corel Draw (By Hoang Ngoc Giao)Giao trinh Corel Draw (By Hoang Ngoc Giao)
Giao trinh Corel Draw (By Hoang Ngoc Giao)
 
Giao trinh mang may tinh (Toan tap)
Giao trinh mang may tinh (Toan tap)Giao trinh mang may tinh (Toan tap)
Giao trinh mang may tinh (Toan tap)
 
Universal modules TXM1.8x Siemens
Universal modules TXM1.8x SiemensUniversal modules TXM1.8x Siemens
Universal modules TXM1.8x Siemens
 
Mod Two Homology and Cohomology (Jean Claude)
Mod Two Homology and Cohomology (Jean Claude)Mod Two Homology and Cohomology (Jean Claude)
Mod Two Homology and Cohomology (Jean Claude)
 
Cach in file auto cad
Cach in file auto cadCach in file auto cad
Cach in file auto cad
 

7. xu ly bat dong bo

  • 1. Xử lý bất đông bộ MultiUni Trần Vũ Tất Bình
  • 2. Thread • Thông thường dùng Thread để xử lý các code xử lý nặng, hoặc mất thời gian có thể gây chậm chương trình hoặc giao diện bị block. • Thread khá thông dụng và trong Android dùng lớp Thread của Java. http://developer.android.com/reference/java/lang/Thread.html • Mặc định, mỗi ứng dụng chạy trong một process và code được thực thi trong thread chính của process đó.
  • 3. Thread • Nếu code xử lý quá lâu, không kịp phản hồi lại các sự kiện người dùng trong 5 giây thì sẽ xuất hiện dialog “Application is not responding” và người dùng có thể force close ứng dụng ngay lập tức. • Dù không bị force close thì việc ứng dụng bị lag là khó chấp nhận. • Tham khảo 3 link sau: http://developer.android.com/guide/practices/design/responsiveness.html http://developer.android.com/guide/practices/design/seamlessness.html http://developer.android.com/guide/practices/design/performance.html
  • 4. Thread Thread thread = new Thread() { @Override public synchronized void start() { // Khởi tạo các đối tượng cần thiết tại đây super.start(); } @Override public void run() { // code xử lý chính của thread trong này super.run(); } }; thread.start(); //bắt đầu thread
  • 5. Thread • Lưu ý: – Thread lần đầu thực thi gọi phương thức start(), những lần sau chỉ gọi phương thức run(), không gọi start() nữa. – Các code xử lý liên quan đến giao diện chỉ được xử lý trong thread chính của ứng dụng (ví dụ load ảnh từ mạng về thì dung thread, nhưng hiển thị ảnh lên ImageView thì xử lý trong thread chính) – Sau khi thực thi xong phương thức run(), thread không còn active nữa.
  • 6. Handler • Trong Android, để tiện việc giao tiếp giữa 2 thread (như đề cập ở slide trước) ta dùng đối tượng Handler. • Ngoài ra, có thể dùng Handler để đặt xử lý một yêu cầu nào đó sau một khoảng thời gian xác định. • Chi tiết tại đây: http://developer.android.com/reference/android/os/Handler.ht ml
  • 7. Handler • Giao tiếp giữa 2 Thread: – Giả sử trong phương thức run() của Thread trong slide trước, đã lấy xong đối tượng Bitmap về. Muốn truyền đối tượng Bitmap cho Thread chính hiển thị lên màn hình: Message msg = mHandler.obtainMessage(1, bitmap); mHandler.sendMessage(msg); – Trong code của Activity (mặc định là thread chính), ta khai báo một đối tượng Handler tương tứng như sau:
  • 8. Handler Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 1) { //Hiển thị Bitmap mImageView.setImageBitmap((Bitmap)msg.obj); } super.handleMessage(msg); } };
  • 9. Handler • Vừa rồi, ta nhờ đối tượng mHandler lấy ra một message và gắn mã vào cho message đó, kèm theo đối tượng bitmap. Sau đó gửi đi. • Message gửi đi sẽ được nhận phương thức callback là handleMessage() của đối tượng Handler. • Handler còn có thể gửi message để xử lý sau một khoảng thời gian định sẵn sendMessageAtTime hoặc xử lý tại một thời điểm định sẵn sendMessageDelayed … có thể tìm hiểu thêm trong tài liệu của lớp Handler
  • 10. Handler • Handler được tạo trong thread nào thì sẽ sử dụng message queue của thread đó. • Có thể dùng Handler như bộ đếm giây khi chơi nhạc, hoặc chức năng tương tự  • Lưu ý là nếu trong message queue vẫn còn message thì vẫn còn thực thi dù đã thoát khỏi ứng dụng, cẩn thận chỗ này chứ không ứng dụng chạy bậy đó.
  • 11. AlarmManager • Dùng AlarmManager để thực hiện đăng ký xử lý một thao tác nào đó tại một thời điểm nhất định trong tương lai (thường là thời gian dài). • Nếu xử lý trong thời gian ngắn thì khuyến cáo nên dùng Handler. • Ưu điểm của AlarmManager, khi đến thời điểm được đựt trước, dù ứng dụng đang không chạy vẫn được gọi. • Nếu tắt máy thì bật lại cũng không còn (lưu ý điểm này)
  • 12. AlarmManager • Khởi tạo một alarm: AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); Intent broadcastIntent = new Intent("org.multiuni.android.ACTION..."); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, broadcastIntent, PendingIntent.FLAG_CANCEL_CURRENT); am.set(AlarmManager.RTC_WAKEUP, triggerAtTime, pendingIntent);
  • 13. AlarmManager • Giải thích: – Khởi tạo một đối tương AlarmManager để làm việc với Alarm. – Tạo một intent tên broadcastIntent, intent này được dùng để gửi broadcast khi đến thời điểm định sẵn. – PendingIntent được khởi tạo gồm context, broadcastIntent ở trên và một cờ báo rằng nếu đã có một Alarm tương tự thì bỏ nó đi và dùng cái mới này.
  • 14. – Sau cùng, set alarm với 3 thông số: • Bộ đếm thời gian (có 4 loại, xem trong document của AlarmManager) • Thời gian chính xác để bật alarm lên. • PendingIntent gửi đi (dùng để xác định tới thời điểm bật alarm lên thì cần phát intent nào) • Tham khảo thêm tại đây: http://developer.android.com/reference/android/app/AlarmManag er.html
  • 15. Notification • Trong những trường hợp các bạn muốn hiện một thông báo về một sự kiện nào đó cho người dùng mà khong muốn ảnh hưởng đến công việc của họ hoặc không chắc họ có đang cầm điện thoại (tin nhắn, cuộc gọi, email…) • Hoặc bạn muốn hiển thị thông tin một việc nào đó đang xảy ra trên điện thoại và mong người dùng biết (đang nghe nhạc, đang trong cuộc gọi, thiếu thẻ nhớ…)  Notification
  • 16. Notification • Bạn có thể tạo một notification có âm báo, rung, đèn led, icon… • Notification có 2 dạng: – One time – On going • Xem chi tiết tại http://developer.android.com/reference/android/app/Notification Manager.html
  • 17. Notification • Code demo chi tiết: ApiDemos  com.example.android.apis.app  StatusBarNotification.java