activity作为android开发最重要的组件,在官网API中详细描述了其生命周期
http://developer.android.com/reference/android/app/Activity.html
一般常用的流程如下:
onCreate(Bundle savedInstanceState)
onStart()
onRestart()
onResume()
onPause()
onStop()
onDestroy()
应用程序的从启动到显示出界面的流程是onCreate() -> onStart() -> onResume()
退出应用程序的流程是 onPause() ->onStop() ->onDestroy()
以上这几个方法,网上的文章已经泛滥了,这里就不详细说明,下面主要说一些activity在应用开发中常用到的其他的方法
onCreateOptionsMenu(Menu menu)
onPrepareOptionsMenu(Menu menu)
onOptionsItemSelected(MenuItem item)
onOptionsMenuClosed(Menu menu)
这四个方法是和菜单menu键有关的
onCreateOptionsMenu(Menu menu) -----只在第一次刚进入activity的时候创建菜单
onPrepareOptionsMenu(Menu menu)-----每次按下menu键的时候调用的创建菜单
如果在上面在2个方法中都创建了菜单,则当然后者会覆盖前者,所以我们应用中一般都用onPrepareOptionsMenu(Menu menu),因为这个方法才能在一个activity中动态的创建不同的menu。
创建的菜单的方法可以通过menu.add的几个重载方法创建,不过这种方法比较繁琐,一般采用getMenuInflater().inflate(R.menu.xxx, menu)这种方法来创建
onOptionsItemSelected(MenuItem item) ----在选中某个菜单选项的时候调用
onOptionsMenuClosed(Menu menu) ----- 在菜单关闭的时候调用
onCreateDialog(int id)
onCreateDialog(int id, Bundle args)
onPrepareDialog(int id, Dialog dialog)
onPrepareDialog(int id, Dialog dialog, Bundle args)
showDialog(int id, Bundle args)
showDialog(int id)
removeDialog(int id)
这几个是和Dialog有关,和上面menu原理差不多,不过现在google已经不推荐使用这几种方法了,现在推荐使用3.0之后的DialogFragment
和FragmentManager
来代替,而在3.0之前可以使用google提供的一个第三方兼容包android-support-v4.jar来实现,这个包里面的类或方法都是3.0之后才出,google把它放出来也是为了兼容3.0之前的系统
onSaveInstanceState(Bundle outState)
onRestoreInstanceState(Bundle savedInstanceState)
这两个方法主要是用于保存状态的,特别是在横竖屏切换的时候,在应用开发中用的很多,大多数应用程序都会支持横竖屏,但游戏开发中一般是不支持的(游戏开发中的数据太多了,保存起来很麻烦)。当然在恢复数据的时候我们也可以直接写在onCreate中,这里的Bundle对象和onRestoreInstanceState里的Bundle其实都是同一个对象,不过onRestoreInstanceState是在介于onStart() 和onResume()之间调用的,如果有东西是在onstart()里面初始化的,则我们可能就只能在onRestoreInstanceState()里面来恢复
getLastNonConfigurationInstance()
onRetainNonConfigurationInstance()
这两个方法和上面2个方法差不多也可以用来保存状态,只不过这里这里保存的对象是Object,而不是Bundle,机制上虽然稍微有点差异,不过大体上基本相同
onKeyDown(int keyCode, KeyEvent event)
onKeyUp(int keyCode, KeyEvent event)
onKeyLongPress(int keyCode, KeyEvent event)
onKeyMultiple(int keyCode, int repeatCount, KeyEvent event)
其中onKeyDown,onKeyUp分别对应当键盘按下和松开时的调用方法,onKeyLongPress---当长按某个键时调用,
onKeyMultiple---当按多个组合键时调用
以上几个方法监听某个键的时候通过 keyCode == KeyEvent.XXX来实现
比如要监听数字键盘3则 keyCode ==KeyEvent.KEYCODE_3,监听返回键 keyCode == KeyEvent.KEYCODE_BACK
详见KeyEvent
当然监听返回键我们也可以在activity中通过重写onBackPressed()来进行监听
onTouchEvent(MotionEvent event)
用于监听触摸事件,通过event.getAction()来获取手势操作,然后根据MotionEvent中的一些常量值来判断手势:如MotionEvent.ACTION_DOWN:MotionEvent.ACTION_UP等等
在上面几种事件监听的方法中都会有个返回值表示是否消费掉了当前事件,返回true就表示消费掉了,返回false就表示没消费,继续向下传递;那什么叫消费掉了事件呢
这里就涉及到了android的事件传递机制知识,具体请参考下面2篇文章
http://www.cnblogs.com/xiaoQLu/archive/2012/04/28/2474443.html
http://www.cnblogs.com/playing/archive/2011/06/16/2082564.html
onNewIntent(Intent intent)
暂时就写到这里,后面再继续补充,未完待续。。。