Activity的基本理解

 Activity:是Android的四大组件之一,主要处理界面的显示相关。


Activity的生命周期:

来自:http://blog.csdn.net/liuhe688/article/details/6733407

onCreat():在Activity创建的时候执行,接受参数Bundle savedInstanceState,一般用于初始化数据。(savedInstanceState参数说明:主要用于当Activity被异常杀死的时候,用于保存数据);

onStart():在Activity由不可见变为可见的时候调用,一般不进行任何操作;

onResume():Activity变成可见,获得焦点与用户进行交流,前台状态。

onPause():Activity可见,但是没有获得焦点,属于暂停状态,不处于栈顶当时可以看见界面;

onStop():Activity变成完全不可间的时候调用,进入后台状态;一般可以释放一些消耗资源的程序;

onDestory ():Activity被销毁的时候调用;


图中具有三个向上的流程进行一一说明:

第一条  onStop()——onRestart()——onStart();

当Aacitvity没有被回收,不可见,或则说没有处于栈顶时,被再次启动的时候就会执行第一条流程。

第二条 onPause()——onResume()

Activity由失去焦点状态进入获得焦点状态(AlderDialog消失的时候会进行第二条流程)

第三条 onStop()——onCreat();

Activity当处于后的时候,被系统意外回收时会进行第三条流程;

在系统回收之前会调用onSaveInstanceState();保存示例状态;在onCreat()时候调用onRestartInstanceState(BundlesavedInstanceState)

onSaveInstanceState()执行时机:调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(当然你不保存那就随便你了)。


如何销毁一个Acitvity?

直接调用finish()方法,进行销毁。

会执行的生命周期:onPause(),onStop(),onDestory().


BaseActivity的说明:一般在开发中,所有的Activity都不会直接继承自Activity,而是继承自BaseActivity,而BaseActivity继承自Activity;可以在BaseActivity中写一些接口,动态权限的添加,沉浸状态栏等;


Activity的启动模式:详细见网址:http://blog.csdn.net/guolin_blog/article/details/41087993

首先是启动模式的设置:可以manifest清单文件中通过launchModel来设置,也可以通过Intent       中添加flag来完成启动模式的设置。当两种模式都设置了启动模式限制,Intent的更优先(广播机制中也是动态注册广播优先于静态注册的广播);

        在具体说明启动模式的时候,先说以下,系统管理Activity的管理基本过程,系统通过返回站的模式管理,是一种先进后出的模式。

在manifest文件中进行模式设置:


standard:默认启动模式

当我们没有在清单文件中设置Activity的启动模式的时候,我们采用的就是这种启动模式;

这总模式是指,当我们启动设置这个模式的Activity,就会新建一个Activity实例,并切放置在栈顶。

singleTop:栈顶唯一

当我们启动Activity的时候首先会进行判断,该activity是否位于站定,如果位于站定,则不创建新的Acitvity,如果不位于栈顶,则创建新的实例,并放入到栈顶;

singleTask:任务唯一

启动自身Activity的情况:当启动自身Activity的时候,就会先判断任务栈是否具有当前Activity,如果没有新创建,并至于栈顶。如果具有该Activity,就会将该Activity之前所有的Activity出栈,将改Activity至于栈顶。

启动其他应用的Activity:当启动他应用设置singleTask的Activity的时候,就会新启动一个任务,并将其放到栈顶;

singleInstance:单实例

启动的Activity会新建一个任务,并且这个任务中只有这一个Activity,当这个Activity启动其他Activity的时候会放在其他任务中。

Intent的启动模式说明:??


Activity的沉浸模式:http://blog.csdn.net/guolin_blog/article/details/51763825

几种功能:首先隐藏或则透明状态栏,隐藏或则透明导航栏,真正的沉浸式模式。


Intent:在Activty,Service,Broadcast之间都有使用。

Intent在Activity之间的使用:分为显示Intent与隐式Intent两种;

首先说的显示Intent的使用方法:

Intent  intent=new Intent(MainActivity.this,SecondClass.class);

//参数说明:第一个参数为上下问对象(context),当然也可以是其子类;

//第二个参数为想要启动的目标活动

startActivity(intent);

//启动相应意图,完成跳转


隐式意图:隐式意图比显示意图含蓄的多;

不明确指出我们要启动哪一个活动,而是指定了一系列更为抽象的action与category等信息,然后交给系统去分析,并启动相应的activity;

