Android基础组件之界面组件和intent对象 | 青训营笔记

108 阅读7分钟

这是我参与「第四届青训营」笔记创作活动的第1天。

前言:本人是一名安卓小白,正在跟随青训营的课程一步步认识和学习有关知识,本篇笔记是在上课时边听边记,并在下课后结合其他平台的相关视频,整理的Android基础组件中界面组件和intent对象的知识简单的总结,有纰漏之处还请大家指出,十分感谢。

Android基本组件

Android的基本组件包括了界面组件、服务组件、广播组件以及数据组件。按照课程继续往下看,实际上组件的对象都具有生命周期,这也是老师讲述的重点。

界面组件

Activity组件

其中最重要的一个组件:Activity组件。

Activity可以认为是一个界面容器,提供一个与用户交互的界面。平时生活中例如游戏的启动页面、短视频app和新闻类app甚至桌面都少不了它的身影,我们一操作,就会产生响应。大多数我们能看到的部分都通过Activity进行承载。

Activity也承担了程序入口这个作用,例如手机桌面上的app图标都是它来承载的,在我们点击之后才可以进入,还有拍照和发短信等我们常用的功能。

而像是西瓜视频和某字母站(隔壁某二次元站不知道能不能提:p)等这类一个应用包含多个界面的app实际上就是包含多个Activity。

更加浅显易懂的例子就是,平时我们在手机上的输入法,咱们打字的时候每点击一个字母,他就会在输入法上方跳出相应的字母,并且发现不对点击删除时输入法最上的显示也会跟着删除,我认为这就是日常中我们最频繁与Activity交互的地方。

Activity基本用法

在Android Studio中,Activity要声明在程序清单当中,使用Java或者kotlin写出Activity的main文件。之后书写布局文件,最后在Activity里进行绑定。

生命周期

Activity生命周期的回调方法,较常用的有onCreate()、onResume()、onStart()、onRestart()、onStop()、onPause()和onDestory()这六种。而onSaveInstanceState()和onRestoreInstanceState()这两种方法暂时仅稍作了解。

Activity生命周期中的界面有四种状态,分别是:运行,暂停,停止以及死亡。

运行状态:可见并且可以操作。这个状态是生命周期中已经调用了onCreate()、onStart()、onResume(),并且直到调用onResume()界面才得以实现。 这是最常见的一个状态,例如我们打开了抖音,正在美美的刷视频中,我们不仅可以看到界面,还可以有上滑下滑,点击喜欢和查看评论区等操作。

暂停状态:该状态下可以说生命周期到了onPause()的状态,下一个回调方法是onStop()或者onDestory()。接下来就是界面可见但是不可操作。还是抖音的例子,我拍了一个视频,但是效果并不好,此时我去草稿箱删除作品,就会跳出: 7BC3CFC97C58683ADEF72D22AADFD964.jpg 此时我们原本的界面就处于暂停,可见但不能进行操作,Activity产生失焦,正如原本的界面好像灰蒙蒙一片,并且被遮挡了一部分。

停止状态:来到该状态意味着在调用了onPause()的下一个回调方法是onStop(),此时界面已经不可见了,但是界面仍然存在。这次举的例子是大家常用的浏览器,点开手机浏览器,我们可以创建多个窗口。

比如我创建了两个窗口,一个窗口用来看某某高手的小说,另一个窗口用来看某族的小说,我可以在这两个窗口中随意切换并且当我在看其中一个窗口时,另一个窗口是不会显示的即Activity不会显示,但另一个窗口仍然存在。(ps:如果觉得这个仍然有点繁杂,那么其实更简单的例子就是咱们小手往上一划拉,把app退到后台了,看不见了但是仍然存在哈)

死亡状态:这个状态一般也是生命周期的最后,回调方法onDestory()。此时Activity被销毁,释放Activity的所有资源。在手机中其实就是我们点击了浏览器窗口的那个x关闭键,一直点返回键或者小手往左划拉(指全面屏),我们完完全全退出了该界面,这个界面也被销毁。

其实,在回调方法onStop()的下一个回调可以是onRestart(),此时会重启已经停止的Activity,那么下一个回调方法就是onStart()。就像是我上面所说的切换浏览器窗口。

Fragment组件

在界面组件中还有另外常用一个组件,Fragment组件。让Fragment组件来承载不同的页面,速度会比Acrivity组件速度更快,可见课程当中给它的备注也是轻量级的界面容器。

生命周期

Fragment生命周期的回调方法与Activity生命周期的回调方法是一样的,并且额外还有onAttach()、onCreateView()、onActivityCreated()、onDetroyView()和onDetach()这五种回调方法。

其中onAttach()、onActivityCreated()、onDetach()这三个方法分别是:Fragment和Activity建立关联时调用、Activity的onCreate()方法已返回时调用以及Fragment和Activity取消关联时调用,是关联Fragment和Activity的方法。

并且Fragment的生命周期也与Activity类似,只是在一开始就调用了onAttach(),紧接着onCreat()之后调用onCreateView()和onActivityCreated(),下一个调用是onStart()回调方法。之后直到onStop()的过程都与Activity生命周期一致,回调方法onStop()后调用onDestoryView()再调用onDestory(),最后调用onDetach()取消Fragment和Activity的关联。

与Activity交互

Fragment与Activity交互有两种形式,一是组件获取,二是数据传递。在此引用一下老师的课件:

Fragment获取Activity中的组件:

getActiity().findViewById(R.id.xxx)

Activity获取Fragment中的组件:

getFragment().findFragmentById(R.id.Fragment.xxx)

Activity传递数据给Fragment:

setArguments(Bundle Bundle)

Fragment传递数据给Activity:

a 通过对象直接传递(方法调用/接口调用)

b 通过viewmodel/handler/broadcast/eventbus等通信

Intent

Intent并不是Android的四大基础组件之一,但是它又在其中与Activity、Sevice和BroadcastReceiver这三个组件有着千丝万缕的关系,它们是通过Intent来通信的。

context.startActivity(intent);
在三个组件任一中启动另一个Activity。

context.startService(intent);
在这三个组件任一启动另一个Service。

context.startBroadcastReceiver(intent);

在这三个组件任一中启动另一个BroadcastReceiver。

Intent的基本用法

Intent也分为两类,分别是显示Intent和隐式Intent。

显示Intent使用setComponent/setClass来指定具体类,就像是加上Intent这个英文单词一样,它表露出的意图是很明显的。而隐式Internt也如其名,更加的隐晦委婉,不会和显式一样直接指出。

Intent的诸多属性当中,其中Component是直接类型,其余的Data、Type、Action、Flag和Extra等都是间接类型。

我的理解就是,平时和舍友出去吃饭,显式Intent就是我直接表明想吃火锅,而隐式就是我表示想吃一些又香又辣又热呼呼的有肉有菜的食物,如果理解有误希望各位指出tt。(这方法少用,容易被舍友锤)

我的学习感想

这节课仅仅一个半小时,包含的知识点有点过于庞大,给我这个安卓小白来了沉重一击,一堆不认识的方法还有组件夹杂在一块,搞得我头晕眼花,一度怀疑自己的理解能力出现了问题。但是知识再苦再累也得学啊,不然后期只能飙泪了,打开课件和相关文章还有某著名字母站大学进行理解,才磕磕绊绊写出了这一篇笔记,里面很多知识点我都举了非常浅显易懂的例子,也是希望日后我回来复习的时候能够及时回忆起来接下来。^^

希望大家可以指出我的笔记有疏漏和错误的地方,我会及时进行更正,非常感谢大家><。