5、四大组件之一-Activity与Intent

一、Activity的定义及作用

1)官方定义:Activity是Android应用程序提供交互界面的一个重要组件 。 也是Android最重要的组件之一

2)Activity是业务类 , 是承载应用程序的界面以及业务行为的基础 。 

包括UI , Service ...... 类似于我们的JavaBean

3)“脸”的表现都靠Activity了 。

4)说Activity就不得不说View和Window。

 

二、Intent和IntentFilter

Intent在中文中是意图的意思 。

那么既然叫做意图,就类似于一个男孩儿为了追一个女孩儿,传递纸条给她 ,向她要电话 ,女孩儿把电话写在纸条中传递给男孩儿 。(当然,现代社会都用微信了,最起码都是短信了)

如此,我们认为Intent就是在不同组件之间传递值而设计的一个数据结构 

intent :

extras  - 加入附加信息

category - IntentFilter 

Action - 动作 : Data - 动作相关的值 

ComponentName - Context

 CompnentName、Action、Data、Category、Extras、Flags。

 

三、我们来讲一个故事(我们用用例图来描述一下这个过程)

场景一:

有个男孩儿叫Jakcy , 有个女孩儿叫Rose  。 

他们来到美丽的成都,四川大学读书 。  

先到我们的学校登记学籍  ,包括学籍相关属性 (性别,年龄 ,身份证号.....)

Jacky想要邀请Rose看电影 ,知道Rose的寝室号,打扮一番,洗个脸。就跑过去,送了一张电影票外加一封情书 ,说晚上一起看电影吧 。 Rose说好啊

晚上开始去开电影之前, Rose会好好准备,化妆 ,装扮自己的仪容和脸 。有必要的话还需要好好设计一下 。

晚上一起看电影看完电影之后, Rose告诉Jacky  , 我接受你的邀请意味着我接受了你的情书 。 然后回家睡觉了

Jacky得到这个反馈后欢天喜地的也回家睡觉了 。

 场景二:

Jacky 相约 Rose 看电影 , 但是却不知道Rose的宿舍在哪儿也没有其他联系方式  。 

Jacky 找到学生会,发出一个寻人启事 ,启事是这样写道:

我想约你看电影 

我记得你是**系**年级的女生 

你的名字是Rose

如果你收到这个消息请打手机:135******** 联系我 , 我是Jacky

学生会没有把寻人启事贴到电线杆上,而是通过学校的学籍管理处去帮着查找这样条件的女孩儿 。结果一不小心查到了5,6位满足这个条件的女孩儿 。 就把启事全部发给她们了 。 

这些女孩儿都收到了这个信息,晚上电影都去了 。 Jakcy晕了 ......

 

四、如何编写Activity?

1)创建Activity及相关视图文件Layout(View)。

2)配置AndroidManifest.xml。

3)重载onCreate() , 绑定Activity和Layout(View)。  setContentView()

4)为View(Layout)添加必要组件。

   建立界面控件树的概念; findViewById();  addView();

5)在onCreate()中实现初始业务逻辑。

  加入事件比如按钮事件

    扩展:Java匿名内部类

       new interfacename(){......}; 或 new superclassname(){......}; 

 

五、Activity的切换及值传递

启动一个新Activity  ------  Intent;

启动一个新Activity并且返回值;

通过源代码分析启动的机制;

扩展:IntentFilter的应用;

结束一个Activity(finish()、finishActivity());

通过源代码分析结束机制;

 

六、Activity生命周期

 

http://www.cnblogs.com/mengdd/archive/2012/12/01/2797784.html

 

七、存储Activity状态

onSaveInstanceState()

onRestoreInstanceState() , onCreate()

如何选择用哪个函数?

官方推荐和我的推荐来说,都使用onCreate来恢复

因为有时候onRestoreInstanceState()不会被调用。

 

八、处理设置改变 Configuration changes

有时候会调用onConfigrationChanged  .

屏幕翻转

输入法的有效性切换

语言的切换 

1)   设置改变的时候恢复一个大对象

onRetainNonConfigurationInstance (注意returnObject 不要用与Context关联对象,比如View,否则会引起内存泄露)与 getLastNonConfigurationInstance() 配合

@Override

public Object onRetainNonConfigurationInstance() {

    final MyDataObject data = collectMyLoadedData();

    return data;

}

@Override

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

final MyDataObject data

   = (MyDataObject) getLastNonConfigurationInstance();

    if (data == null) {

        data = loadMyData();

    }

}

 

2) 自己处理配置改变

onConfigurationChanged()

 

