是什么?
(1)an application component
(2)可以有界面,用户可以交互。通常fill屏幕,也可不fill,而是float在其他window上
一个application可有多个activity,有一个为main,通常是app启动时present给用户的界面
每个activity都可以start另一个activity,同时旧activity被stop,但system 在“back stack”里preserve它
当activity start时,push stack
当activity stop时,pop stack -->> destroyed -->> 前一个activity resume
callback
onCreate()
必须implement之,setContentView(),你懂的
onPause()
用户leave某activity时,可能没destroy,此时需要commit any 需要保存的 changes,因为可能不回来了
declare
必须在manifest里注册activity,system才能找到
<action android:name="android.intent.action.MAIN" /> 程序入口,若有多个,选第一个
starting
startActivity
startActivityForResult -->> onActivityResult
shutting down
finish
finishActivity
最好不要显示shut down一个activity,而是交给system处理
Activity Lifecycle
三种状态
resumed :显示在屏幕上,也可称之为running
paused :另一个activity显示,但是这个still visible(partially transperent 或 没cover整个屏幕),
completely alive,所有状态保存在memory中,window manager在管着,但随时可能被killed(memory用尽时...)
stopped : 在background, still alive,window manager没在管着,no longer visible to user
onCreate -------------------------entire
onStart --------------------visible
onResume -----------foreground
onPause
onStop
onDestroy
保存activity state
onPause或onStop后,activity object还在内存中,activity返回后可以recover state
但activity object可能被kill掉,当系统没有资源时,这样的话,memory中的activity object没了, 之前做的changes也没了
所以,,,resume时,必须recreate整个activity才行
onSaveInstanceState() -->> destroy -->> onCreate(savedInstanceState)
通常在onStop或者onPause之前执行
但是,onSaveInstanceState不一定在会执行,比如用BACK key关闭时,因为用户显示关闭activity,就没有必要了
UI state : onSaveInstanceState()的默认实现里包含了对控件 widgets view ..状态的保存,但需要空间含有unique ID
需要persist的数据必须在onPause()中进行save,比如需要保存到数据库里的changes
生命周期
运行,暂停,停止
系统资源匮乏时,会结束掉暂停态、停止态的activity