基本行动原理解析:当在新建Intent的时候会指定action与category;action在每个Intent中只能有一个,而category可以又多个(当写的时候为默认android.intent.category.DEFAULT);在AndroidManifest中activty中添加<intent-filter>标签,在intent-filter中添加action与category;只又intent中的action与category同时与intent-filter中的action与category匹配的时候,这个活动就会相应;

代码示例:

//发送隐士意图

Intent intent=new Intent("com.this.action");

//采用构造方法添加action

intent.addCategory("com.this.category");

//通过addCategory添加category,如果不添加也会又默认的category;

startActivity(intent);

//接受隐式意图的Activity

需要在AndroidManifest中添加intent-filter

<activty  android :name=".SecondActivity">

<intent-filter>

<action android:name="com.this.action"/>

<category android:name="com.this.category"/>

</intent-filter>

</activity>

隐式意图的其他使用方法:可以用于开启其他应用的activity。

(当我们用系统的浏览器,或则打电话,或则分享到微信,都是启动其他应用的activity)

举例说明:启动系统浏览器

Intent   intent=new  Intent("Intent.ACTION_VIEW");

intent.setData(Uri.parse("http://www.baidu.com"));

startActivity(intent);

关于setData()方法说明:

在intent-filter标签中有个类似与category的标签<data>,

<data>用于指定当前活动能够响应什么数据。

<data>配置具体内容:

android.scheme-用于指定数据的协议部分,例如http协议;

android.host--用于指定数据的主机部分,如上例中的wwwbaidu.com.

android.port--用于指定端口号;

android.path--用于指定端口好后的部分

android.mineType--指定可以处理的数据类型;

只有<data>标签中指定的内容和Intent中携带的Data完全一致时,当前活动才能够相应该Intent。(不过一般Intent不会指定过多内容,浏览器只指定了协议)

代码示例:

Intent  intent=new  Intent("Intent.ACTION_VIEW");

intent.setData(Uri.parse("http://www.baidu.com"));

startActivity(intent);

<intent-filter>

<action android:name="android.intent.action.View"/>

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

<data android: scheme="http">

</intent-filter>

只有action category data  同时匹配时候,才会启动相应的activity;


向下一个活动传递数据:Intent不但可以启动其他活动,也可以向下一个活动传递数据,也可以将数据返回到上一个。

intent提供了一系列的putExtra()方法的重载,可以把我们要传递的数据存在Intent中,启动另一活动的时候,只需要把这些数据再从Intent中取出来。

代码示例:

发送示例:

String data="Hello SecondActivity";

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

//通过键值对的方式进行数据存储,前方是键,用于取出数据的时候使用,后面的参数为具体数值;

intent.putExtra("extra_data",data);

startActivity(intent);

接受示例:

Intent intent=getIntent();

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


返回参数给上一个活动:

启动Activity中

startActivityForResult()方法接受两个参数,第一个参数还是Intent,第二个参数是请求码,用于相应后判断数据来源。

Intent  intent=new Intent(MainActivity.this,SecondClass.class);

startActivityForResult(intent,1);

被启动的activity中,需要写入setResult(),该方法具有两个参数:第一个参数用于想上一个活动返回处理结果,一般只使用RESULT_OK或则RESULT_CANCELED这两个值,第二个参数为Intent-只用于传递数据

Intent  intent=new Intent();

intent.putEXtra("data","back_1");

setReuslt(RESULT_OK,intent);

finish();

启动Activity中

从写onActivityReuslt(),一共接受3个参数,第一个参数为requestCode请求码,在startActivityForResult();中的第二个参数,第二个resultCOde,即我们setResult()中返回数据结果。第三个为setResult()的第二个参数,也是返回的数据结果载体;

一般在onActivityReuslt()中通过requestCode判断是哪个Activity返回的数据,然后通过resultCode判断值的来源判断处理结果是否成功,进行相应处理;

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,014评论 25 707
  • Intent组件虽然不是四大组件,但却是连接四大组件的桥梁,学习好这个知识,也非常的重要。 一、什么是Intent...
    困惑困惑困惑阅读 1,506评论 0 0
  • Activity 一、四种形态 运行状态: 当 Activity 处于栈的顶层,可见,并可与用户进行交互 onRe...
    任教主来也阅读 1,643评论 1 10
  • 1.念刘备、关羽、张飞,虽然异姓,既结为兄弟,则同心协力,救困扶危;上报国家,下安黎庶。不求同年同月同日生,只愿同...
    玄泽阅读 1,241评论 0 3
  • RecyclerView 是Android L版本中新添加的一个用来取代ListView的SDK,它的灵活性与可替...
    洪生鹏阅读 1,082评论 2 10