1. onCreate, onStart, onResume, onPause, onStop, onRestart, onDestroy

如果连这7个方法都不清楚的话,那么就该从头开始看Android了。下图是Activity的生命周期,加深记忆用:


2. onNewIntent

在AndroidManifest.xml将某activity的android: launchMode设置为singleTask或singleTop的情况下,当需要开启(startActivity)这个activity的时候,如果当前应用的Activity栈中已经存在了该activity,那么该activity将不会按照

onCreate → onStart → onResume

的顺序启动新的activity,而是会按照

onNewIntent → onResume

的顺序将Activity栈中已经存在的那个Activity实例调用到最前台。

调用startActivity方法时传递的intent参数会作为onNewIntent方法的参数被使用,而Activity类本身通过getIntent方法返回的intent变量则是初始的intent值,从onNewIntent方法无关,除非调用startActivity之前通过setIntent设置intent,以保持intent总是最新的intent。

3. onSaveInstanceState与onRestoreInstanceState

当设备的配置(横竖屏、语言等)发生变化而使Activity自动重启,或者Activity从前台转到后台(如,按下Home键)的时候,Activity会调用onSaveInstanceState(Bundle)方法将当前Activity的状态保存到一个Bundle变量中。这个Bundle变量与onCreate(Bundle)方法和onRestoreInstanceState(Bundle)中的Bundle参数是同一个,也就是说,后两个方法通过传入的Bundle参数还原Activity的状态。

不过,虽然Activity的状态保存到了Bundle中,但是这些状态数据却无法从Bundle中取出。要想手动地设置一些重启后需要的状态数据,可以直接调用该Bundle实例的putXXX方法存入额外的数据信息。

如下列所示:

        
  1. publicclassSaveNRestoreInstanceStateActivityextendsActivity{
  2. /**Calledwhentheactivityisfirstcreated.*/
  3. @Override
  4. publicvoidonCreate(BundlesavedInstanceState){
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.save_restore_state);
  7. }
  8. @Override
  9. protectedvoidonRestart(){
  10. super.onRestart();
  11. EditTextet1=(EditText)findViewById(R.id.et1);
  12. EditTextet2=(EditText)findViewById(R.id.et2);
  13. et1.setText("Thisiset1");
  14. et2.setText("Thisiset2");
  15. }
  16. @Override
  17. protectedvoidonSaveInstanceState(BundleoutState){
  18. outState.putString("et1","ThisisfromoutStateandthisiset1");
  19. outState.putString("et2","ThisisfromoutStateandthisiset2");
  20. super.onSaveInstanceState(outState);
  21. }
  22. @Override
  23. protectedvoidonRestoreInstanceState(BundlesavedInstanceState){
  24. super.onRestoreInstanceState(savedInstanceState);
  25. EditTextet1=(EditText)findViewById(R.id.et1);
  26. EditTextet2=(EditText)findViewById(R.id.et2);
  27. et1.setText(savedInstanceState.getString("et1"));
  28. et2.setText(savedInstanceState.getString("et2"));
  29. }
  30. }

4. onCreateDialog与onPrepareDialog

虽然onCreateDialog、onPrepareDialog方法,以及相关的调用方法showDialog、dismissDialog、removeDialog在API Level 11以后遭到废弃,但是对于2.2(Level 8)、2.3.1(Level 9)和2.3.3(Level 10)中却仍然是必不可少的。

简单地说onCreateDialog和onPrepareDialog就与onCreate和onStart方法之间的关系类似,onCreateDialog负责在弹出框还不存在时生成弹出框Dialog,而onPrepareDialog则是在Dialog显示前对其进行进一步的处理。

这里需要特别注意的是:使用removeDialog方法后,弹出框会被清除,下一次在本Activity中使用showDialog首先会调用onCreateDialog,然后再调用onPrepareDialog;而如果只使用dismissDialog方法使弹出框不可见,弹出框并不会被清除,下次调用showDialog时也不会调用onCreateDialog。

