Activity是一个能够提供用户一个屏幕让用户能够来作某些交互的应用组件,好比拨打电话,拍照,发email或者查看地图。每一个activity会给出一个窗口来绘制用户界面。这个窗口一般会填满整个屏幕,但有时也会比屏幕小点而且浮动在其余屏幕的顶端。android
1. Activity栈, 在Activity中能够启动新的Activity, 当新的Activity启动后, 前一Activity被中止, 并保存在Activity栈。当前Activity被压入栈顶。ide
2. 建立Activity。须要继承Activity, 并实现一系列的回调方法。两个重要的方法是布局
a.
onCreate(), 当系统建立当前Activity时会调用这个方法,在你的实现中,你应该初始化一些你的Activity的必要组件, 最重要的是,你必须调用setContentView()来来指定你的Activity的用户界面布局。
b.
onPause(), 系统会在用户要离开(并不必定老是destroy)Activity的第一意向是调用这个方法。一般这是咱们须要提交一些用户会话中须要保存的改变(由于用户可能不再会回来)的时机; 这个方法是最后一个能够保证在进程被kill 以前调用,所以须要在这个方法里面存储相当重要的数据,并且这些操做必须是轻量级的, 否则会阻塞下一个Activity的转换进而影响用户的体验。
3. 几个Activity的子类:orm
a.
ListActivity:含有ListView的Activity
b.
TabActivity:提供支持用户Tab切换的Activity
c.
PreferenceActivity:显式层级的preference的Activity
4. 必须在manifest文件中声明Activity,若是Activity不须要在其它应用中激活,则不须要提供intent filter, 只能经过显式的intent来启动。反之则须要提供intent filter,能够经过隐式intent 启动,也能够经过设置android:exported 属性为false来使你的Activity为private的。进程
5. 启动有返回结果的Activity,startActivityForResult(), 须要实现onActivityResult()回调方法。当启动的Activity退出(finish)后系统会调用这个方法。
6. 结束Activity,finish()中止本身或finishActivity()来中止一个先前启动的Activity。因为系统自动管理了Activity的生命周期,因此大多数状况下,你不必显式的调用这些结束方法来中止Activity, 这可能不利于用户体验。
7. Activity生命周期. Activity在本质上存在于三种状态
a.
Resumed, Activity在前台而且有用户焦点, 一般也叫运行状态。
b.
Paused, 另外一个Activity在前台并拥有焦点,但它仍是可见的。也就是说当前拥有焦点的Activity是半透明或者是部分覆盖屏幕的。处在这种状态的Activity是彻底存活的(在内存中并和window manager链接), 可是系统会在内存极其低下时将其Kill
c.
Stopped, 这个Activity彻底被其它Activity覆盖(在后台),处在这种状态的Activity也能够是存活的(在内存中但不与window manager链接), 当不可见或系统内存低时会被Kill
Paused或Stopped状态的Activity可被系统Kill, 不过仍然经过请求finish()方法。
8. Activity生命周期的回调方法。
a.
启动相关方法,onCreate(),onStart(),onRestart(),onResume(), 这些方法以后Activity的宿主进程通常不会杀掉, 除非在没有任何资源的紧急状况下; 结束相关方法onPause(),onStop(),onDestroy(),这些方法以后Activity的宿主进程能够被杀掉。
b.
全部对这些回调方法的实现必须在作任何事情以前调用super的相关方法。
c.
这些回调方法, 能够监控Activity生命周期中的三个嵌套循环。
d.
完整的生命周期: 在onCreate()和onDestroy()之间发生,应该在onCreate()中初始化资源和状态,如设置View, 在onDestroy()中释放全部残存的资源。 如Activity须要一个线程, 则应在onCreate()中启动线程,而在onDestroy()中结束线程()。
e.
可视生命周期:在onStart()和onStop()之间发生,在这期间用户能够在屏幕上看到这个Activity。在这期间能够维护须要展现给用户显式的资源。如在onStart()中注册BroadcastReciver来接收影响用户UI的改变,并在onStop()中注销掉。
f.
前台生命周期:在onResume()和onPause()之间, 在这期间其在全部Activity前面而且拥有用户的输入焦点, 这个状态转换比较频繁,里面的操做应该轻量级。
9. 保存Activity的状态, 生命周期中的回调方法能够在Activity对象没有被销毁时保留Activity的状态,可是当Activity对象被系统销毁后,当回到这个Activity时不能简单的start这个Activity,而须要从新建立。 可是用户并不知道这个Activity被销毁并从新建立了它,用户但愿回到以前的样子。 这就须要另外一个回调方法onSaveInstanceState()来保存Activity的状态信息。
10. onSaveInstanceState()会传递你一个Bundle对象,你能够把你须要保存的信息存放在里面, 当系统杀掉了你的Activity所在的进程而且用户又返回到你的Activity时, 这时就会把这个Bundle对象传到onCreate()和onRestoreInstanceState()方法, 并利用它来恢复Activity的状态, 若是没有状态信息储存, 则Bundle对象为空。Activity在每次销毁以前onSaveInstanceState()并不必定都会执行,如当栈顶的Activity按back 退到前一Activity时就不会执行。 但从Activity(A1)进入另外一Activity(A2)时,会在A1.onPause()前执行A1.onSaveInstance(),并设置Bundle, 若是系统销毁了A1, 从A2返回A1时, A1会从新A1.onCreate(), 并传入以前设置的Bundle
11. Activity提供默认的onSaveInstanceState()方法来保存UI信息,但其它信息须要你本身保存。View中实现了方法dispatchSaveInstanceState(),onSaveInstanceState()来提供须要保存的UI信息,但View须要设置ID属性且saveEnable的值为true。
12. Activity启动,回退等状况下各回调方法执行顺序(全部Activity在同一进程),各回调方法都是在主线程执行的,所以严格按照顺序执行, 当须要作相关同步操做时尤为要注意。
a.
一个Activity(A1)中启动另外一个Activity(A2), A2彻底覆盖A1
启动:A1.onSaveInstance() àA1.onPause() àA2.onCreate()àA2.onStart()àA2.onResume()àA1.o
nStop()
回退(A1未被销毁):A2.onPauseàA1.onRestart()àA1.onStart()àA1.onResume()àA2.onStop()
àA2.onDestroy()
回退(A1被销毁):A2.onPauseàA1.onCreate()àA1.onStart()àA1.onResume()àA2.onStop()
àA2.onDestroy()
b.
一个Activity(A1)中启动另外一个Activity(A2), A2部分覆盖A1或半透明
启动:A1.onSaveInstance() àA1.onPause() àA2.onCreate()àA2.onStart()àA2.onResume()
回退(A1未被销毁):A2.onPauseàA1.onResume()àA2.onStop()àA2.onDestroy()
启动后A1被销毁,则A1会当即重建A1.onCreate()àA1.onStart()àA1.onResume()àA1.onStop()
A2启动A3
启动:A2.onPause()àA1.onStop()àA3.onCreate()àA3.onStart()àA3.onResume()àA2.onStop()
回退(A1未被销毁):A3.onPauseà A1.onRestart()àA1.onStart()à A2.onRestart()àA2.onStart()àA2.onResume()àA3.onStop()àA3.onDestroy()
回退(A1被销毁):A3.onPauseà A1.onCreate()àA1.onStart()àA1.onResume()àA1.onPause() A2.onRestart()àA2.onStart()àA2.onResume()àA3.onStop()àA3.onDestroy()
13. 处理配置变法:一些设备的配置可能会在运行时改变,如屏幕方向,键盘及语言等,当这些改变发生时,系统会销毁并重启这个Activity:onSaveInstanceState()àonPause()àonStop()àonDestroy()àonCreate()àonStart()àonResume(), 重启是为了让你可以适应新的配置并自动重载资源。要适当处理这些变化,使用onSaveInstanceState()和onRestoreInstanceState()方法(或者onCreate())来保存你的状态, 而在onConfigurationChanged()中处理变化。