Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 17

PHÁT TRIỂN ỨNG DỤNG

TRÊN THIẾT BỊ DI ĐỘNG


Giảng viên: Trần Hồng Nghi
Lớp: NT118.M11

Nhóm:
Nhóm: 22
•• Võ
Võ Thành
Thành Đô
Đô –– 19521365
19521365
•• Nguyễn
Nguyễn Quốc
Quốc Viễn
Viễn -- 19521103
19521103
•• Nguyễn
Nguyễn Văn
Văn Tài
Tài -- 19522154
19522154
•• Võ
Võ Quốc
Quốc Đăng
Đăng -- 19520447
19520447
Thread
 Một Thread là một thực thể trong một Process, là đối tượng được lên kế hoạch để
thực thi.

 Trong Process thường sẽ có nhiều Thread và tất cả các Thread này sẽ chia sẻ không
gian địa chỉ ảo và tài nguyên hệ thống trong Process.

 Ngoài ra mỗi Thread lại có công việc riêng của nó đó là: duy trì xử lý ngoại lệ, ưu
tiên lập lịch trình, lưu dữ cục bộ luồng,...

 Môi trường Thread có thể bao gồm: phần đăng kí Thread với máy chủ, nhân stack, ...
quan trọng là có một môi trường (Thread cũng có ngữ cảnh riêng của nó). 

Process = Program + State of all Threads executing in Program 


Thread

Nhiều
Có thể đánh
Thread= Thread thực
dấu là Độ ưu tiên
luồng thi đồng
Deamon
thời
 Để tạo mới Thread ta có hai cách.
 Cách thứ nhất là kế thừa (extends) từ class Thread:

Thread  Cách thứ 2 là thực thi (implements) interface Runnable:

 Trong Java chỉ có đơn kế thừa nên cách thứ hai sẽ linh động hơn.
New: Khi ở trạng thái này,
Thread vẫn chưa bắt đầu thực
thi code ở bên trong nó

Runnable/Ready: Trạng
thái này có được sau khi
sử dụng phương thức
start(). Block/Sleeping/ Waiting:
Thread sẽ rơi vào trạng
thái block nếu một trong
các action sau đây xảy ra:
Dead: Thread sẽ rơi vào trạng (*)
thái dead với 1 trong 2 lý do
sau:
- Thực thi xong phương
thức run()
- Uncaught, stop()
Running

(*) - Sleep()
- Thread gọi một operation mà nó đang bị blocking trên
Input/Output.
- Thread cố gắng giành lấy khóa(lock) trong khi khóa này đang
được nắm giữ bởi một Thread khác.
- Thread đang đợi một điều kiện nào đó để thực thi.
Multithreading
 Multithreading là một mô hình xử lý chương trình cho phép nhiều thread được
tạo ra trong một process, các thread chạy độc lập và chia sẻ cùng nhau nguồn tài
nguyên của process.

 Vì vậy khi một process bị hủy, tất cả các thread tương ứng cũng dừng theo.

 Ví dụ về web browser: sẽ có một thread xử lý UI, một thread khác sẽ chạy song
song để lấy dữ liệu in ra màn hình.
 Java code:

Multithreading
Multithreading

 Ưu điểm:

 Multithreading sẽ giảm thời gian xử lý một process đáng kể so với


việc xử lý tuần tự và tận dụng tối đa khả năng của CPU.

 Nhanh hơn so với multiprocessing vì việc tạo ra một process tốn


nhiều thời gian hơn tạo ra một thread.

 Nhược điểm: Khó khăn trong code, debug, test, code porting.
AsyncTask

AsyncTask là phương tiện khác để 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
 Trong AsyncTask<Params, Progress, Result> 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 doInBackground

AsyncTask  Progress: 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.
AsyncTask
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 xả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.

=> Trong 4 hàm trên thì hàm doInBackground() bắt buộc phải tồn tại, còn các hàm khác có thể
khuyết, nhưng các bạn nên sử dụng đầy đủ 4 hàm đã nêu.
AsyncTask
AsyncTask
Demo:

 Layout
AsyncTask
Demo:

 Tạo class MyAsyncTask


kế thừa AsyncTask
AsyncTask
Demo:
 Tạo class MyAsyncTask
kế thừa AsyncTask
AsyncTask
Demo:
 MainActivity.java
AsyncTask
Demo:
 MainActivity.java

You might also like