FIT2081 Lecture Notes - Lecture 3: Asteroid Family, Asp.Net, Master Sergeant
!"#$%$#&'($)*"&"+*,
-#.#*/
012*321456
7
8.2#$.++&'9$66*5
7
04++&'9$66*5
7
:*/#21&*6
7
($)*"&"+*
;'"9$+6'1)'!"#$%$#&'"+.//<'=9$"9'9./'"1>&'1)'!(('+$)*"&"+*' ".++?."@/
A.++?."@/,
onCreate()
setContentView
B*#/'+.&14#/')21C'/&/#*C
§
D5$#$.+$/*/'*+*C*5#/
§
○
→
onStart()
super.onStart();
○
onRestoreInstanceState();
D)'5**6'#1'/.%*E2*/#12*'."#$%$#&'$5/#.5"*'/#.#*
§
○
→
onResume()
super.onResume();
○
!"#$%$#&'?*"1C*/'%$/$?+*'$5')12*321456
○
→
onPause()
onSaveInstanceState();
D)'5**6'#1'/.%*E2*/#12*'."#$%$#&'$5/#.5"*'/#.#*
§
○
!"#$%$#&'51'+153*2'%$/$?+*
○
→
onStop()
!"#$%$#&')$5$/9$53E?*$53'6*/#21&*6'?&'#9*'/&/#*C
○
→
onDestroy()
F*+*./*/'.++'2*/142"*/'"422*5#+&'1""4>$*6'?&'#9*'."#$%$#&
○
!"#$%$#&'/94#/'61=5
○
→
GH."@I'-#."@
;'91='."#$%$#*/'.2*'.22.53*6'G$5'#9*'126*2'$5'=9$"9'*."9'."#$%$#&'$/'1>*5*6I
J./@';'.'"1++*"#$15'1)'."#$%$#$*/' #9.#'4/*2/'$5#*2."#'=$#9'=9*5'>*2)12C$53'
.'"*2#.$5'K1?
7
L*='."#$%$#&'>4/9*6'15'#1>'1)'/#."@'.56'#.@*/')1"4/
82*%$14/'."#$%$#&'2*C.$5/'$5'/#."@<'?4#'$/'/#1>>*6.M
-&/#*C'2*#.$5/'"422*5#'ND'/#.#*?M
OM
J1>'."#$%$#&'>1>>*6'1))'#1'2*%*.+'#9*'>2*%$14/'15*
N5#$+'4/*2'2*#425/'#1'91C*'/"2**5E=#%'."#$%$#&'=./'2455$53'=9*5'
#9*'#./@'?*3.5
.M
P9*5'.++'."#$%$#$*/'.2*'2*C1%*6<'#./@'51'+153*2'*Q$/#/?M
RM
S'".5'$5"+46*'."#$%$#$*/')21C'/*%*2.+'6$))*2*5#'.>>/'G$5#*5#/'".5'31'."21//'.>>/I
S'C4+#$>+*'#./@'?."@'/#."@/'".5'*Q$/#'$5'?."@321456'.#'15"*
84##$53'>915*'#1'/+**>'TTTU'>4/9*/'?+.5@'."#$%$#&'15#1'/#."@7
-4>*2
;'./@$53'>.2*5#'"+.//'#1'*Q*"4#*'
$#/'1=5'+$)*/#&+*'".++?."@
D/'.'/#.56.26'=.&'#1'
?*3$5'+$)*"&"+*'".++?."@
7
D)'6*+*#*6<'15+&'"9$+6V/'%*2'
$5%1@*6
7
D5/#.5"*'/#.#*';'%.+4*/'1)'.++'6.#.'G%$*=<'515T%$*=I
!"#$%$#&'$5/#.5"*'6.#.
!"#$%$#&'%$*='6.#.
;'#9*'/#.#*'1)'.++'W$*=/'$5'!"#$%$#&V/'+.&14#
○
7
!"#$%$#&'515T%$*='6.#.
;'!"#$%$#&'$5/#.5"*'%.2$.?+*/
○
7
D5%1+%*/'=2$#$53'#1'.56'2*.6$53')21C'.'6*%$"*V/'%1+.#$+*'C*C12&7
X/.%$53E2*/#12$53'."#$%$#&'$5/#.5"*'/#.#*'GY'C*#916/I
onSaveInstanceState(Bundle outState)
Z4/#'".++'/4>*2'#1'+*#'!5621$6'/.%*'WT/#.#*
§
Z4/#'C.54.++&'"16*'#1'/.%*'LWT/#.#*'$5'H456+*
§
XX'P15V#'$5%1@*'=9*5'4/*2'$56$".#*/'615*'=$#9'!"#$%$#&'G$M*M'
!"#$%$#&'".5'?*'6*/#21&*6I
§
○
onCreate(Bundle savedInstanceState)
Z4/#'".++'/4>*2'#1'+*#'!5621$6'2*/#12*'WT/#.#*
§
Z4/#'C.54.++&'"16*'#1'2*/#12*'LWT/#.#*')21C'H456+*
A9*"@'$)'H456+*'$/'515T54++
-**/'$)'#9*2*'$/'.5'*Q$/#$53'/#.#*'#9.#'5**6/'/#12$53<'
1#9*2=$/*'$5$#$.+$/*' #9*'/#.#*'=E'/*5/$?+*'6*).4+#'
%.+4*/
®
[
§
○
onRestoreInstanceState
○
(Bundle savedInstanceState)
Z4/#'".++'/4>*2'#1'+*#'!5621$6'2*/#12*'WT/#.#*
§
Z4/#'C.54.++&'"16*'#1'2*/#12*'LWT/#.#*')21C'H456+*
\5+&'".++'$)'H456+*'$/'515T54++
H4#'".5V#'/*#'6*).4+#'%.+4*/'9*2*'45+$@*'
onCreate(Bundle)
®
[
§
Bundle 1?K'
§
;'".>.?+*'1)'/#12$53'@*&E%.+4*'>.$2/
D/'.'"1CC15'>.2.C*#*2'1)'#9*/*'".++?."@/'=9$"9'!5621$6'4/*/'
#1'/.%*E2*/#12*'."#$%$#&V/'%$*=T/#.#*
A.++?."@/'.++'4/*'#9*'/.C*'H456+*'G5.C*'61*/5V#'C.##*2I'
#1'>4/9'.56'2*#2$*%*'6.#.')21C
[
§
A.5'.+/1'?*'4/*6'#1'C.54.++&'/.%*E2*/#12*'."#$%$#&V/'515T%$*='
/#.#*
§
7
!4#1T/.%$53'WT/#.#*
]."9'W$*='C4/#'9.%*,
!'45$^4*'D:
§
saveEnabled = True
§
○
P$++'9.>>*5'$)'!5621$6'$/'#9*'".4/*'1)'#9*'."#$%$#&V/'6*/#24"#$15<'51#'
4/*2'G/&/#*C'@$++')12'2*/142"*/<'6*%$"*'2*12$*5#.#$15<'*#"I
○
7
8*2/$/#*5# 6.#.
;'6.#.'.//1"$.#*6'=$#9'C4+#$>+*'4/*/'1)'#9*'."#$%$#&'/*>.2.#*6'?&'.5&'.C145#'
1)'#$C*
7
->.5/'.5'!"#$%$#&V/'$5/#.5"*/7
Z4/#'>*2/$/#'."21//'.>>'6*/#21&/'./'=*++7
D5%1+%*/'=2$#$53'#1'.56'2*.6$53')21C'.'6*%$"*V/'515T%1+.#$+*'C*C12&7
]%*5#/'#9.#'2*^4$2*'6.#.'>*2/$/#*5"&
!"#$%$#&'>.2#$.++&E)4++&'9$66*5
!"#$%$#&'/#$++'$5'C*C12&<'51'/#.#*'6.#.'+1/#
§
LWT/#.#*'C4/#'?*'"16*6'$5'#1'?*'2*/#12*6
§
8*2/$/#*5#'6.#.'2*C.$5/'$5'+./#'4>6.#*6'/#.#*'GLWTC*C12&I
§
○
!"#$%$#&'6*/#21&*6'4/$53'H."@'?4##15
!5621$6'#.@*/'$#'./'WT/#.#*'51='455*"*//.2&<'/1'$#'6*/#21&/'WT
/#.#*'#3#'=$#9'."#$%$#&
§
8*2/$/#*5#'6.#.'2*C.$5/'$5'+./#'4>6.#*6'/#.#*'GLWTC*C12&I
§
○
:*%$"*'2*"15)$342.#$15
!>>'51#'@$++*6<'?4#'!"#$%$#&'6*/#21&*6'.56'2*+.45"9*6
§
WT/#.#*'/.%*6'$5'H456+*'#1'?*'2*/#12*6'+.#*2
§
LWT/#.#*'C4/#'?*'"16*6'$5'#1'?*'2*/#12*6
§
○
!>>'45$5/#.++*6')21C'6*%$"*
!++'.>>V/'6.#.'$/'+1/#<'$5"+46$53'.5&'>*2/$/#*5#'6.#.'/#12*6'15'LWT
C*C12&
§
○
7
X/.%$53E2*/#12$53'>*2/$/#*5#'."#$%$#&'6.#.
sharedPreferences
012'/#12$53'6.#.'#9.#'".5'?*'.""*//*6'?&'6$))*2*5#'."#$%$#$*/'.56'
>*2/$/#*5#'6.#.
§
-.%* 4/$53'public void saveSharedPreferences()
SharedPreferences sharedPref =
getPreferences(Context.MODE_PRIVATE);
[
SharedPreferences.Editor editor =
sharedPref.edit();
editor.putString
("key1",persistentState);
editor.commit();
§
F*/#12* 4/$53'restoreSharedPreferences()
SharedPreferences sharedPref =
getSharedPreferences(String filename,
int defaultValue);
[
persistentState = sharedPref.getString
("key1",persistentState);
getSharedPreferences 4/*6'=9*5'&14'5**6'#1'
4/*'C4+#$>+*'>2*)*2*5"*/')$+*/'$6*5#$)$*6'?&'5.C*<'
=9$"9'&14'4/*'#9*')$2/#'>.2.C*#*2'#1'$6*5#$)&
®
getPreferences 4/*6'=9*5'&14'15+&'5**6'15*'
>2*)*2*5"*/')$+*')12'&142'."#$%$#&M'-$5"*'#9$/'=$++'?*'
#9*'15+&'>2*)*2*5"*/')$+*')12'&142'!"#$%$#&<'&14'615V#'
/4>>+&'.'5.C*M
®
§
○
7
DC>#'#1'/.%*'>*2/$/#*5#'6.#.'$5'158.4/*GI'_=9$"9'$/'>.2#'1)'+$)*"&"+*'".++?."@/'
/1'$#'=$++'?*'".++*6'$5'*%*2&'/$#4.#$15`'$5/#*.6'1)'
15-.%*D5/#.5"*-#.#*GH456+*I
7
J.?+*'1)'a'/"*5.2$1/
-$C>+*!"#$%$#&($)*"&"+*:*C1-#46*5#
!"##$"%&'()*('+,-+*%+(.-/)*01
2+3/)+*4"4)3*(+5+*4
158.4/*GI'TTTTTTTU'15-#1>GI'TTTTTTTU'
15:*/#21&GI''TTTTTTTU'15A2*.#*GI'TTTTTTTU'15-#.2#GI'TTTTTTTU'15F*/4C*GI
6"%&(+5+*4
15:*/#21&GI'TTTTTTTU'15A2*.#*GI'TTTTTTTU'15-#.2#GI'TTTTTTTU'15F*/4C*GI
789("/+(48+9(.)::+/+*4;
:42$53'2*12$*5#.#$15<'#9*'4/*2'=.5#/'#1'/#.&'15'#9*'!"#$%$#&M
J9*2*)12*'#9*'/&/#*C'5**6/'#1'/.%*'#9*'/#.#*'?*)12*'6*/#21&$53'.56'>2*>.2$53'
)12'#9*'5*='12$*5#.#$15M
J9*'/.%*6'/#.#*'=$++'?*'2*/#12*6'$5'#9*'5*='12$*5#.#$15M
b1=*%*2<'=9*5'#9*'Back ?4##15'$/'"+$"@*6<'#9.#'$56$".#*/'#1'#9*'/&/#*C'#9.#'#9*'
4/*2'51'+153*2'5**6/'#9*'!"#$%$#&M'J9*2*)12*<'#9*2*'$/'51'5**6'#1'/.%*'$#/'/#.#*M
78+*(.3+'("*()*8+/)4+.(%"##$"%&<'('-=+/(+>+%-4+():1
?4()'(*34(35+//)..+*;
D)'".++?."@'$/'51#'".++*6'?&'"9$+6<'=9*5'.5'*%*5#'1""42/<'#9*'"16*'K4C>/'#1'$#/'
>.2*5#'.56'*Q*"4#*/'>.2*5#V/'%*2/$15M
?4()'(35+//)..+*;
D)'".++?."@'$/'".++*6'?&'"9$+6<'=9*5'.5'*%*5#'1""42/<'?1#9'"9$+6'.56'>.2*5#V/'
%*2/$15'$/'*Q*"4#*6M
3*@"5+?*'4"*%+@4"4+("*.(3*2+'43/+?*'4"*%+@4"4+("/+($348(%"##$"%&(A+483.'(
)*8+/)4+.($9(B%4)5)49('-$%#"''+'C(7)48(/+'=+%4(43('"5)*0(5)+D("*.()*'4"*%+(
5"/)"$#+('4"4+(3:("*(B%4)5)49('-$%#"''()*'4"*%+E(+>=#")*(48+(%3*'+,-+*%+'(3:(
*34(35+//).)*0("*.(35+//).)*0(48+'+(A+483.'C
D)'".++?."@'61*/5V#'1""42'?4#'/4>*2'1""42/<'15+&'/#.56.26'=12@'$5'>.2*5#V/'
"+.//'1""42/M
OM
D)'".++?."@'1""42/'?4#'/4>*2'61*/5V#'1""42<'15+&'"9$+6V/'%*2/$15'=$++'?*'
*Q*"4#*6M
A15/*^4*5"*/,'>.2*5#V/'%*2/$15'=$++'51#'?*'*Q*"4#*6<'?4#'$#'"15#.$5/'
$C>#'"16*'#1'>*2)12C'/1C*'/#6'=12@')12'#9*'!"#$%$#&M
.M
!4#1T/.%*E2*/#12*'1)'#9*'%$*=T/#.#*'=15V#'1""42?M
RM
D)'".++?."@'.56'/4>*2'?1#9'1""42<'?1#9'1""42'&.&MYM
78"4("/+(48+(F(4"'&'(48"4(%3.+()*("*(B%4)5)49<'(3*!/+"4+(%"##$"%&(-'-"##9(.3+';
A.++/'/4>*2'"+.//'15A2*.#*'#1'"1C>+*#*'"2*.#$15'1)'!"#$%$#&
super.onCreate(savedInstanceState)
○
OM
F*"1%*2/'$5/#.5"*'/#.#*')21C'?456+*
if(savedInstanceState != null) {
mGameState =
savedInstanceState.getString(GAME_STATE_KEY);
}
RM
-*#/'4/*2'$5#*2)."*'+.&14# )12'#9*'!"#$%$#&
(.&14#')$+*'$/'6*)$5*6'$5'>21K*"#'2*/E+.&14#EC.$5c."#$%$#&MQC+'')$+*
○
setContentView(R.layout.main_activity)
○
YM
D5$#$.+$/*/'C*C?*2'TextView /1'$#'".5'?*'C.5$>4+.#*6'+.#*2'G2*)*2*5"*/'
#1'#9*'ND'"1C>15*5#I
mTextView = (TextView)
findViewById(R.id.text_view);
○
aM
!3*').+/(48+(%3.+1
#3*0(8)08@%3/+(G('8"/+.H/+:C0+4?*4I0+4@4/)*0I2C'4/)*0C'"5+.J8)08J'%3/+KE(
'3A+L"#KM
78"4()'('3A+L"#;
!'6*).4+#'%.+4*'1)'#9*'/#12*6'6.#.'$)'.'%.+4*'61*/5d#'*Q$/#'$5'#9*'2*)*2*5"*M
78"4(.3+'(0+4@4/)*0(.3;
D#'2*#425/'.'/#2$53'%.+4*')21C'-#2$53/'$5'SZ('61"4C*5#M
78"4(/3#+(.3+'(0+4@4/)*0<'(/+4-/*(5"#-+(=#"9("'("(="/"A+4+/(3:(48+(0+4?*4(
A+483.;
J9*'2*#425'%.+4*'$/'#9*'@*&'%.+4*'$5'3*#D5#M
78"4("/+(@8"/+.H/+:+/+*%+'(:)#+'(:3/;
J9*&'.2*')12'/#12$53'6.#.'#9.#'".5'?*'.""*//*6'?&'6$))*2*5#'."#$%$#$*/'.56'
>*2/$/#*5#'6.#.M
78"4()'(48+(.)::+/+*%+($+4D++*(D8"4()'(/+:+/+*%+.($9(48+(/+4-/*(5"#-+'(3:(
0+4H/+:+/+*%+'IK("*.(0+4@8"/+.H/+:+/+*%+'IK;
3*#-9.2*682*)*2*5"*/G-#2$53 5.C*<'$5# C16*I T4/*6'=9*5'&14'5**6'#1'4/*'
C4+#$>+*'>2*)*2*5"*/')$+*/'$6*5#$)$*6'?&'5.C*<'=9$"9'&14'4/*'#9*')$2/#'>.2.C*#*2'
#1'$6*5#$)&
3*#82*)*2*5"*/GI T4/*6'=9*5'&14'15+&'5**6'15*'>2*)*2*5"*/')$+*')12'&142'
."#$%$#&M'-$5"*'#9$/'=$++'?*'#9*'15+&'>2*)*2*5"*/')$+*')12'&142'!"#$%$#&<'&14'615V#'
/4>>+&'.'5.C*M
\>#$15/'C*54
;'>2$C.2&'"1++*"#$15'1)'C*54'$#*C/')12'.5'!"#$%$#&'G512C.++&'."#$15/'
#9.#'9.%*'3+1?.+'$C>."#'."21//'#9*'.>>'*3M'/*##$53/I
7
P9*2*'."#$15'?4##15/'.2*'>4/9*6'$5#1'$)'51'/>."*'$5'."#$15'?.27
D5)+.#$53 ;'615*'$5'onCreateOptionsMenu(Menu)
MenuInflater.inflate(R.menu.main, Menu menu) ;'
"15/#24"#'.'5*='$5/#.5"*'1)'Menu 3$%*5'.'C*54'2*/142"*'
$6*5#$)$*2
○
7
F*/>156$53'#1'C*54'$#*C'/*+*"#$15';'615*'$5'
onOptionsItemSelected(MenuItem item)
\%*22$6*OM
]Q#2."#'$6'1)'C*54'$#*CRM
A2*.#*'"156$#$15.+'/=$#"9T"./*'/#24"#42*'#1'6*.+'=$#9'6$))'"./*/'
1)'#9*'$6'G$M*M'6$))'C*54'$#*C'/*+*"#$15/I
Z4/#'2*#425'true .)#*2'C*54'$#*C'$/'"+$"@*6
-$5"*'#9*'".++?."@'=./'$5%1@*6'?&'!5621$6<'#24*'9./'
#1'?*'2*#425*6'/1'!5621$6'@51=/'#9*'".++?."@'=./'
*Q*"4#*6'*))*"#$%*+&E#9*'*%*5#'=./'"15/4C*6'.56'
61*/5V#'9.%*'#1'31'#1'.51#9*2'View<')12'*Q.C>+*
[
!+/1'>2*%*5#/'6*).4+#'."#$15'G$5%1+%*/'".++$53'$#*CV/'
.//1"$.#*6'F455.?+*'12'/*56$53'.'C/3'#1'$#/'b.56+*2I
[
§
D)'64551'=9.#'#1'61<'6*)*2'#1'superV/'."#$15/'.56'$#/'
2*#425'%.+4*
§
YM
Action Bar =$++'.4#1C.#$".++&'9.56+*'"+$"@/'15'b1C*EN>'
?4##15<'./'+153'./'>.2*5#'."#$%$#&'$/'/>*"$)$*6'$5'
AndroidManifest.xml
○
item.getItemId() 4/*6'$5'/=$#"9T"./*'#1'2*/>156'#1'1>#$15/'
C*54'/*+*"#$15/'$5'onOptionsItemSelected(MenuItem
item)
○
default:
return super.onOptionsItemSelected(item);
○
7
Menu -> menuFile.xml G>.2#'1)'#9*'2*/'#9.#'!5621$6'>4++/')21CI'
G"15#.$5/'#9*'C*54'QC+'2*/142"*')$+*I
<menu version="1"
Title="Intro"
Position="top"
…
>
<item
Title="1 Menu"
Src="chap1.txt"
Dest="ch1.html" >
</item>
</menu>
7
821"*//
b1/#/'.>>/<'=9$"9'.2*'C.6*'4>'
1)'"1C>15*5#/
7
A.5'6*>*56'15'*."9'1#9*27
A422*5#'/#.#*
;'9$39*/#T2.5@$53'."#$%*'
"1C>15*5#'=$#9$5'#9*'.>>'
$#'91/#/
Week$3
J4*/6.&<' Re'Z.&'RfOg
Of,af
!"#$%$#&'($)*"&"+*,
-#.#*/
012*3214567
8.2#$.++&'9$66*57
04++&'9$66*57
:*/#21&*67
($)*"&"+*
;'"9$+6'1)'!"#$%$#&'"+.//<'=9$"9'9./'"1>&'1)'!(('+$)*"&"+*' ".++?."@/
A.++?."@/,
onCreate()
setContentView
B*#/'+.&14#/')21C'/&/#*C
§
D5$#$.+$/*/'*+*C*5#/
§
○
→
onStart()
super.onStart();
○
onRestoreInstanceState();
D)'5**6'#1'/.%*E2*/#12*'."#$%$#&'$5/#.5"*'/#.#*
§
○
→
onResume()
super.onResume();
○
!"#$%$#&'?*"1C*/'%$/$?+*'$5')12*321456
○
→
onPause()
onSaveInstanceState();
D)'5**6'#1'/.%*E2*/#12*'."#$%$#&'$5/#.5"*'/#.#*
§
○
!"#$%$#&'51'+153*2'%$/$?+*
○
→
onStop()
!"#$%$#&')$5$/9$53E?*$53'6*/#21&*6'?&'#9*'/&/#*C
○
→
onDestroy()
F*+*./*/'.++'2*/142"*/'"422*5#+&'1""4>$*6'?&'#9*'."#$%$#&
○
!"#$%$#&'/94#/'61=5
○
→
GH."@I'-#."@
;'91='."#$%$#*/'.2*'.22.53*6'G$5'#9*'126*2'$5'=9$"9'*."9'."#$%$#&'$/'1>*5*6I
J./@';'.'"1++*"#$15'1)'."#$%$#$*/' #9.#'4/*2/'$5#*2."#'=$#9'=9*5'>*2)12C$53'
.'"*2#.$5'K1?
7
L*='."#$%$#&'>4/9*6'15'#1>'1)'/#."@'.56'#.@*/')1"4/
82*%$14/'."#$%$#&'2*C.$5/'$5'/#."@<'?4#'$/'/#1>>*6
.M
-&/#*C'2*#.$5/'"422*5#'ND'/#.#*
?M
OM
J1>'."#$%$#&'>1>>*6'1))'#1'2*%*.+'#9*'>2*%$14/'15*
N5#$+'4/*2'2*#425/'#1'91C*'/"2**5E=#%'."#$%$#&'=./'2455$53'=9*5'
#9*'#./@'?*3.5
.M
P9*5'.++'."#$%$#$*/'.2*'2*C1%*6<'#./@'51'+153*2'*Q$/#/
?M
RM
S'".5'$5"+46*'."#$%$#$*/')21C'/*%*2.+'6$))*2*5#'.>>/'G$5#*5#/'".5'31'."21//'.>>/I
S'C4+#$>+*'#./@'?."@'/#."@/'".5'*Q$/#'$5'?."@321456'.#'15"*
84##$53'>915*'#1'/+**>'TTTU'>4/9*/'?+.5@'."#$%$#&'15#1'/#."@
7
-4>*2
;'./@$53'>.2*5#'"+.//'#1'*Q*"4#*'
$#/'1=5'+$)*/#&+*'".++?."@
D/'.'/#.56.26'=.&'#1'
?*3$5'+$)*"&"+*'".++?."@
7
D)'6*+*#*6<'15+&'"9$+6V/'%*2'
$5%1@*6
7
D5/#.5"*'/#.#*';'%.+4*/'1)'.++'6.#.'G%$*=<'515T%$*=I
!"#$%$#&'$5/#.5"*'6.#.
!"#$%$#&'%$*='6.#.
;'#9*'/#.#*'1)'.++'W$*=/'$5'!"#$%$#&V/'+.&14#
○
7
!"#$%$#&'515T%$*='6.#.
;'!"#$%$#&'$5/#.5"*'%.2$.?+*/
○
7
D5%1+%*/'=2$#$53'#1'.56'2*.6$53')21C'.'6*%$"*V/'%1+.#$+*'C*C12&
7
X/.%$53E2*/#12$53'."#$%$#&'$5/#.5"*'/#.#*'GY'C*#916/I
onSaveInstanceState(Bundle outState)
Z4/#'".++'/4>*2'#1'+*#'!5621$6'/.%*'WT/#.#*
§
Z4/#'C.54.++&'"16*'#1'/.%*'LWT/#.#*'$5'H456+*
§
XX'P15V#'$5%1@*'=9*5'4/*2'$56$".#*/'615*'=$#9'!"#$%$#&'G$M*M'
!"#$%$#&'".5'?*'6*/#21&*6I
§
○
onCreate(Bundle savedInstanceState)
Z4/#'".++'/4>*2'#1'+*#'!5621$6'2*/#12*'WT/#.#*
§
Z4/#'C.54.++&'"16*'#1'2*/#12*'LWT/#.#*')21C'H456+*
A9*"@'$)'H456+*'$/'515T54++
-**/'$)'#9*2*'$/'.5'*Q$/#$53'/#.#*'#9.#'5**6/'/#12$53<'
1#9*2=$/*'$5$#$.+$/*' #9*'/#.#*'=E'/*5/$?+*'6*).4+#'
%.+4*/
®
[
§
○
onRestoreInstanceState
○
(Bundle savedInstanceState)
Z4/#'".++'/4>*2'#1'+*#'!5621$6'2*/#12*'WT/#.#*
§
Z4/#'C.54.++&'"16*'#1'2*/#12*'LWT/#.#*')21C'H456+*
\5+&'".++'$)'H456+*'$/'515T54++
H4#'".5V#'/*#'6*).4+#'%.+4*/'9*2*'45+$@*'
onCreate(Bundle)
®
[
§
Bundle 1?K'
§
;'".>.?+*'1)'/#12$53'@*&E%.+4*'>.$2/
D/'.'"1CC15'>.2.C*#*2'1)'#9*/*'".++?."@/'=9$"9'!5621$6'4/*/'
#1'/.%*E2*/#12*'."#$%$#&V/'%$*=T/#.#*
A.++?."@/'.++'4/*'#9*'/.C*'H456+*'G5.C*'61*/5V#'C.##*2I'
#1'>4/9'.56'2*#2$*%*'6.#.')21C
[
§
A.5'.+/1'?*'4/*6'#1'C.54.++&'/.%*E2*/#12*'."#$%$#&V/'515T%$*='
/#.#*
§
7
!4#1T/.%$53'WT/#.#*
]."9'W$*='C4/#'9.%*,
!'45$^4*'D:
§
saveEnabled = True
§
○
P$++'9.>>*5'$)'!5621$6'$/'#9*'".4/*'1)'#9*'."#$%$#&V/'6*/#24"#$15<'51#'
4/*2'G/&/#*C'@$++')12'2*/142"*/<'6*%$"*'2*12$*5#.#$15<'*#"I
○
7
8*2/$/#*5# 6.#.
;'6.#.'.//1"$.#*6'=$#9'C4+#$>+*'4/*/'1)'#9*'."#$%$#&'/*>.2.#*6'?&'.5&'.C145#'
1)'#$C*
7
->.5/'.5'!"#$%$#&V/'$5/#.5"*/7
Z4/#'>*2/$/#'."21//'.>>'6*/#21&/'./'=*++7
D5%1+%*/'=2$#$53'#1'.56'2*.6$53')21C'.'6*%$"*V/'515T%1+.#$+*'C*C12&7
]%*5#/'#9.#'2*^4$2*'6.#.'>*2/$/#*5"&
!"#$%$#&'>.2#$.++&E)4++&'9$66*5
!"#$%$#&'/#$++'$5'C*C12&<'51'/#.#*'6.#.'+1/#
§
LWT/#.#*'C4/#'?*'"16*6'$5'#1'?*'2*/#12*6
§
8*2/$/#*5#'6.#.'2*C.$5/'$5'+./#'4>6.#*6'/#.#*'GLWTC*C12&I
§
○
!"#$%$#&'6*/#21&*6'4/$53'H."@'?4##15
!5621$6'#.@*/'$#'./'WT/#.#*'51='455*"*//.2&<'/1'$#'6*/#21&/'WT
/#.#*'#3#'=$#9'."#$%$#&
§
8*2/$/#*5#'6.#.'2*C.$5/'$5'+./#'4>6.#*6'/#.#*'GLWTC*C12&I
§
○
:*%$"*'2*"15)$342.#$15
!>>'51#'@$++*6<'?4#'!"#$%$#&'6*/#21&*6'.56'2*+.45"9*6
§
WT/#.#*'/.%*6'$5'H456+*'#1'?*'2*/#12*6'+.#*2
§
LWT/#.#*'C4/#'?*'"16*6'$5'#1'?*'2*/#12*6
§
○
!>>'45$5/#.++*6')21C'6*%$"*
!++'.>>V/'6.#.'$/'+1/#<'$5"+46$53'.5&'>*2/$/#*5#'6.#.'/#12*6'15'LWT
C*C12&
§
○
7
X/.%$53E2*/#12$53'>*2/$/#*5#'."#$%$#&'6.#.
sharedPreferences
012'/#12$53'6.#.'#9.#'".5'?*'.""*//*6'?&'6$))*2*5#'."#$%$#$*/'.56'
>*2/$/#*5#'6.#.
§
-.%* 4/$53'public void saveSharedPreferences()
SharedPreferences sharedPref =
getPreferences(Context.MODE_PRIVATE);
[
SharedPreferences.Editor editor =
sharedPref.edit();
editor.putString
("key1",persistentState);
editor.commit();
§
F*/#12* 4/$53'restoreSharedPreferences()
SharedPreferences sharedPref =
getSharedPreferences(String filename,
int defaultValue);
[
persistentState = sharedPref.getString
("key1",persistentState);
getSharedPreferences 4/*6'=9*5'&14'5**6'#1'
4/*'C4+#$>+*'>2*)*2*5"*/')$+*/'$6*5#$)$*6'?&'5.C*<'
=9$"9'&14'4/*'#9*')$2/#'>.2.C*#*2'#1'$6*5#$)&
®
getPreferences 4/*6'=9*5'&14'15+&'5**6'15*'
>2*)*2*5"*/')$+*')12'&142'."#$%$#&M'-$5"*'#9$/'=$++'?*'
#9*'15+&'>2*)*2*5"*/')$+*')12'&142'!"#$%$#&<'&14'615V#'
/4>>+&'.'5.C*M
®
§
○
7
DC>#'#1'/.%*'>*2/$/#*5#'6.#.'$5'158.4/*GI'_=9$"9'$/'>.2#'1)'+$)*"&"+*'".++?."@/'
/1'$#'=$++'?*'".++*6'$5'*%*2&'/$#4.#$15`'$5/#*.6'1)'
15-.%*D5/#.5"*-#.#*GH456+*I
7
J.?+*'1)'a'/"*5.2$1/
-$C>+*!"#$%$#&($)*"&"+*:*C1-#46*5#
!"##$"%&'()*('+,-+*%+(.-/)*01
2+3/)+*4"4)3*(+5+*4
158.4/*GI'TTTTTTTU'15-#1>GI'TTTTTTTU'
15:*/#21&GI''TTTTTTTU'15A2*.#*GI'TTTTTTTU'15-#.2#GI'TTTTTTTU'15F*/4C*GI
6"%&(+5+*4
15:*/#21&GI'TTTTTTTU'15A2*.#*GI'TTTTTTTU'15-#.2#GI'TTTTTTTU'15F*/4C*GI
789("/+(48+9(.)::+/+*4;
:42$53'2*12$*5#.#$15<'#9*'4/*2'=.5#/'#1'/#.&'15'#9*'!"#$%$#&M
J9*2*)12*'#9*'/&/#*C'5**6/'#1'/.%*'#9*'/#.#*'?*)12*'6*/#21&$53'.56'>2*>.2$53'
)12'#9*'5*='12$*5#.#$15M
J9*'/.%*6'/#.#*'=$++'?*'2*/#12*6'$5'#9*'5*='12$*5#.#$15M
b1=*%*2<'=9*5'#9*'Back ?4##15'$/'"+$"@*6<'#9.#'$56$".#*/'#1'#9*'/&/#*C'#9.#'#9*'
4/*2'51'+153*2'5**6/'#9*'!"#$%$#&M'J9*2*)12*<'#9*2*'$/'51'5**6'#1'/.%*'$#/'/#.#*M
78+*(.3+'("*()*8+/)4+.(%"##$"%&<'('-=+/(+>+%-4+():1
?4()'(*34(35+//)..+*;
D)'".++?."@'$/'51#'".++*6'?&'"9$+6<'=9*5'.5'*%*5#'1""42/<'#9*'"16*'K4C>/'#1'$#/'
>.2*5#'.56'*Q*"4#*/'>.2*5#V/'%*2/$15M
?4()'(35+//)..+*;
D)'".++?."@'$/'".++*6'?&'"9$+6<'=9*5'.5'*%*5#'1""42/<'?1#9'"9$+6'.56'>.2*5#V/'
%*2/$15'$/'*Q*"4#*6M
3*@"5+?*'4"*%+@4"4+("*.(3*2+'43/+?*'4"*%+@4"4+("/+($348(%"##$"%&(A+483.'(
)*8+/)4+.($9(B%4)5)49('-$%#"''+'C(7)48(/+'=+%4(43('"5)*0(5)+D("*.()*'4"*%+(
5"/)"$#+('4"4+(3:("*(B%4)5)49('-$%#"''()*'4"*%+E(+>=#")*(48+(%3*'+,-+*%+'(3:(
*34(35+//).)*0("*.(35+//).)*0(48+'+(A+483.'C
D)'".++?."@'61*/5V#'1""42'?4#'/4>*2'1""42/<'15+&'/#.56.26'=12@'$5'>.2*5#V/'
"+.//'1""42/M
OM
D)'".++?."@'1""42/'?4#'/4>*2'61*/5V#'1""42<'15+&'"9$+6V/'%*2/$15'=$++'?*'
*Q*"4#*6M
A15/*^4*5"*/,'>.2*5#V/'%*2/$15'=$++'51#'?*'*Q*"4#*6<'?4#'$#'"15#.$5/'
$C>#'"16*'#1'>*2)12C'/1C*'/#6'=12@')12'#9*'!"#$%$#&M
.M
!4#1T/.%*E2*/#12*'1)'#9*'%$*=T/#.#*'=15V#'1""42?M
RM
D)'".++?."@'.56'/4>*2'?1#9'1""42<'?1#9'1""42'&.&MYM
78"4("/+(48+(F(4"'&'(48"4(%3.+()*("*(B%4)5)49<'(3*!/+"4+(%"##$"%&(-'-"##9(.3+';
A.++/'/4>*2'"+.//'15A2*.#*'#1'"1C>+*#*'"2*.#$15'1)'!"#$%$#&
super.onCreate(savedInstanceState)
○
OM
F*"1%*2/'$5/#.5"*'/#.#*')21C'?456+*
if(savedInstanceState != null) {
mGameState =
savedInstanceState.getString(GAME_STATE_KEY);
}
RM
-*#/'4/*2'$5#*2)."*'+.&14# )12'#9*'!"#$%$#&
(.&14#')$+*'$/'6*)$5*6'$5'>21K*"#'2*/E+.&14#EC.$5c."#$%$#&MQC+'')$+*
○
setContentView(R.layout.main_activity)
○
YM
D5$#$.+$/*/'C*C?*2'TextView /1'$#'".5'?*'C.5$>4+.#*6'+.#*2'G2*)*2*5"*/'
#1'#9*'ND'"1C>15*5#I
mTextView = (TextView)
findViewById(R.id.text_view);
○
aM
!3*').+/(48+(%3.+1
#3*0(8)08@%3/+(G('8"/+.H/+:C0+4?*4I0+4@4/)*0I2C'4/)*0C'"5+.J8)08J'%3/+KE(
'3A+L"#KM
78"4()'('3A+L"#;
!'6*).4+#'%.+4*'1)'#9*'/#12*6'6.#.'$)'.'%.+4*'61*/5d#'*Q$/#'$5'#9*'2*)*2*5"*M
78"4(.3+'(0+4@4/)*0(.3;
D#'2*#425/'.'/#2$53'%.+4*')21C'-#2$53/'$5'SZ('61"4C*5#M
78"4(/3#+(.3+'(0+4@4/)*0<'(/+4-/*(5"#-+(=#"9("'("(="/"A+4+/(3:(48+(0+4?*4(
A+483.;
J9*'2*#425'%.+4*'$/'#9*'@*&'%.+4*'$5'3*#D5#M
78"4("/+(@8"/+.H/+:+/+*%+'(:)#+'(:3/;
J9*&'.2*')12'/#12$53'6.#.'#9.#'".5'?*'.""*//*6'?&'6$))*2*5#'."#$%$#$*/'.56'
>*2/$/#*5#'6.#.M
78"4()'(48+(.)::+/+*%+($+4D++*(D8"4()'(/+:+/+*%+.($9(48+(/+4-/*(5"#-+'(3:(
0+4H/+:+/+*%+'IK("*.(0+4@8"/+.H/+:+/+*%+'IK;
3*#-9.2*682*)*2*5"*/G-#2$53 5.C*<'$5# C16*I T4/*6'=9*5'&14'5**6'#1'4/*'
C4+#$>+*'>2*)*2*5"*/')$+*/'$6*5#$)$*6'?&'5.C*<'=9$"9'&14'4/*'#9*')$2/#'>.2.C*#*2'
#1'$6*5#$)&
3*#82*)*2*5"*/GI T4/*6'=9*5'&14'15+&'5**6'15*'>2*)*2*5"*/')$+*')12'&142'
."#$%$#&M'-$5"*'#9$/'=$++'?*'#9*'15+&'>2*)*2*5"*/')$+*')12'&142'!"#$%$#&<'&14'615V#'
/4>>+&'.'5.C*M
\>#$15/'C*54
;'>2$C.2&'"1++*"#$15'1)'C*54'$#*C/')12'.5'!"#$%$#&'G512C.++&'."#$15/'
#9.#'9.%*'3+1?.+'$C>."#'."21//'#9*'.>>'*3M'/*##$53/I
7
P9*2*'."#$15'?4##15/'.2*'>4/9*6'$5#1'$)'51'/>."*'$5'."#$15'?.27
D5)+.#$53 ;'615*'$5'onCreateOptionsMenu(Menu)
MenuInflater.inflate(R.menu.main, Menu menu) ;'
"15/#24"#'.'5*='$5/#.5"*'1)'Menu 3$%*5'.'C*54'2*/142"*'
$6*5#$)$*2
○
7
F*/>156$53'#1'C*54'$#*C'/*+*"#$15';'615*'$5'
onOptionsItemSelected(MenuItem item)
\%*22$6*OM
]Q#2."#'$6'1)'C*54'$#*CRM
A2*.#*'"156$#$15.+'/=$#"9T"./*'/#24"#42*'#1'6*.+'=$#9'6$))'"./*/'
1)'#9*'$6'G$M*M'6$))'C*54'$#*C'/*+*"#$15/I
Z4/#'2*#425'true .)#*2'C*54'$#*C'$/'"+$"@*6
-$5"*'#9*'".++?."@'=./'$5%1@*6'?&'!5621$6<'#24*'9./'
#1'?*'2*#425*6'/1'!5621$6'@51=/'#9*'".++?."@'=./'
*Q*"4#*6'*))*"#$%*+&E#9*'*%*5#'=./'"15/4C*6'.56'
61*/5V#'9.%*'#1'31'#1'.51#9*2'View<')12'*Q.C>+*
[
!+/1'>2*%*5#/'6*).4+#'."#$15'G$5%1+%*/'".++$53'$#*CV/'
.//1"$.#*6'F455.?+*'12'/*56$53'.'C/3'#1'$#/'b.56+*2I
[
§
D)'64551'=9.#'#1'61<'6*)*2'#1'superV/'."#$15/'.56'$#/'
2*#425'%.+4*
§
YM
Action Bar =$++'.4#1C.#$".++&'9.56+*'"+$"@/'15'b1C*EN>'
?4##15<'./'+153'./'>.2*5#'."#$%$#&'$/'/>*"$)$*6'$5'
AndroidManifest.xml
○
item.getItemId() 4/*6'$5'/=$#"9T"./*'#1'2*/>156'#1'1>#$15/'
C*54'/*+*"#$15/'$5'onOptionsItemSelected(MenuItem
item)
○
default:
return super.onOptionsItemSelected(item);
○
7
Menu -> menuFile.xml G>.2#'1)'#9*'2*/'#9.#'!5621$6'>4++/')21CI'
G"15#.$5/'#9*'C*54'QC+'2*/142"*')$+*I
<menu version="1"
Title="Intro"
Position="top"
…
>
<item
Title="1 Menu"
Src="chap1.txt"
Dest="ch1.html" >
</item>
</menu>
7
821"*//
b1/#/'.>>/<'=9$"9'.2*'C.6*'4>'
1)'"1C>15*5#/
7
A.5'6*>*56'15'*."9'1#9*2
7
A422*5#'/#.#*
;'9$39*/#T2.5@$53'."#$%*'
"1C>15*5#'=$#9$5'#9*'.>>'
$#'91/#/
Week$3
J4*/6.&<' Re'Z.&'RfOg Of,af
Document Summary
= asking parent class to execute its own lifestyle callback. Is a standard way to begin lifecycle callback. = child of activity class, which has copy of all lifecycle callbacks. If need to save/restore activity instance state onresume() super. onresume(); Releases all resources currently occupied by the activity. = how activites are arranged (in the order in which each activity is opened) Task = a collection of activities that users interact with when performing. Task = a collection of activities that users interact with when performing a certain job. New activity pushed on top of stack and takes focus a. b. Previous activity remains in stack, but is stopped. Top activity popped off to reveal the previous one a. b. Until user returns to home screen/wtv activity was running when the task began. When all activities are removed, task no longer exists. X can include activities from several different apps (intents can go across apps)