activity作为android开发最重要的组件,在官网API中详细描述了其生命周期

http://developer.android.com/reference/android/app/Activity.html

一般常用的流程如下:

onCreate(BundlesavedInstanceState)

onStart()

onRestart()

onResume()

onPause()

onStop()

onDestroy()

应用程序的从启动到显示出界面的流程是onCreate() -> onStart() -> onResume()

退出应用程序的流程是 onPause() ->onStop() ->onDestroy()

以上这几个方法,网上的文章已经泛滥了,这里就不详细说明,下面主要说一些activity在应用开发中常用到的其他的方法



onCreateOptionsMenu(Menumenu)

onPrepareOptionsMenu(Menumenu)

onOptionsItemSelected(MenuItemitem)

onOptionsMenuClosed(Menumenu)

这四个方法是和菜单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,Bundleargs)

onPrepareDialog(int id,Dialogdialog)

onPrepareDialog(int id,Dialogdialog,Bundleargs)

showDialog(int id,Bundleargs)

showDialog(int id)

removeDialog(int id)

这几个是和Dialog有关,和上面menu原理差不多,不过现在google已经不推荐使用这几种方法了,现在推荐使用3.0之后的DialogFragmentFragmentManager来代替,而在3.0之前可以使用google提供的一个第三方兼容包android-support-v4.jar来实现,这个包里面的类或方法都是3.0之后才出,google把它放出来也是为了兼容3.0之前的系统



onSaveInstanceState(BundleoutState)

onRestoreInstanceState(BundlesavedInstanceState)

这两个方法主要是用于保存状态的,特别是在横竖屏切换的时候,在应用开发中用的很多,大多数应用程序都会支持横竖屏,但游戏开发中一般是不支持的(游戏开发中的数据太多了,保存起来很麻烦)。当然在恢复数据的时候我们也可以直接写在onCreate中,这里的Bundle对象和onRestoreInstanceState里的Bundle其实都是同一个对象,不过onRestoreInstanceState是在介于onStart() 和onResume()之间调用的,如果有东西是在onstart()里面初始化的,则我们可能就只能在onRestoreInstanceState()里面来恢复



getLastNonConfigurationInstance
()

onRetainNonConfigurationInstance()

这两个方法和上面2个方法差不多也可以用来保存状态,只不过这里这里保存的对象是Object,而不是Bundle,机制上虽然稍微有点差异,不过大体上基本相同



onKeyDown(int keyCode,KeyEventevent)

onKeyUp(int keyCode,KeyEventevent)

onKeyLongPress(int keyCode,KeyEventevent)

onKeyMultiple(int keyCode, int repeatCount,KeyEventevent)

其中onKeyDown,onKeyUp分别对应当键盘按下和松开时的调用方法,onKeyLongPress---当长按某个键时调用,

onKeyMultiple---当按多个组合键时调用

以上几个方法监听某个键的时候通过 keyCode == KeyEvent.XXX来实现

比如要监听数字键盘3则keyCode ==KeyEvent.KEYCODE_3,监听返回键keyCode ==KeyEvent.KEYCODE_BACK

详见KeyEvent

当然监听返回键我们也可以在activity中通过重写onBackPressed()来进行监听


onTouchEvent(MotionEventevent)

用于监听触摸事件,通过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(Intentintent)

当把activity的启动方式设为singleTop或singleTask的时候可能会调用,注意是可能会调用,具体什么时候调用说实话我也没真正搞清楚过,网上讲这方面的的文章一大堆,各执一词,甚至就连google自己都说的是只有在singleTop方式的时候才会调用,但经过实验验证了一下,在singleTask情况下也会调用,所以不知道到底该去信谁的。。。 所以我们一般就采用了如下方法: @Override
public void onCreate() { ... handleIntent(getIntent()); ... } @Override
public void onNewIntent(Intent intent) { ... handleIntent(intent); ... } 在onCreate()和onNewIntent()中都调用同一个自己写的方法handleIntent(Intent intent),这样你根本就不用去管它是否调用,因为在onCreate()和onNewIntent()两者之中必然要调用其中之一,不可能都调用或都不调用,这样就只需要把处理intent的地方都写在handleIntent里面就行了。




暂时就写到这里,后面再继续补充,未完待续。。。




更多相关文章

  1. Android之socket编程实例,熟悉socket使用方法
  2. Android Re-installation failed解决方法
  3. Android GestureDetector方法详解
  4. Android xxx is not translated in yyy, zzz 的解决方法
  5. android 开发中遇到的问题及解决方法
  6. Android读取xxx.properties配置文件中文出现乱码解决方法
  7. 关于手机启动的方向,和屏幕的单,双击事件

随机推荐

  1. 我想在html文件里插入一个for循环,应该如
  2. 如何在localStorage中存储数组?(复制)
  3. 我无法在某些Web浏览器中输入我的注册文
  4. html 引用文件编码为utf-8 的 js文件乱码
  5. 对于MVC中的循环不适用于不同的MapRoute
  6. 当给出%宽度时,表的主体减少了Head的col 1
  7. 关于清除浮动的问题。一招解决
  8. html 加上readonly后在各种浏览器的差异
  9. jQuery onclick不工作在移动设备上
  10. PHP课程总结20161221