Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (355.14 KB, 22 trang )
H ệ th ống phân c ấp
Th ứ bậc c ủa process trong Android được chia thành 5 c ấp theo 5 m ức độ
quan trọng t ừ cao đến th ấp:
Foreground process (t ạm dịch: ti ến trình n ổi b ật) : Đây chính là những
process dùng để ch ạy ứng d ụng (app) b ạn đang dùng. Nh ững process
khác c ũng có th ể được xem là foreground khi chúng có liên h ệ tr ức ti ếp v ới
process “x ử lý” app đang ch ạy. T ại m ột th ời đi ểm c ũng ch ỉ có vài
foreground process mà thơi.
Visible process (t ạm dịch: ti ến trình nhìn th ấy được) : Visible process không
liên quan đến app đang ch ạy nh ưng có tác động đến nh ững gì th ể hi ện
trên màn hình. Ví d ụ, foreground process có tính n ăng “trong su ốt”
(transparent) và nh ững ứng d ụng được hi ển th ị đằng sau chính là visible
process. D ễ th ấy nh ất là khi cài các theme h ỗ tr ợ kh ả n ăng “làm m ờ” ứng
dụng hoặc “ghim” ứng dụng lên màn hình.
Service process (t ạm dịch: ti ến trình d ịch v ụ) : Tiến trình d ạng này khơng
liên quan đến b ất kì ứng d ụng c ả đang ch ạy và “d ưới” đang ch ạy nào.
Chúng th ực hi ện công vi ệc m ột cách âm th ầm nh ư ch ơi nh ạc hay t ải t ập
tin. Ví d ụ b ạn đang nghe nh ạc và mu ốn chuy ển sang ch ơi game, khi b ạn
m ở game c ũng là lúc process phát nh ạc tr ở thành service process, v ẫn ti ếp
tục chơi nhạc khi bạn làm việc khác.
Background process (t ạm dịch: ti ến trình n ền) : Background process không
xu ất hi ện, c ũng không th ực hi ện vai trò d ễ nh ận ra (nh ư ch ơi nh ạc), chúng
không ảnh h ưởng đến tr ải nghi ệm s ử d ụng. T ại m ột th ời đi ểm, có r ất nhi ều
background process đang ch ạy và b ạn có th ể xem chúng là nh ững ứng
d ụng đang “t ạm d ừng”. Background process v ẫn s ử d ụng RAM, cho phép
b ạn nhanh chóng chuy ển đổi tr ở l ại nh ưng không s ử d ụng thêm tài nguyên
phần c ứng nào khác. Ví d ụ khi dùng Chrome và b ấm phím Home, Chrome
trở thành background process và khi mở lại Chrome, nó c ũng l ập t ức m ở
lại tab đang xem.
Empty process (t ạm dịch: ti ến trình r ỗng) : Tiến trình này khơng còn tiêu tốn
tài ngun nào n ữa. Chúng đượ c gi ữ l ại nh ằm m ục đích t ạo b ộ nh ớ đệm
cho lần khởi động sau và hệ thống có thể tùy ý lo ại b ỏ chúng.
Service process đang phát nhạc
Một ví d ụ tổng quát s ẽ giúp b ạn hình dung d ễ h ơn: Angry Birds là
foreground process khi b ạn đang “b ắn heo”. Ng ừng ch ơi và m ở Gmail,
Angry Birds trở thành background process và Gmail thành foreground
process. Kiểm tra xong email và trở lại Angry Birds, trò ch ơi hi ện l ại ngay
màn bạn đang chơi. Trong khoảng thời gian đó, Angry Birds được duy trì
trên RAM, bộ nh ớ đệm và ln trong tình tr ạng s ẵn sàng khơi ph ục.
Tính năng t ự động quản lý ti ến trình c ủa Android
Android có khả năng quản lý process một cách t ự động, do đó b ạn khơng
cần cài đặt bất kì ứng dụng “quản lý ứng dụng” nào.
Khi cần nhiều tài nguyên, Android tự động xóa các process ít quan tr ọng
nhất, bắt đầu t ừ empty và background process. Khi c ần nhi ều tài nguyên
hơn nữa như lúc chơi game nặng, hệ thống t ự động loại bỏ thêm service
process. Chơi game n ặng, nh ạc c ủa b ạn s ẽ t ự t ắt, t ập tin t ải v ề t ự động
dừng.
Trong đa số trường hợp, bạn không cần lo về lượng RAM c ủa máy. Nhi ều
ng ười lo rằng máy mình chỉ còn 1 ít RAM và “ đổ th ừa” cho h ệ th ống là
không đúng. Cơ chế quản lý thông minh của Android t ự động l ưu gi ữ các
ứng dụng và dữ liệu khác trên RAM cho bạn trải nghi ệm t ốt nhất có th ể.
Dĩ nhiên, sự linh hoạt cũng có điểm yếu. N ếu một ứng d ụng được l ập trình
khơng tốt, một service process có thể tiếp tục s ử dụng tài nguyên CPU và
RAM khiến máy nóng lên và tụt pin nhanh chóng. V ề m ặt k ĩ thu ật, tình
trạng này được gọi là “memory leaked” (rò rỉ bộ nhớ).
Một số ứng dụng được lập trình đặt icon trên thanh thơng báo notification
nh ư avast!, TrustGo Antivirus hay… Advanced Task Killer. N ếu b ạn c ố t ắt
icon này, ứng d ụng “ch ống l ại”. B ằng cách luôn gi ữ icon trên thanh thơng
báo, chúng cho biết mình khơng phải là background process để kh ỏi b ị h ệ
thống loại bỏ khi cần tài nguyên.
avast! “chống lệnh” t ắt icon
Ứng d ụng Android có th ể t ự đáp ứng các s ự ki ện
Các lập trình viên có thể cho ứng dụng c ủa mình quy ền t ự kh ởi động cùng
hệ thống hay ch ạy m ột dịch v ụ ng ầm. Ứng d ụng có th ể t ự kh ởi động b ởi
nhiều loại “sự kiện” khác nhau: khi m ở máy, khi ch ụp ảnh, khi thay đổi
mạng. Khả năng này cho phép ứng dụng làm việc mà không c ần tiêu t ốn
tài nguyên “chạy nền” (background process). Ví d ụ Facebook Messenger
biết khi nào b ạn m ở wifi để t ự nh ận tin nh ắn.
“Quyền đặc biệt” của ứng dụng
Có thể nói, đây là cách trình bày đơn gi ản và d ễ hi ểu nh ất cho vi ệc Androi
quản lí tiến trình như thế nào dành cho các đối tượng là nh ững người
không chuyên sâu v ề m ảng ki ến th ức này mà v ẫn mu ốn n ắm rõ cách v ận
hành của hệ điều hành.
Còn chúng ta, nh ững sinh viên đang h ọc
chuyên sâu v ề Cơng ngh ệ thơng tin thì vi ệc
Android qu ản lí các ti ến trình có th ể hi ểu theo
m ột cách tr ừu t ượng nh ư sau:
Theo mặc định, tất cả thành phần của cùng ứng dụng sẽ chạy trong cùng
tiến trình và hầu hết các ứng dụng sẽ không thay đổi điều này.
Android có th ể quy ết định t ắt m ột ti ến trình t ại m ột th ời đi ểm nào đó, khi bơ ̣
nhớ thấp và theo u cầu của các tiến trình khác đang ph ục v ụ ng ười dùng
tức thì h ơn. Các thành ph ần ứng d ụng đang ch ạy trong ti ến trình b ị t ắt b ỏ
thì sau đó sẽ bị hủy. Tiến trình đượ c khởi độ ng lại cho những thành ph ần
đó khi lại có việc cho chúng thực hiện.
Khi quy ết đị nh b ỏ nh ững ti ến trình nào, h ệ th ống Android s ẽ cân nh ắc t ầm
quan trọng t ươ ng đố i so v ới ng ườ i dùng. Ví d ụ, h ệ th ống s ẵn sàng h ơn khi
tắt một ti ến trình l ưu tr ữ các ho ạt độ ng khơng còn hi ển th ị trên màn hình,
so với một tiến trình lưu trữ các hoạt độ ng đang hi ển thị. Vì th ế, quy ết đị nh
về việc có chấm dứt một tiến trình hay khơng phụ thuộc vào tr ạng thái c ủa
các thành ph ần đang ch ạy trong ti ến trình đó. Các quy t ắc đượ c s ử d ụng
để quyết định sẽ chấm dứt tiến trình nào được trình bày ở bên d ưới.
Vòng đờ i ti ến trình
Hệ thống Android c ố g ắng duy trì m ột ti ến trình ứng d ụng lâu nh ất có th ể,
nhưng cuối cùng thì nó cũng cần loại bỏ các ti ến trình c ũ để lấy l ại bô ̣ nh ớ
cho các tiến trình mới hoặc quan trọng hơn. Để xác đị nh gi ữ l ại nh ững ti ến
trình nào và loại bỏ những tiến trình nào, hệ thống sẽ đặ t t ừng ti ến trình
vào một "phân cấp tầm quan trọng" dựa trên những thành ph ần đang ch ạy
trong tiến trình và trạng thái của những thành phần đó. Nh ững ti ến trình có
tầm quan trọng thấp nhất bị loại bỏ trướ c, rồi đế n những tiến trình có t ầm
quan trọng th ấp th ứ hai, và c ứ th ế ti ếp t ục, mi ễn là còn c ần thi ết để khơi
phục tài nguyên của hệ thống.
Có năm cấp trong phân cấp tầm quan trọng. Danh sách sau trình bày các
loại tiến trình khác nhau theo thứ tự tầm quan trọng (ti ến trình th ứ nh ất
là quan trọng nhất và đượ c tắt b ỏ sau cùng):
1.
Ti ến trình ti ền c ảnh
M ột ti ến trình đượ c yêu c ầu cho vi ệc mà ng ười dùng đang th ực hi ện.
M ột ti ến trình đượ c coi là đang trong ti ền c ảnh n ếu b ất k ỳ đi ều nào
sau đây là đúng:
o
Nó l ưu tr ữ m ột Activity mà ng ười dùng đang t ương tác v ới
(ph ương pháp c ủa Activity, onResume(), đã đượ c g ọi).
o
Nó l ưu tr ữ m ột Service g ắn k ết v ới ho ạt độ ng mà ng ười dùng
đang t ương tác v ới.
o
Nó l ưu tr ữ m ột Service đang ch ạy "trong ti ền c ảnh"—mà d ịch
v ụ đã g ọi startForeground().
o
Nó l ưu tr ữ m ột Service mà đang th ực thi m ột trong các l ệnh g ọi
l ại c ủa vòng đờ i c ủa nó (onCreate(), onStart(),
ho ặc onDestroy()).
o
Nó l ưu tr ữ m ột BroadcastReceiver mà đang th ực thi ph ương
pháp onReceive() c ủa nó.
Nhìn chung, t ại b ất k ỳ th ời đi ểm xác đị nh nào c ũng ch ỉ t ồn t ại m ột vài
ti ến trình ti ền c ảnh. Chúng ch ỉ b ị t ắt b ỏ nh ư m ột gi ải pháp cu ối cùng
—n ếu bộ nh ớ quá th ấp t ới m ức chúng đề u không th ể ti ếp t ục ch ạy
được. Nhìn chung, t ại th ời đi ểm đó, thi ết b ị đã đạt t ới tr ạng thái phân
trang b ộ nh ớ, vì th ế vi ệc t ắt b ỏ m ột s ố ti ến trình ti ền c ảnh là b ắt bu ộc
để đảm b ảo giao di ện ng ười dùng có ph ản h ồi.
2.
Ti ến trình hi ển th ị
M ột ti ến trình mà khơng có b ất k ỳ thành ph ần ti ền c ảnh nào, nh ưng
v ẫn có th ể ảnh h ưởng t ới n ội dung mà ng ười dùng nhìn th ấy trên
màn hình. M ột ti ến trình đượ c coi là hi ển th ị n ếu m ột trong hai đi ều
ki ện sau là đúng:
o
Nó l ưu tr ữ m ột Activity mà không n ằm trong ti ền c ảnh, nh ưng
v ẫn hi ển th ị v ới ng ười dùng (ph ương pháp onPause() c ủa nó
đã được g ọi). Đi ều này có th ể x ảy ra, ví d ụ, n ếu ho ạt động ti ền
c ảnh đã b ắt đầ u m ột h ộp tho ại, nó cho phép ho ạt độ ng tr ước
được nhìn th ấy phía sau nó.
o
Nó l ưu tr ữ m ột Service được g ắn k ết v ới m ột ho ạt động hi ển th ị
(ho ặc ti ền c ảnh).
M ột ti ến trình ti ền c ảnh đượ c coi là c ực k ỳ quan tr ọng và s ẽ không b ị
t ắt b ỏ tr ừ khi làm v ậy là b ắt bu ộc để gi ữ cho t ất c ả ti ến trình ti ền c ảnh
chạy.
3.
Ti ến trình d ịch v ụ
M ột ti ến trình mà đang ch ạy m ột d ịch v ụ đã đượ c b ắt đầ u b ằng
phương pháp startService() và không r ơi vào m ột trong hai th ể lo ại
cao h ơn. M ặc dù ti ến trình d ịch v ụ không tr ực ti ếp g ắn v ới b ất k ỳ th ứ
gì mà ng ười dùng th ấy, chúng th ường đang làm nh ững vi ệc mà
ng ười dùng quan tâm đế n (ch ẳng h ạn nh ư phát nh ạc ch ạy ng ầm
ho ặc t ải xu ống d ữ li ệu trên m ạng), vì th ế h ệ th ống v ẫn gi ữ chúng
ch ạy tr ừ khi khơng có đủ b ộ nh ớ để duy trì chúng cùng v ới t ất c ả ti ến
trình ti ền c ảnh và hi ển th ị.
4.
Ti ến trình n ền
M ột ti ến trình l ưu tr ữ m ột ho ạt độ ng mà hi ện t ại không hi ển th ị v ới
ng ười dùng (ph ương pháp onStop() c ủa ho ạt độ ng đã đượ c g ọi).
Nh ững ti ến trình này khơng có tác độ ng tr ực ti ếp t ới tr ải nghi ệm
ng ười dùng, và h ệ th ống có th ể b ỏ chúng đi vào b ất c ứ lúc nào để l ấy
l ại b ộ nh ớ cho m ột ti ến trình ti ền c ảnh, hi ển th ị ho ặc d ịch v ụ. Th ường
thì có nhi ều ti ến trình ng ầm đang ch ạy, vì th ế chúng đượ c gi ữ trong
m ột danh sách LRU (ít s ử d ụng g ần đây nh ất) để đả m b ảo r ằng ti ến
trình v ới ho ạt độ ng mà ng ười dùng nhìn th ấy g ần đây nh ất là ti ến
trình cu ối cùng s ẽ b ị t ắt b ỏ. N ếu m ột ho ạt độ ng tri ển khai các ph ương
pháp vòng đờ i c ủa nó đúng cách, và l ưu tr ạng thái hi ện t ại c ủa nó,
vi ệc t ắt b ỏ ti ến trình c ủa ho ạt độ ng đó s ẽ khơng có ảnh h ưởng có th ể
th ấy đượ c t ới tr ải nghi ệm ng ười dùng, vì khi ng ười dùng đi ều h ướng
l ại ho ạt độ ng đó, ho ạt độ ng s ẽ khôi ph ục t ất c ả tr ạng thái hi ển th ị c ủa
nó. Xem tài li ệu Ho ạt độ ng để bi ết thông tin v ề vi ệc l ưu và khôi ph ục
trạng thái.
5.
Ti ến trình tr ống
M ột ti ến trình mà khơng gi ữ b ất k ỳ thành ph ần ứng d ụng hi ện ho ạt
nào. Lý do duy nh ất để gi ữ cho ki ểu ti ến trình này ho ạt độ ng đó là
nh ằm m ục đích l ưu b ộ nh ớ ẩn, để c ải thi ện th ời gian kh ởi độ ng vào
l ần t ới khi thành ph ần c ần ch ạy trong nó. H ệ th ống th ường t ắt b ỏ
nh ững ti ến trình này để cân b ằng tài nguyên t ổng th ể c ủa h ệ th ống
gi ữa các b ộ đệ m ẩn ti ến trình và b ộ đệ m ẩn nhân liên quan.
Android x ếp h ạng m ột ti ến trình ở m ức cao nh ất mà nó có th ể, d ựa vào
t ầm quan tr ọng c ủa các thành ph ần đang ho ạt độ ng trong ti ến trình đó. Ví
d ụ, n ếu m ột ti ến trình l ưu gi ữ m ột d ịch v ụ và ho ạt độ ng hi ển th ị, ti ến trình
đó s ẽ được x ếp h ạng là ti ến trình hi ển th ị ch ứ khơng ph ải ti ến trình d ịch v ụ.
Ngồi ra, x ếp h ạng c ủa m ột ti ến trình có th ể t ăng b ởi các ti ến trình khác
ph ụ thu ộc vào nó—m ột ti ến trình mà đang ph ục v ụ m ột ti ến trình khác
khơng th ể b ị x ếp th ấp h ơn ti ến trình mà nó đang ph ục v ụ. Ví d ụ, n ếu m ột
trình cung c ấp n ội dung trong ti ến trình A đang ph ục v ụ m ột máy khách
trong ti ến trình B, ho ặc n ếu m ột d ịch v ụ trong ti ến trình A đượ c g ắn k ết v ới
m ột thành ph ần trong ti ến trình B, ít nh ất ti ến trình A s ẽ ln đượ c coi là
quan tr ọng nh ư ti ến trình B.
Do m ột ti ến trình đang ch ạy m ột d ịch v ụ đượ c x ếp h ạng cao h ơn m ột ti ến
trình có các ho ạt độ ng n ền, m ột ho ạt độ ng mà kh ởi độ ng m ột thao tác
nh ấp gi ữ có th ể làm t ốt vi ệc kh ởi độ ng m ột dịch v ụ cho thao tác đó, thay vì
ch ỉ t ạo m ột lu ồng trình th ực hi ện—nh ất là khi thao tác đó s ẽ có th ể di ễn ra
lâu h ơn ho ạt độ ng. Ví d ụ, m ột ho ạt độ ng mà đang t ải m ột ảnh lên m ột
trang web nên b ắt đầ u m ột d ịch v ụ để th ực hi ện vi ệc t ải lên sao cho vi ệc t ải
lên có th ể ti ếp t ục ch ạy ng ầm ngay c ả khi ng ười dùng r ời kh ỏi ho ạt độ ng.
Vi ệc s ử d ụng m ột d ịch v ụ s ẽ b ảo đả m r ằng thao tác ít nh ất s ẽ có m ức ưu
tiên nh ư "ti ến trình d ịch v ụ", khơng ph ụ thu ộc vào đi ều x ảy ra v ới ho ạt
động. Đây c ũng chính là lý do hàm nh ận qu ảng bá nên s ử d ụng d ịch v ụ
thay vì ch ỉ đư a các thao tác t ốn th ời gian vào m ột lu ồng.
2.Qu ản lý b ộ nh ớ (memory management):
•
Theo vi.wikipedia.org thì Qu ản lý b ộ nh ớ (ti ếng Anh: memory
management) là vi ệc đi ều hành b ộ nh ớ máy tính ở c ấp b ậc h ệ th ống.
M ục đích quan tr ọng c ủa vi ệc qu ản lý b ộ nh ớ là cung c ấp nh ững
cách th ức để c ấp phát độ ng các ô nh ớ cho ch ương trình khi đượ c
yêu c ầu và gi ải phóng các ơ nh ớ đó khi khơng c ần dùng n ữa. Đây là
vi ệc r ất quan tr ọng đối v ới b ất k ỳ h ệ th ống máy tính cao c ấp nào vì
s ẽ có nhi ều cơng vi ệc được ti ến hành ở m ọi th ời đi ểm.
• Trong vi ệc qu ản lý b ộ nh ớ ấy, chúng ta có 2 lo ại b ộ nh ớ c ần qu ản lí,
đó là:
- Quản lý bộ nhớ thật.
- Quản lý bộ nhớ ảo:
Quản lý bộ nhớ ảo phân trang.
Quản lý bộ nhớ ảo phân đo ạn.
Quản lý bộ nhớ ảo phân trang và phân đo ạn.
Quản lý bộ nhớ của CPU Intel:
Với mục tiêu phải tương thích ng ược với các CPU đời c ũ
hơn, các CPU 80x86 (x>=3) cung c ấp 3 c ơ ch ế qu ản lý b ộ
nhớ :
1. real mode : đã có trong CPU 8088, CPU đượ c dùng để
xây dựng máy IBM PC đầu tiên. Đây là c ơ ch ế qu ản lý b ộ
nhớ thật dùng kỹ thuật phân đoạn (segmentation).
2. protected mode : đã có trong CPU 80286. Đây là c ơ ch ế
quản lý bộ nhớ ảo dùng kỹ thuật phân đoạn (segmentation).
3. 386 enchanced mode : mới thêm vào cho các CPU từ
80386 tr ở lên. Đây là c ơ ch ế qu ản lý b ộ nh ớ t ổng h ợp v ừa
phân đoạn vừa phân trang.
Chúng ta đã khái quát xong vi ệc Qu ản lý b ộ
nh ớ trong H ệ Đi ều Hành nói chung; V ậy v ới
H ệ Đi ều Hành riêng bi ệt nh ư Android thì
vi ệc qu ản lý b ộ nh ớ di ễn ra nh ư th ế nào?
Qu ản lý b ộ nh ớ c ủa ứng d ụng trong Android
Performance, một thứ vô cùng quan trọng đối với một ứng dụng trong
Android, ảnh hưởng trực tiếp đến cảm quan ng ười dùng, đặc biệt v ới các