<activity android:name=".MyActivity"

          android:configChanges="orientation|keyboardHidden"

          android:label="@string/app_name">

 

@Override

public void onConfigurationChanged(Configuration newConfig) {

    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen

    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();

    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){

        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();

    }

}

 

九、Activity的任务栈

进程中的关系是纵向的;类似生活中的部门,一个公司中有很多部门。

任务Task,可以理解为是横向关系;类似生活中的专案组,可以从每个部门抽调人手来去完成一个工作。

 

十、Activity Manifest配置详解

android:allowTaskReparenting

email-task 启动一个link 

然后切入到browser task

如果设置为true , 则之前打开的页面任然存在

 

android:alwaysRetainTaskState

用来标记Activity所在的Task的状态是否总是由系统来保持。

“true”,表示总是;“false”,表示在某种情形下允许系统恢复Task到它的初始化状态。默认值是“false”。这个特性只针对Task的根Activity有意义;对其它Activity来说,忽略之。
    一般来说,特定的情形如当用户从主画面重新选择这个Task时,系统会对这个Task进行清理(从stack中删除位于根Activity之上的所有Activivity)。典型的情况,当用户有一段时间没有访问这个Task时也会这么做,例如30分钟。
    然而,当这个特性设为“true”时,用户总是能回到这个Task的最新状态,无论他们是如何启动的。这非常有用,例如,像Browser应用程序,这里有很多的状态(例如多个打开的Tab),用户不想丢失这些状态。

 

android:clearTaskOnLaunch

一般情况下 , launch中重新启动这个任务都会清除底部以上的activity这个可以保留,

Sample:某人从主页屏幕载入activity P,并从那儿到达activity Q。用户接下来按了HOME键,然后返回到activity P。通常,用户将看到activity Q,因为那时他在P的task里操作的地方。然而,如果P将该标志设为”true”,当用户按了HOME键,该task进到后台去的时候,其上的所有的 activity(Q也属于这种情况)将被移除。所以以后回到该task时看到的只有P。

 

android:configChanges

android:configChanges="keyboardHidden|orientation"配置,当我们横竖屏切换的时候会直接调用onCreate方法中的onConfigurationChanged方法,而不会重新执行onCreate方法,那当然如果不配置这个属性的话就会重新调用onCreate方法了

 

android:finishOnTaskLaunch

当用户再次载入该task时(在主页屏幕上选择该task),一个既存的activity实例是否应该被关闭(结束) — “true”表示会被关闭,”false”表示不是。默认值为”false”。

 

android:hardwareAccelerated

由于硬件加速自身并非完美无缺,所以Android提供选项来打开或者关闭硬件加速,默认是关闭。可以在4个级别上打开或者关闭硬件加速:,在3.0才有的。

 

android:launchMode

Standard  标准的。

2.B设置为SingleTop,启动A: 再启动A: 再启动B: 再启动B: 

结论: 

当B不在栈顶时,仍然会创建B的新实例。 

当B在栈顶时,请求启动B的Intent并没有触发创建B的新实例,而是触发了栈顶B的onNewIntent() 

按Back键依次返回桌面,输出依次: 

结论: 

虽然发送了四次Intent,但实际上只创建了3个Activity,所以只有3次销毁输出。 

3.B设置为SingleTask,启动A: 启动B:启动A: 启动B: 

结论: 

当B已经存在时,再次请求B会触发已经存在的B1实例的onNewIntent; 

并且如果B所在的任务栈上面有其他Activity,那么其他Activity会被销毁。 

一个任务只能有一个此Acitivty ,并且必须作为Root Activity  。

它上面的Activity 只能是Standard & SingleTop

如果它跑到front了 , 其它activity就会离栈

 4.B设置为SingleInstance,启动A: 

启动B,此时新创建了任务栈13,和先前的A1并不在一个任务。 

再启动B,没有创建新实例: 

再启动A,再旧的任务12中创建了A的新实例 

按下Back键: 

signleInstance  , 独立成Taskstack ,并且有且仅有你自己 ,孤家寡人 。而且始终保持一个实例

离栈的时候 , 先退当前的task ,再退另外的task

一个任务有且仅有一个SingleInstance , 它作为唯一的activity存在与一个任务里面

 

android:multiprocess

activity的实例是否能够被载入到启动它的组件所在进程里 — “true”表示可以,”false”表示不行。默认值是”false”。

通常,一个activity的新实例被载入到定义它的应用程序进程里,这样一来,该activity的所有实例运行在同一进程里。然而,如果本标识设为”true”的话,activity的实例就能够运行在多个进程里,允许系统只要使用它时就生成实例(提供的权限允许的话),某些几乎根本不需要或根本不合适。

 

