Android四大组件-activity

七月中旬正式进入公司,八月初正式开始接触android。三个多月以来,一直没些什么东西,这一篇是首秀,后面还会陆续写一些 。对自己了解到的一些东西做一下总结。下面进入正题,Android有四大组件:activity、service、content provider和broadcast。今天先来说说activity。

活动主要用于用户交互,它最容易吸引到用户,可以包含用户界面的组件,也可以只在里面添加逻辑。一个App里面可以包含一个或者多个activity,不包含任何activity的应用基本没有。

activity包括它的创建,布局构造,多个活动之间的交互,生命周期等等。activity的创建要根据开发平台来处理,eclipse和android studio的创建方法类似,属于基本操作。创建完成一个activity之后,系统会自动生成一个layout文件(用于调整这个activity的布局)并且在Androidmanifest中注册这个活动(平台一般会自动生成):

package="com.example.activity"

<application

android:allowBackup=="true"

android:icon="@mipmap/ic_lunch"

android:lable="@string/app_name"                   

android:supportRtl="true"

android:theme="@style/AppTheme"                   

<activity android:name=".FirstActivity"></activity>

allowbackup:是否允许返回                icon:图标                 lable:标题栏的内容

theme:页面风格,后面toolbar的时候会用到这个东西。

name:活动名称

在activity的主界面会自动重写onCreate这个方法,这个方法里面添加要在页面上的显示的内容逻辑。除了onCreate之外还有onStart、onResume、onPause、onStop,onDestory、onRestart。

onCreate:在活动第一次创建的时候调用,加载布局,绑定事件。

onStart:每次活动由不见变为可见的是时候调用。

onResume:在活动准备好与用户进行交互的时候调用,此时活动位于返回栈的栈顶。

onPause:在系统准备去启动或者恢复另一个活动的时候调用,在此过程中将消耗cpu的资源释放掉,且速度要快

onStop:活动完全不可见时调用。

onDestory:活动被销毁前调用,之后变为销毁态。

onRestart:由停止态转换为运行状态之前调用。

上面的顺序也是一个活动的生命周期。onStart可以添加影响app界面状态的接口调用逻辑。onResume里面添加界面的刷新相关的逻辑。活动的生命周期是一个返回栈的结构。主要有四个状态:

运行态:活动位于栈顶时,就是运行态

暂停状态:活动不在栈顶,但仍然可见

停止态:活动不在栈顶且不可见,系统会为它保留相应状态和成员变量,但空间不足时,系统会将其回收。

销毁态:活动从返回栈移除时,就处于销毁态,可以保证内存充足。

完整生存期。活动在onCreate()方法和 onDestroy()方法之间所经历的,就是完整生存期。一般情况下,一个活动会在 onCreate()方法中完成各种初始化操作,而在onDestroy()方法中完成释放内存的操作。

可见生存期:活动在 onStart()方法和 onStop()方法之间所经历的,就是可见生存期。在可见生存期内,活动对于用户总是可见的,即便有可能无法和用户进行交互。我们可以通过这两个方法,合理地管理那些对用户可见的资源。比如在 onStart()方法中对资源进行加载,而在 onStop()方法中对资源进行释放,从而保证处于停止状态的活动不会占用过多内存。

前台生存期。活动在 onResume()方法和 onPause()方法之间所经历的就是前台生存期。在前台生存期内,活动总是处于运行状态的,此时的活动是可以和用户进行交互的,我们平时看到和接触最多的也就是这个状态下的活动。


Intent用于一个活动唤醒另一个活动:

显式调用

Intent intent =new Intent(FirstActivity.this,SecondActivity.class);

startActivity(intent);

隐式调用:

<action android:name="com.example.activitytest.ACTION_START"/>

<category android:name="com.intent.category.DEFAULT"/>

Intent intent = new Intent("com.example.activitytest.ACTION_START");

startActivity(intent);

在系统调用startActivity的时候会自动把android.Intent.category加到Intent里面去。必须action和category都匹配上才可以启动相对应的活动。

关于Intent intent=new Intent(Intent.ACTION_VIEW);

Intent.setData(Uri.prase("+网址"))

先指定Intent的action是ACTION_VIEW这是一个内置的常量,后面setData来调用资源,把网址解析成uri传进去。相对应的可以在<intent_filter>这里添加标签,详细说明是什么类型的数据。数据类型有:http、host、part、path、mimetype。写法如下

<data android:scheme="http"/>

打电话,打开另一个app都可以通过类似的方式实现。

接下来就是Intent来传递数据了

A页面:

Intent intent=new Intent(Firstactivity.this,secondactivity.class);

intent.putextrra=("extra——data",data);    //第一个参数是键,第二个是带着内容的参数。

B接受页面:

Intent intent=getIntent();

String data=intent.getStringExtra("extra_data");

这时候data就读取到了前一个页面的信息data了。

返回数据给前一个activity:

A页面:startActivityForResult(intent,1);

B页面:Intent intent =new Intent ;

intent.putExtra=("data_extra","hello");

setResult(RESULT_OK,intent);

finish;


最后来说一说Activity的启动模式:

standard 是活动默认的启动模式,在不进行显式指定的情况下,所有活动都会自动使用这种启动模式。因此,到目前为止我们写过的所有活动都是使用的 standard 模式。经过上一节的学习,你已经知道了 Android 是使用返回栈来管理活动的,在 standard 模式(即默认情况)下,每当启动一个新的活动,它就会在返回栈中入栈,并处于栈顶的位置。对于使用 standard 模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。

singleTop可能在有些情况下,你会觉得 standard 模式不太合理。活动明明已经在栈顶了,为什么再次启动的时候还要创建一个新的活动实例呢?别着急,这只是系统默认的一种启动模式而已,你完全可以根据自己的需要进行修改,比如说使用 singleTop 模式。当活动的启动模式指定为singleTop,在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例。

singleTask使用 singleTop 模式可以很好地解决重复创建栈顶活动的问题,但是正如你在上一节所看到的,如果该活动并没有处于栈顶的位置,还是可能会创建多个活动实例的。那么有没有什么办法可以让某个活动在整个应用程序的上下文中只存在一个实例呢?这就要借助 singleTask 模式来实现了。当活动的启动模式指定为 singleTask,每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。

singleInstance 模式应该算是 4 种启动模式中最特殊也最复杂的一个了,你也需要多花点功夫来理解这个模式。不同于以上 3 种启动模式,指定为 singleInstance 模式的活动会启用一个新的返回栈,在每一次启动页面的时候会调用这个回栈来管理这个活动(其实如果 singleTask 模式指定了不同的 taskAffinity,也会启动一个新的返回栈。后面会详细来说一说activity的启动模式。

第一篇暂时就这样吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,904评论 25 707
  • 关于为什么要写属于自己的博客,我在前一篇文章中也提到了。主要是归纳自己这一个时期所学到的知识,帮助自己更好的理解,...
    Kevin_Jern阅读 889评论 0 9
  • 本文主要搜集记录一下Android开发的四大组件:一、Activity详解二、Service详解三、Broadca...
    AFinalStone阅读 599评论 0 2
  • 我竟然做了一个关于hero的梦,很久没联系,我跑到了他家?没钥匙,怎么进去的。他在卧室关门睡觉,我在客厅找有关我...
    这里Cc阅读 190评论 0 0
  • 高校能人士的7个习惯(上) 积极主动 这个社会有很多积极主动的人们,也有只说不做的人们,每个人看到的情况都不同,理...
    这一刻我在乎阅读 181评论 0 0