安卓Activity的学习过程和学习思路

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

如果连这7个方法都不清楚的话,那么就该从头开始看Android了。生命周期:

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方法存入额外的数据信息。

如下列所示:

[java] view plaincopy

public class SaveNRestoreInstanceStateActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.save_restore_state);

}

@Override

protected void onRestart() {

super.onRestart();

EditText et1 = (EditText) findViewById(R.id.et1);

EditText et2 = (EditText) findViewById(R.id.et2);

et1.setText("This is et1");

et2.setText("This is et2");

}

@Override

protected void onSaveInstanceState(Bundle outState) {

outState.putString("et1", "This is from outState and this is et1");

outState.putString("et2", "This is from outState and this is et2");

super.onSaveInstanceState(outState);

}

@Override

protected void onRestoreInstanceState(Bundle savedInstanceState) {

super.onRestoreInstanceState(savedInstanceState);

EditText et1 = (EditText) findViewById(R.id.et1);

EditText et2 = (EditText) findViewById(R.id.et2);

et1.setText(savedInstanceState.getString("et1"));

et2.setText(savedInstanceState.getString("et2"));

}

}

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就是菜单键的处理方法。咋看之下,菜单键的处理和上下文菜单的处理方法的格式几乎是一致的,实际操作中也是如此,不再赘述。具体示例如下:

[java] view plaincopy

public class OptionMenuTestActivity extends Activity {

private TextView text;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

text = (TextView) findViewById(R.id.tv);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

SubMenu sub = menu.addSubMenu("0");

sub.add("0-1").setOnMenuItemClickListener(listener);;

sub.add("0-2").setOnMenuItemClickListener(listener);;

sub.add("0-3").setOnMenuItemClickListener(listener);

menu.add("1").setIcon(R.drawable.icon);

menu.add("2");

menu.add("4");

menu.add("5");

menu.add("6");

menu.add("7");

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

text.setText(item.getTitle());

return true;

}

private OnMenuItemClickListener listener = new OnMenuItemClickListener() {

public boolean onMenuItemClick(MenuItem item) {

text.setText(item.getTitle());

return true;

}

};

}

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

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

7.   onBackPressed

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

时间: 2024-10-09 19:45:46

安卓Activity的学习过程和学习思路的相关文章

HyperLedger Fabric 学习思路分享

HyperLedger Fabric 学习思路分享 HyperLedger Fabric最初是由Digital Asset和IBM公司贡献的.由Linux基金会主办的一个超级账本项目,它是一个目前非常流行并广为人知的区块链网络框架的实现方案.作为一种基于模块化架构开发应用程序或解决方案的基础,HyperLedger Fabric支持如共识和会员服务等即插即用的组件,它的设计初衷是支持不同组件的可插拔实现,并适应整个经济生态系统的复杂性和高精度性.HyperLedger Fabric利用容器技术运

安卓Activity跳转的几种方式

本文转载于http://blog.sina.com.cn/s/blog_5140274d0100q4j7.html,本人仅作为学习交流之用,请大家尊重原创. 第一种方式,用action来跳转. 1.使用Action跳转,如果有一个程序的 AndroidManifest.xml中的某一个Activity的IntentFilter段中定义了包含了相同的Action那么这个Intent 就与这个目标Action匹配.如果这个IntentFilter段中没有定义 Type,Category,那么这个 A

数据结构的学习思路

数据结构课程的重要性再怎么强调也不为过,对于将来从事编程工作的程序员来说,这是必修的内功心法,程序员的内功高低就体现在这个上面.当然对于非计算机从业人员,掌握这门课程对于锻炼我们的数学思维.逻辑思维和理性思维来说也是有百益而无一害的.现在课程视频已经全部上传到51CTO学院了,为了让大家更好的学习这套教学视频,我把课程的学习思路整理到下面,希望对大家有所帮助. 一.课程层次 从低到高分三个层面:实现(数据结构).使用(数据结构)和(算法)分析.课程的重点放在实现和使用上,分析做为后续课程的重点,

手机 app 开发的几种方式 ionic 学习思路以及 ionic 新建的项目分析

手机 app 开发的几种方式 ionic 学习思路以及ionic 新建的项目分析 学习要点:1. 目前开发手机 app 的几种方式2. Ionic 学习思路简介3. Ionic CSS 框架4. ionic js 指令 路由 其他 ui 交互效果5. ionic 命令行/CLI 安装 调试 打包( 第三季 第一讲已讲)6. ionic 开发包下载 以及命令创建的项目分析 1. 目前开发手机 app 的几种方式原生/Native: 使用原生 SDK 开发 App.优点不用说, 当你有足够的资源,这

安卓activity捕获返回button关闭应用的方法

安卓activity捕获返回button关闭应用的方法 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { //按下键盘上返回button if(keyCode == KeyEvent.KEYCODE_BACK){ new AlertDialog.Builder(this) .setIcon(R.drawable.alert_dialog_icon) .setTitle("提示") .setMessage(

建立三年学习思路 教你系统有效的自学摄影

最近好多新人加我微信问想学摄影,无从入手,怎么办? 我想我还是系统的来谈谈这个问题比较好,当然,话题仅限于刚入门的朋友参考,老鸟自动忽略即可.本文首先是谈思路,然后谈方法,不做具体的技术教授,技术贴请自己网络上搜索,早就铺天盖地.但能给初学者摄影学习梳理思路与方法的帖子却很少,催吹器材与炫耀技术帖却很多,往往给很多想学摄影却因为看着这些误导的帖子认为门槛很高而退却.于是我更多想给很多初学者一点建议,仅供根据自己的情况参考着学习上手. 第一步:你需要一个相机,还是要学摄影? 好多新手一开口习惯问:

VBA学习笔记之VBA学习思路

进阶的知识点 1. SQL查询语句和ADO2. 正则表达式和网抓3. 窗体与控件4. API 类模块 等等 作者:SOROSay链接:https://www.zhihu.com/question/26078625/answer/132542043来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1小时 熟悉数据类型.变量.常量和运算符 1.了解VBA有哪些数据类型 2.知道如何定义变量,了解public/dim/private定义变量时的区别 3.知道如何定义常量

安卓Activity生命周期(转)

http://www.oschina.net/question/54100_27841 启动:onCreate()->onStart()->onResume 当从Activity界面直接按Back键,onPause()->onStop()->onDestory() 当从Activity界面按home键.onPause()->onStop(), 接着再进入Activity时onRestart()->onStart()->onResume() public class

安卓activity捕获返回按钮关闭应用的方法

安卓activity捕获返回按钮关闭应用的方法 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { //按下键盘上返回按钮 if(keyCode == KeyEvent.KEYCODE_BACK){ new AlertDialog.Builder(this) .setIcon(R.drawable.alert_dialog_icon) .setTitle("提示") .setMessage("是否