ANDROID
1.7.13. Activity & Intend
1.7.2.1. Activity
Activity mt thành chnh ca mtng dng Android, được dng để hin thmt
n hnh nm bt cc hotđộng xy ra trn màn hnh đú. Khi làm vic vi Activity
cn nm btđược mt skiến thc cơbn nhưsau:
v Chu ksng ca mt Activity
(Xem chu k ng dng ca Android mc 1.6)
v To menu dialog
v Khiđộng mt Activity
Để khiđộng mt Activity ta sdng Intend stm hiu khơnphn b. Tuy nhin,
trong phn này ti shướng dn cch chuyn gia cc Intend theo 2 loi:
Khai bo khng tường minh:
Cung cp chnh xc thng tin ca activity cn gi bng cch truyn vào tn class ca
Activity đú
VD: TActivity A mun chuyn qua Activity B ta khai bo mt Intend trong Activity A:
Intend intend = new Intend(this, B.class);
startActivity(intend);
Khai bo khng tưng minh
Cung cp cc thao tc cn làm gvi loi dliu nào, hthng stmđến activity
tương ng để khiđộng.
VD: Để xem thng tin mt contact o đú trong Activity cang dng Contact trong
Android ta ch đến dliu contact ch đến Activity View contact nhưsau:
Intent i = new Intent();
i.setAction(Intent.ACTION_VIEW);
i.setData(Uri.withAppendedPath(
android.provider.Contacts.People.CONTENT_URI, "1));
startActivity(i);
v Tnh lin lc gia 2 activity
Khi chuyn sang mt Activity khc ta thgi km dliu trong intend đú nhưsau:
intend.putExtra(“key1”, “value1”);
intend.putExtra(“key2”, 23);
Bn pha Activity được khiđộng hay được chuynđế n, thly dliuđược gi như
sau:
getIntend().getExtra().getString(“key1”);
getIntend().getExtra().getInt(“key2”);
v Task
Android mt h điu hành đa tiến trnh. Khi lp trnh trn nn tng Android th
tiến trnh là mt vnđề cn phiđược chý nhiu nht. Mc dAndroid htr đa tiến
trnh nhưng trn mt thiết bdi động vi cu hnh thp chng ta qulm dng tiến
trnh thsrt tn bxlý điu này cũng đồng nghĩa vi vic bnđang biếnng dng
ca bn trthành mt thphn mm tiu th đin năng.
1.7.2.2. Intent
v Khi nim Intend:
mt cu trc dliu mtcch thc, đối tượng thc hin ca mt Activity
cu ni gia cc Activity: ng dng Android thường bao gm nhiu Activity, mi
Activity hotđộng độc lp vi nhau thc hin nhng cng vic khc nhau. Intent
chnh ngườiđưa thư, gip cc Activity thtriu gi cũng nhưtruyn cc d
liu cn thiết ti mt Activity khc. Điu này cũng ging nhưvic di chuyn qua li
gia cc Forms trong lp trnh Windows Form.
Hnh 1-19 Truyn dliu gia 2 Activity
v Dliu ca Intend:
Intent vcơbn mt cu trc dliu, được mttrong lp
android.content.Intent
Cc thuc tnh ca mtđối tượng Intend:
Hnh 1-20 Cc thuc tnh ca Intend
Cc Action đượcđịnh nghĩa sn:
Dướiđơy nhng hng String đú đượcđịnh nghĩa sn trong lp Intent. Đi
km vi cc Activity hay Application được xơy dng sn s được triu gi
mi khi Intent tương ng đưc gi (tt nhin khi được cung cpđỳng data). VD:
Gi ti mt s đin thoi:
Intent dialIntent =
new Intent(Intent.ACTION_DIAL, Uri.parse("tel:123456"));
startActivity(dialIntent);
Hnh 1-21 Cc Action đú đượcđịnh nghĩa sn trong Intend
1.7.14. CONTENT PROVIDER URI
Trong hthng Android tt ccc tài nguyn ngưContact, SMS,… đềuđược lưu tr
vào CSDL SQLite ca hthng. Cũng nhưcc CSDL khc, CSDL hthng Android
sdng để lưu trthng tin cũng cho php chng ta truy vn dliu nhưmt CSDL
MSSQL thng thường. Tuy nhin, trong hthng đú chng ta khng cn phi thao tc
bng lnh SQL nhiuđể truy xut dliu mà thay vào đú Android đú được trang bmt
API cho php người lp trnh cthdng truy xut dliu. Đú gi ContentProvider.
ContentProvider cung cp cho chng ta mtđối tượng con trgip chng ta cú thd
dàng lyđược bt cdliu lưu trnào chcn cung cp mtđường dnđỳng đến dliu
đú.Đường dn này cũnđược gi Uri.
To mt Uri:
Uri uri = Uri.parse(“content://com.android.contacts/contacts”);
Cu trc gm 4 phn chnh nhưsau:
Phn A: Đơy tin tchra dliuđượcđiu khin bi Content Provider khng
bao githay đổi.
Phn B: Phn này ch đến nơi lưu trdliu. Cũng ging nhưcu trc ca mt s đin
thoi thci này cthhnh dung nnhư quc gia hoc cũng cthcoi nnhưlà
tn ca CSDL.
Phn C: Phn này chra loi dliu. Chng hn như, dliu contact, dliu SMS,
Phn này thcoi như tn ca mt table
Phn D: Phn này ch đếnđỳng vtrca dliu, thcoi phn này như ID ca row
trong table hoc mt dliu nào đú dng để truy vn.
VD: Uri ch đến contact th0 trong CSDL
content://contacts/people/0
Để ththc hin truy vnđến vng dliuđưc chra bi mt Uri ta cn 2 đối
tượng con tr được cung cp bi Activity đú là: Cursor ContentResolver.
Để lyđược 2 đối tượng này thtrong Activity sdng hàm
getContentResolver() trv đối tượng ContentResolver.
getContentResolver().query(Uri uri); trv đối tượng Cursor.
1.7.15. Background Service
Service 1 trong 4 thành phn chnh trong 1 ng dng Android (Activity, Service,
BroadcastReceiver, ContentProvider) thành phn này chy trong hu trường và làm nhng
cng vic khng cn ti giao din nhưchơi nhc, download, xltnh ton…
Mt Service th được sdng theo 2 cch:
th được btđầu được cho php hotđộng cho đến khi mt người nào đú
dng li hoc tngt. chế độ y, được btđầu bng cch gi
Context.startService() và dng bng lnh Context.stopService(). thtngt
bng lnh Service.stopSelf() hoc Service.stopSelfResult(). Chcn mt lnh
stopService() để ngng Service li cho dlnh startService() được gi ra bao nhiu
ln.
Service th được vn hành theo như đú được lp trnh vic sdng mt Interface
n định nghĩa. Cc người dng thiết lp mtđường truyn tiđối tượng Service
sdng đường kết núi đú để thơm nhp vào Service. Kết ni này được thiết lp
bng cch gi lnh Context.bindService() đượcđúng li bng cch gi lnh
Context.unbindService(). Nhiu người dng thkết ni ti cng mt thiết b.
Nếu Service vn chưađược khi chy, lnh bindService() thty ý khi chy nú.
Hai chế độ này thkhng tch bit toàn b. Bn cthkết ni vi mt Service
n đú được btđầu vi lnh startService(). Vd, mt Service nghe nhcchế độ
nn cú th được btđầu bng cch gi lnh startService() cng vi mtđối tượng
Intent định dng đượcơm nhcđể chơi. Chsau đú, th khi người sdng
mun kim sot trnh chơi nhc hoc biết thm thng tin vbài ht hin tiđang
chơi, thscmt Activity to lp mtđường truyn ti Service bng cch gi
bindService(). Trong trường hp nhưthếnày, stopService() skhng thc sngng
Service cho đến khi lin kết cui cng đượcđúng li.
Ging nhưmt Activity, mt Service cũng cc phương thc chu kthi gian bn
thcài đặtđể kim sot nhng sthay đổi trong trng thi ca nú. Service ch 3
phương thcđược giđến trong chu trnh sng là:
void onCreate()
void onStart(Intent intent)
void onDestroy()
Bng vic thc hin nhng phương thc này, bn thgim st 2 vũng lp ca chu
kthi gian ca mi Service Entire lifetime ca mt Service din ra gia thi gian
onCreate() được gi ra thi gian mà onDestroy() trli. Ging nhưmt Activity, mt
Service li tiết hành cài đặt ban đầuonCreate(), gii phúng tt ccc tài nguyn cũn
lionDestroy() Vd, mt Service pht li nhc cthto ra mt lung btđầu chơi
nhc onCreate(),và sau đú lung chơi nhc sdng lionCreate(), Active lifetime ca
mt Service btđầu bng mt lnh ti onStart(). Đơylà phương thcđược chuyn giao đối
tượng Intent mà đú được thng qua để ti startService() Service ơm nhc sm đối tượng
Intent để quyếtđịnh xem schơi loi nhc nào btđầu pht nhc. Khng callback
tương đương nào cho thiđim Service ngng li khng phương thc onStop(). Cc
phương thc onCreate() onDestroy() được gi cho tt ccc Service dchng được
btđầu bng Context.startService() hoc Context.bindService() hay khng. Tuy nhin,
onStart() ch được gi ra đối vi cc Service btđầu bng startService(). Nếu mt Service
cho php nhng Service khc kết ni vi thscthm cc phương thc callback
dành cho Service đú để thc hin.
IBinder onBind(Intent intent)
boolean onUnbind(Intent intent)
void onRebind(Intent intent)
Hàm callback onBind() thng qua đối tượng Intent đú đựoc truynđến bindService
onUnbind() được chuyn giao đối tượng đú được chuynđến. Nếu Service đang được
ch định (binding), onBind() quay trli knh thng tin người dng sdng để tương
tc vi Service. Phương thc onUnbind() thyu cu onRebind() được gi nếu mt
người dng kết ni vi Service.