5. onCreateContextMenu与onContextItemSelected

上下文菜单(ContextMenu)的实际效果是,长按某一个View控件之后弹出一个可选的菜单。ContextMenu相对真正的长按事件(OnLongClickListener)中弹出菜单的优点在于使用非常灵活,代码也相对集中。但是需要通过registerForContextMenu绑定View控件之后才能生效。

onCreateContextMenu方法的原型是:

void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo);

其中的ContextMenu menu就是最终会显示的上下文菜单,需要在控件上进行的UI操作都需要在menu上进行;View v是触发上下文菜单的View控件。

另一个方法onContextItemSelected,是用来处理上下文菜单中的选中事件的。其参数是MenuItem,也就是ContextMenu中的选中项,可以通过在onCreateContextMenu中设置的groupId、itemId、order或者title来加以区分。

6. onCreateOptionsMenu与onOptionsItemSelected

虽然Android 4.0之后要取消菜单键,但是现在菜单键仍然非常有用。onCreateOptionsMenu就是菜单键的处理方法。咋看之下,菜单键的处理和上下文菜单的处理方法的格式几乎是一致的,实际操作中也是如此,不再赘述。具体示例如下:

        
  1. publicclassOptionMenuTestActivityextendsActivity{
  2. privateTextViewtext;
  3. /**Calledwhentheactivityisfirstcreated.*/
  4. @Override
  5. publicvoidonCreate(BundlesavedInstanceState){
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.main);
  8. text=(TextView)findViewById(R.id.tv);
  9. }
  10. @Override
  11. publicbooleanonCreateOptionsMenu(Menumenu){
  12. SubMenusub=menu.addSubMenu("0");
  13. sub.add("0-1").setOnMenuItemClickListener(listener);;
  14. sub.add("0-2").setOnMenuItemClickListener(listener);;
  15. sub.add("0-3").setOnMenuItemClickListener(listener);
  16. menu.add("1").setIcon(R.drawable.icon);
  17. menu.add("2");
  18. menu.add("4");
  19. menu.add("5");
  20. menu.add("6");
  21. menu.add("7");
  22. returntrue;
  23. }
  24. @Override
  25. publicbooleanonOptionsItemSelected(MenuItemitem){
  26. text.setText(item.getTitle());
  27. returntrue;
  28. }
  29. privateOnMenuItemClickListenerlistener=newOnMenuItemClickListener(){
  30. publicbooleanonMenuItemClick(MenuItemitem){
  31. text.setText(item.getTitle());
  32. returntrue;
  33. }
  34. };
  35. }

需要注意的是,菜单键所弹出的功能菜单一般都有项数限制(一般为6项),而且不可手动修改,如果超过这个数目,那么后面的菜单项将会被折叠起来。

另外,无论是上下文菜单还是菜单键菜单,都支持嵌套子菜单SubMenu,如上例中所示。

7. onBackPressed

回退键的处理方法,一般用来屏蔽回退键或者在添加后退时的额外功能(弹出确认退出的对话框等)。

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. android上一些方法的区别和用法的注意事项
  5. android实现字体闪烁动画的方法
  6. Android(安卓)Wifi模块分析(三)
  7. Android中dispatchDraw分析
  8. Android四大基本组件介绍与生命周期
  9. Android(安卓)MediaPlayer 常用方法介绍

随机推荐

  1. Android(安卓)中 Intent.ACTION_PACKAGE_
  2. Android部分错误以及解决方案汇总
  3. 更新android sdk出现 A folder failed to
  4. Android发出HTTP请求,解析返回的JSON
  5. android菜单三级树实现
  6. Transparent Activity
  7. Android(安卓)下实现带有图标和Checkbox
  8. Android(安卓)去除String中的空格等
  9. android获取本机的IP地址和mac物理地址
  10. Android(安卓)打印堆栈