android:noHistory

当用户离开它且它不再显示在屏幕上时,activity是否应该被从activity stack里移除并且结束掉(调用它的finish()方法) — “true”表示应该结束,”false”表示不。默认值是”false”。

 

android:process

activity应该运行的进程的名字。通常,一个应用程序的所有组件运行在为该应用程序生成的默认的进程里。它与应用程序包同名。元素的process属性能够给所有的组件设置一个不同的默认值。但是每个组件可以覆盖该默认值,允许你扩展你的应用程序到多个进程里。

如果本属性指定的名字以冒号开始(‘:’),当需要的时候将会生成该应用程序的一个新的私有进程,activity将运行在那个进程里。如果进程名由一个小写字母开头,activity将运行在一个该名字的全局的进程里,如果它有那个许可的话。这样就允许不同的应用程序组件共享同一进程,从而降低资源消耗。

 

android:stateNotNeeded

    是否activity被销毁和成功重启并不保存状态;

    这个属性默认情况为false,若设为true,则当Activity重新启动时不会调用onSaveInstanceState()方法,同样,onCreate()方法中的Bundle参数将会用null值传进去,也就是说,Activity每次启动都跟第一次启动一样。这样,在某种特殊场合下,由于用户按了Home键,该属性设置为true时,可以保证不用保存原先的状态引用,节省了空间资源,从而可以让Activity不会像默认设置那样Crash掉。

 

android:screenOrientation

android的应用中,有时候需要限制横竖屏切换

android:screenOrientation="landscape"是限制此页面横屏显示, 

android:screenOrientation="portrait"是限制此页面数竖屏显示。

 

android:excludeFromRecents

任务是否在发起这个活动应该被排除在最近使用的应用程序的列表("最近的应用程序")。那是,当这个活动是根活动的一个新任务,这个属性决定了任务不应该出现在列表中最近的应用程序。设置"true"如果这个任务应该被排除在名单,设置"false"如果它应该被包括。默认值为"false"。

 

十一、扩展

1}Android提供的专有Activity;

   MapActivity、ListActivity、ExpandableListActivity、TabActivity;

2}Fragments-界面片段;

3}Loaders-界面异步加载机制;

转载于:https://www.cnblogs.com/androidsj/p/3972279.html

Excel四舍五入的坑我帮你踩完了:从ROUND函数到保留两位小数的完整避坑指南 本文深入解析Excel中ROUND函数在四舍五入操作中的常见陷阱,包括浮点数精度问题、舍入函数差异及连续舍入误差放大效应。通过真实财务案例,提供保留两位小数的完整避坑指南,帮助用户避免数据误差,确保财务计算的准确性。 阅读详情

相关推荐

Android Activity生命周期Intent机制详解

Activity作为Android四大组件之一,是构建用户界面的核心单元。其生命周期管理机制通过onCreate、onStart、onResume等回调方法,确保界面状态资源管理的正确性。Intent作为组件间通信的桥梁,支持显式隐式两种调用方式,配合Intent Filter实现灵活的跨组件调用。在移动开发实践中,合理运用Activity启动模式任务栈管理,能有效优化用户体验。通过ViewModel保存UI数据、正确处理配置变更等技巧,可以提升应用性能稳定性。这些基础概念技术广泛应用于电商、社交

weixin_34008805的博客 516

四大组件之(一)Activity-Intent Intentfilter

Intent是一个消息传递对象,您可以使用它从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件之间的通信,但其基本用例主要包括以下三个: 启动 ActivityActivity表示应用中的一个屏幕。通过将Intent传递给startActivity(),您可以启动新的Activity实例。Intent描述了...

binglan520的专栏 670

3.1、组件activity_intentintent-filter、Context详解

源码地址:https://github.com/ldy1993/ToolforAS.git 这一节,我们尽量理解activity_intentintent-filter、Context的原理。如果是初学者可以了解一下AndroidManifest.xml中activity标签下intent-filter对启动activity的意义。 1.1、activity的启动方式意图 ...

刘东阳的博客 1498

1、IntentIntentFilter详解

Intent(意图)在Android中是一个十分重要的组件,它是连接不同应用的桥梁纽带,也是让组件级复用(Activity Service)成为可能的一个重要原因。Intent的使用分为二个方面一个是发出Intent,另一个则是接收Intent用官方的说法就是Intent Resolving。本主将对IntentIntentFilter进行一些介绍。 Android 应用程序中有三

逆袭的青年的专栏 1484

android学习笔记——IntentIntentFilter

