Android基础学习第二篇—Activity
1. 最近在自学Android,也是边看书边写一些Demo,由于知识点越来越多,脑子越来越记不清楚,所以打算写成读书笔记,供以后查看,也算是把自己学到所理解的东西写出来,献丑,如有不对的地方,希望大家给与指正。
2. 由于类似于读书笔记,可能格式神马的会比较随(hen)意(chou),大家看着受不了,可以使劲吐槽。
*************************************我只是分割线***************************************
上一篇已经讲了一些关于Project目录结构的东西,这次记录一下关于Android四大组件之一的Activity的一些东西,它也是Android中最基本的模块之一。
<一>什么是Activity?
它叫活动(听着很别扭,这么长时间还是感觉不好接受~),几乎所有的活动都是用来与用户交互的,活动主要关注与视图窗体的创建,一个应用程序可以包含零个或者多个活动,但是包含零个活动的应用比较少。【PS:这话是参考别人的,我只是拿来装X】
其实通俗来说,我们可以把手机当做一个浏览器,而Activity就是其中的一个个网页,在Activity上面,我们可以添加不同的View(就是.NET里面所说的控件),并且可以执行一些操作逻辑。
<二>Activity的生命周期
如图【图片是借用别人的】,

Activity的“整个生命周期”是发生在第一次调用onCreate(Bundle)和唯一最后调用onDestroy()方法之间。在onCreate(Bundle)方法中完成活动的初始化操作设置全局状态,比如加载布局、绑定事件等,并在onDestroy()方法释放资源。
Activity的“显示生命周期”是发生在调用onStart()方法以及调用相对应的onStop()方法之间。在这之间,可以在手机屏幕上看到这个活动。随着Activity对用户的可见和不可见状态的改变,这两个方法能被多次调用。
Activity的“前台生命周期”是在onResume()和onPause()方法之间所经历的,在这个周期内,活动处于运行状态,此时的活动是可以和用户进行交互的。
我个人的方法是:创建一个app,然后在Activity的代码中把这些方法全部重写出来,为每个方法打上断点(或者日志输出),Debug进行调试,就基本上明白了什么时候会被调用。
<三>Activity的启动和Activity之间的数据传递
这里我们需要用到一个对象Intent,Intent是Android程序中各组件之间进行交互的一种重要方式,它一般可被用于启动活动、启动服务、以及发送广播等场景,关于它的用法后面再详细说。
1. 简单的启动新的Activity
使用的方法:startActivity(Intent)
示例:
Intent _intent = new Intent();
_intent.setClass(MainActivity.this, ActivityB.class);
startActivity(_intent); //这个调用方法也可以写成 Intent _intent2 = new Intent(MainActivity.this,ActivityB.class);
startActivity(_intent2);
实例化一个Intent对象,然后指定从当前的MainActivity这个活动,跳转到ActivityB这个活动。
2. 启动新的Activity,并有返回值
使用方法:public void startActivityForResult(Intent intent, int requestCode),注意第二个参数:requesCode,这个参数类似于当初特工接头时的暗号,
示例:
1. 应用从活动MainActivity跳转到ActivityC,并请求一个字符串;
2. 在活动Activity中操作,关闭活动ActivityC时,返回请求的字符串给MainActivty;
3.活动MainActivity获取字符串。
class ButtonActivitiesClickListener implements OnClickListener {
@Override
public void onClick(View v) {
if (v.getId() == R.id.btnSkipToC) {
Intent _intent = new Intent();
_intent.setClass(MainActivity.this, ActivityC.class);
startActivityForResult(_intent, 100);
}
}
}
注意,这里就是启动新的活动ActivityC,暗号requestCode是100。
在活动ActivityC中,点击关闭按钮时用void setResult (int resultCode, Intent data)传回请求的字符串,
class ButtonActivityAListener implements OnClickListener {
@Override
public void onClick(View v) {
if (v.getId() == R.id.btnreturn) {
Intent _intent = new Intent();
EditText editText = (EditText) findViewById(R.id.edittext_first);
String inputStr = editText.getText().toString();
_intent.putExtra("dashenzaijia", inputStr);
setResult(Activity.RESULT_OK, _intent);
finish();
}
}
}
备注:Intent.putExtra(String name, String value)类似于一个数据字典,这个Intent就是ActivityC返回字符串给MainActivity的载体,name就是键,finish()方法类似于winform中的Close();
关闭活动ActivityC后,然后再MainActivity中,有一个虚方法,重载一下,然后从这个方法里面获取ActivityC的返回值,如下:
@Override
protected void onActivityResult(int arg0, int arg1, Intent arg2) {
// TODO Auto-generated method stub
super.onActivityResult(arg0, arg1, arg2);
if (arg0 == 100 && arg1 == Activity.RESULT_OK) {
String returnValue = arg2.getStringExtra("dashenzaijia");
TextView view = (TextView) this.findViewById(R.id.textview_showresult);
if (!returnValue.isEmpty()) {
view.setText("来自Activity C的值:" + returnValue);
} else {
view.setText(null);
}
}
}
第一个参数就是当初定义的两个活动之间的暗号,第二个参数是跳转后页面的关闭时的结果,类似于C# 里面窗体关闭时的DialogResult,第三个参数就是返回值的载体。
<四>活动的启动模式
启动模式有四种,分别是:standard、singleTop、singleTask、singleInstance,可以在AndroidManifest.xml文件中通过给<Activity>标签指定android:launchMode属性来选择启动模式。
1. standard
standard是活动默认的启动模式,在不进行显示指定的情况下,所有活动都会自动使用这种启动模式。Android是使用返回栈来管理活动的,在standard模式下,每当启动一个新的活动,它就会在返回栈中入栈,并处理栈顶的位置。对于使用standard模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。
例如:应用启动显示的活动是A,A中启动了B,B中启动了C,活动A、B、C的启动模式都是standard模式的,这时候你如果想退出这个应用,需要点击三次Back键才可以。
同样的,如果我们在活动A中,点击按钮Button启动了活动A,然后再点击按钮Button,又启动了A,这时候返回栈中有三个活动A,需要点击三次Back键才能退出应用。
2. singleTop
使用singleTop模式时,在启动活动的时候,如果返现返回栈的栈顶已经是该活动,则认为可以直接使用,不会再创建新的该活动的实例。
例如,系统默认启动了活动A,在活动A中,点击按钮Button启动了活动A,然后再点击按钮Button,又启动了A,这时候返回栈中其实仍旧只有一个活动A,我们只需要点击一次Back键就能退出应用,活动A是singleTop模式的。
同样的,应用中有A、B两个活动,它们的启动模式都是singleTop,应用启动A,然后A启动了B,B又启动了A活动,这时候返回栈中其实有两个A,一个B,我们需要点击三次Back键才能退出应用。
3. singleTask
使用singleTask模式时,每次启动活动的时候,系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在该活动的实例,直接使用该实例,并把这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。
例如,应用默认启动了活动A,活动A是singleTask模式的,然后A启动了B,B启动了C,C又启动了A,这时候返回栈中其实只有一个A,B、C都已经被出栈,只需要点击一次Back键就可以退出应用。
4. singleInstance
使用singleInstance模式的活动,会有一个单独的返回栈来管理这个活动,一般来说,这种模式是可以用来实现其他应用程序和我们的程序可以共享这个活动的实例的,不管是哪个应用程序来访问这个活动,都共用的同一个返回栈。
例如,应用默认启动了活动A,A启动了活动B,活动B是singleInstance模式的,然后活动B启动了C,我们点击Back键,会从C跳转到活动A,因为A和C在一个返回栈,而B是另一个返回栈,在点击Back键,A跳到了B,再点击Back键,退出程序。
关于Activity的最基本的一些知识就说完了。
Android基础学习第二篇—Activity的更多相关文章
- Android基础学习第一篇—Project目录结构
写在前面的话: 1. 最近在自学Android,也是边看书边写一些Demo,由于知识点越来越多,脑子越来越记不清楚,所以打算写成读书笔记,供以后查看,也算是把自己学到所理解的东西写出来,献丑,如有不对 ...
- nginx基础学习第二篇:nginx内置变量的使用
ngx_http_core模块提供的内置变量有很多,常见的有 $uri,用来获取当前请求的uri,不含请求参数. $request_uri,用来获取请求最原始的uri,包含请求参数,且未解码. $re ...
- Java并发包下锁学习第二篇Java并发基础框架-队列同步器介绍
Java并发包下锁学习第二篇队列同步器 还记得在第一篇文章中,讲到的locks包下的类结果图吗?如下图: 从图中,我们可以看到AbstractQueuedSynchronizer这个类很重要(在本 ...
- [转]Android开源项目第二篇——工具库篇
本文为那些不错的Android开源项目第二篇--开发工具库篇,主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多 ...
- Android开源项目第二篇——工具库篇
本文为那些不错的Android开源项目第二篇——开发工具库篇,**主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容 ...
- Mysql基础学习第二天
Mysql基础学习第二天 函数 函数:是指一段可以直接被另一段程序调用的程序或代码. 字符串函数 数值函数 日期函数 流程函数 字符串函数 MySQL内置很多字符串函数,常用的几个如下: 函数 功能 ...
- Android基础学习第三篇—Intent的用法
写在前面的话: 1. 最近在自学Android,也是边看书边写一些Demo,由于知识点越来越多,脑子越来越记不清楚,所以打算写成读书笔记,供以后查看,也算是把自己学到所理解的东西写出来,献丑,如有不对 ...
- Android开发学习之路--Activity之初体验
环境也搭建好了,android系统也基本了解了,那么接下来就可以开始学习android开发了,相信这么学下去肯定可以把android开发学习好的,再加上时而再温故下linux下的知识,看看androi ...
- Android开发学习之路--Activity之Intent
窗外再次飘起了小雪,还有1周就过年了,2016年即将到来,来年不知道自己将身处何处,船到桥头自然直吧.还是继续学习吧,上次学习了Activity,那么如果是两个Activity之间,怎么从一个Acti ...
随机推荐
- Python学习笔记(2) Python提取《釜山行》人物关系
参考:http://www.jianshu.com/p/3bd06f8816d7 项目原理: 实验基于简单共现关系,编写 Python 代码从纯文本中提取出人物关系网络,并用Gephi 将生成的网 ...
- JMeter 问题
1. JMeter 测试计划 测试计划 使用 JMeter 进行测试的起点,是其它 JMeter 测试元件的容器. 线程组 代表一定数量的并发用户,它可以用来模拟并发用户发送请求.实际的请求内容在S ...
- 个人对B/S项目的一些理解(一)
以下是我自工作以来,结合对C/S项目的认知,对B/S项目的一些理解. 如有不足或者错误,请各位指正. B/S browser/server ----对于这两个软件的个人看法 本质上,也是两个软 ...
- 推荐一篇关于java 学习的文章,感觉写的很不错
---恢复内容开始--- 很多网友问我学习Java有没有什么捷径,我说"无他,唯手熟尔".但是我却很愿意将自己学习的一些经验写出来,以便后来者少走弯路,帮助别人是最大的快乐嘛 ...
- Couldn't open CUDA library cublas64_80.dll etc. tensorflow-gpu on windows
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_load ...
- Django基础,Day4 - views 详解
在Django中,网页和其他内容是通过视图传递的.每个视图由一个简单的Python函数表示,Django将通过检查请求的URL(准确地说,是域名后面的部分URL)来选择一个视图. 例如,用户在浏览器中 ...
- juery实现贪吃蛇的游戏
今天用juery做了一个贪吃蛇的游戏,代码比较简陋,不过作为这些天学习juery的成果,非常有成就感.另外关于代码内容如有雷同不胜荣幸. 更改了下 让头和身子的颜色不一样 这样好区分些,虽然还是不怎么 ...
- mySql 远程连接(is not allowed to connect to this MySQL server)
如果你想连接你的mysql的时候发生这个错误: ERROR 1130: Host '192.168.1.3' is not allowed to connect to this MySQL serve ...
- Why did I have a recovery trip
For more than a decade, I felt most at ease living out of a suitcase, never quite sure where I might ...
- C#设置输入框只输入数字
为输入框添加keyPress事件,然后添加代码: || e.KeyChar > ) && e.KeyChar != && e.KeyChar != &&a ...