安卓的四大组件:     Activity    Service   BroadcastReceiver   ContentProvider     Activity、Service、BroadcastReceiver都是通过Intent传递     Intent作用:程序运行过程中连接两个不同的组件,通过Intent程序可向android传递某种请求,android通过请求的内容选择适当组

程序猿_三产 956

intentIntent-filter的概念作用

1、Intent的概念及作用 Intent——意图,它可以带有数据,在Android设备上的任何应用程序组件间相互作用,将不同组件连在一起的桥梁。 Intent作用: Intent最常用在启动新的Activity,不管是显式的(通过指定类来加载)还是隐式的(通过请求在一块数据上执行的动作)。Intent还可以用来广播消息,然后使用Broadcast Receiver来监听并响应这些Int

无聊的专栏 9659

别让组件变成“孤岛”:用 Intent 串联 Android 四大组件的底层逻辑

Activity是看得见的脸,Service是看不见的腿,是协作的管道。但它们之间?答案就是Intent——Android 组件通信的"信使"。

2301_76797664的博客 575

Android面试相关

Android 的四⼤组件有哪些? Activity、Service、ContentProvider、BroadcastReceiver。
 请描述下 Activity 的⽣命周期? onCreate、onStart、onResume、onPause、onStop、onDestroy、onRestart。 程序横竖屏切换,Activity的生命周期: 1.AndroidManifest没...

qq_41898048的博客 710

Android学习参考

收到一些朋友的微博私信,说能不能给Android新手们一些指导,我只能说指导谈不上,毕竟我也很多东西正在学习中,此同时一大学同学准备转行Android,可以说是从头开始,那么我就姑且以一个过来人的身份给一些建议吧,只希望在学习的过程中能够少走写弯路吧。 硬件 电脑–推荐Mac 首先声明我不是果粉,个人Windows,Linux,Mac OX系统均用过, 只能说Windows上面

147

安卓期末考试

安卓期末考点

qq_21315871的博客 457

Android面试题整理

最近找实习,狠狠恶补了一下Android基础。整理出一份文档来。分享一下…… 因为是准备来面试的答题的,所以很多都是口语化,并且只说出一个大概,后面每天拿出一个来详细写。 话说Android面试,感觉java才是重点啊,好多都是问java问题的。 基础真的很重要!!!【android5.0】 碎片化的问题开始得到改善 系统风格更偏向扁平加拟物 全新的通知栏,优先显示重要通知 不同数据独

u010255127的专栏 565

5 ActivityIntent

5 ActivityIntent

DaB210的博客 1727

Android基础-四大组件activity(基础)

Android四大组件分别为:1.活动Activity,2.服务Service,3.广播Broadcast Receiver,4.内容提供器Content Provider 此文章后面不完整,有时间还会补全,简书id同名,文章同步。 Activity基础 1.定义:Activity是一个包含视图界面的应用程序组件,负责用户交互。 这是选择empty activity后新建一个项目,android...

小蜉蝣星蔚的博客 5991

安卓开发-03-四大组件

Android开发的四大组件

ning_xiao_xuan的博客 4790

Android5.0报错Caused by: java.lang.IllegalArgumentException

在Android中该错误是出现在5.0以上隐式启动四大组件时涉及到的兼容问题。以上代码在5.0以下系统中是正常的,但是在5.0及以上则会出现如下异常:原因是以为5.0的兼容问题,在5.0以上的版本中使用隐式启动四大组件需要指定包名:...

l10408206的博客 1499

Android四大组件详解

Android四大组件详解 文章目录Android四大组件详解四大组件的不同点一、Activity二、Service三、Broadcast Receiver四、Content Provider四大组件相同点4大组件的注册4大组件的激活4大组件的关闭android中的任务(activity栈) Android四大组件分别是活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)内容提供器(Content Provider)。 活动(activity)是所有A

爱笑的博客 1万+

2025年最详细的android教学—四大组件Activity

2025年最详细的安卓开发教学。安卓四大组件之—Activity教学。叫你轻松学会安卓开发

yyyCode的博客 1744

Android Activity启动流程一:从IntentActivity创建

Activity 是 android 四大组件之一,很有必要知道它的启动过程,我们在上一篇文章中介绍了 APP的启动流程,里面大概讲到了Activity的 启动流程,在本文中,我们系统的再总结一下,当成一个记录。

fumeidonga的博客 6369
上一篇: 4、什么构成了我们Android应用程序?(七大件)
下一篇: 7、四大组件之二-Service高级
dianwei5413
博客等级 码龄10年 3粉丝 208原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值