前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >关于Android四大组件最权威最深刻最准确的解读(绝不标题党)

关于Android四大组件最权威最深刻最准确的解读(绝不标题党)

作者头像
非著名程序员
发布于 2018-02-02 11:33:43
发布于 2018-02-02 11:33:43
9320
举报
文章被收录于专栏:非著名程序员非著名程序员

这篇文章翻译自Aannie Hackborn发表在google+上的一篇post,她是google资深大牛,2005年就进入Android Framework团队。即使在google内部,论起对Android系统的理解把握,鲜有出其右者。在文章中,她深刻地阐明了Android设计四大组件的初衷,各个组件的目的作用,适用情景。我相信,读完此文,你会觉得重新认识了Android。如果想阅读原文,请在google+上搜索Aannie Hackborn。

“我应该怎样设计我的APP?我应该采用什么样的架构模式?我需要使用event bus吗?”

我们经常看到Android平台开发者询问在APP中采用什么设计模式和架构之类的问题。但是答案很可能会令你惊讶,那就是,我们(我们指的是Android Platform Team)对此并没有一个明确的观点,甚至可以说我们压根就没有观点。

你应该使用MVC还是MVP还是MVVM?我不知道。实际上,我在学校时只知道MVC,其他的架构模式是我临时google搜索后才写在这里的。

这也许令人吃惊,因为Android给人的感觉是,它对应当怎么写APP有着自己很强烈的看法,这种看法体现在它的Java APIs和四大组件等一些高级概念上,这些东西看上去组成了一个典型的应用开发框架,告诉我们开发者,你应当这样去实现你的功能。但实际情况是,根本不是这样。

我们可以将Android核心APIs(core APIs)叫做“系统框架”(system framework),而平台APIs(platform APIs)最主要的功能是定义APP应如何与操作系统交互,与APP内部运行逻辑毫不相关。

个人理解:可以简单地将core APIs看做操作系统内核,而将platform APIs看做我们常说的Android Framework。

这就是说,对于platform APIs,从开发者角度与从操作系统角度看其功能作用经常是不一致的,这很容易让人们在使用中感到困惑。

举例来说,我们来考虑一下操作系统是怎样定义“怎样运行一个APP”的。在一个经典的系统里,最基本的就是要求APP包含一个main方法,里面定义了自己要怎样运行:

个人理解:本文的核心思想就是说明,所谓的四大组件,只是让你的APP告诉操作系统,自己要怎样运行而已,跟怎样设计自己的APP,压根没有关系。传统的应用通过一个main方法,告诉操作系统:“嘿哥们,main方法就是我的入口,请从这个方法开始运行我。”而Android却给了你四个选择,每一个组件都是让操作系统运行你的APP的一种入口。

好了,操作系统要运行你的APP了,于是它调用你的main方法,然后你的应用就开始运行了,你可以做任何你想做的事情,直到你认为自己完成任务为止。请注意,这里要求你定义main方法,并不是要求你去做什么事,或是完成一个叫做main的功能,main方法所有的作用仅仅是提供一个APP运行入口而已。

但是在Android的世界,我们决定,我们不要一个明确的main方法作为APP的入口。因为我们需要让系统对APP怎样运行有更多的控制权。尤其是,我们希望构建一个这样的系统,在该系统中,用户永远不需要考虑开启和停止一个APP,而把这些事交给系统去管理。所以,系统需要知道更多的每个APP的内部运行情况,以便能够在需要的时候,以定义好的方式启动APP,即使该APP当时并不在运行。

个人理解:这个系统所需要了解的每个APP的内部运行情况,其实就是Manifest.xml文件中的内容。

为了达到这一点,我们将一个APP的main方法分解成几种系统可以与之交互的形式。这几种形式就是Activity,BroadcastReceiver,Service和ContentProvider APIs,广大的Android开发者都很熟悉它们。

这些类好像在告诉你,你的APP内部应当怎样工作,但这是一种误解!事实上,这些类只是定义你的APP需要怎样与系统交互(以及系统怎样协调你的APP与其他APP进行交互)。这种与系统的交互一旦开始,系统就不再关心你的APP内部是怎样运行了。

为了更好地说明这一点,让我们简要地看看这些APIs对于Android系统来说到底意味着什么。

Activity

这是一个APP与用户交互的入口。从系统的角度看,系统为Activity提供的关键交互动作是:

  1. 持续跟踪用户当前正在关心的(也就是显示在屏幕上的东西),以确保当前进程保持运行。 个人理解:这里,作者实际上的含义是,当你的应用被系统从Activity启动时,在Activity的start与stop状态之间,系统会确保这个Activity始终占据着设备的屏幕,并且确保你的应用绝不会被系统杀死。这是你从Activity启动自己的APP时,系统给予你的APP的一种承诺(just a promise)。
  2. 知道那些之前使用过的进程,这些进程包含着用户可能会返回获取的东西(stopped activities),并因此给予这些进程更高的优先级。
  3. 帮助应用处理进程被杀死的情况,以便用户能够返回到之前的activities,并且这些activities能够加载自己之前的状态 个人理解:很显然,系统所承诺的这种状态恢复能力,是依靠Activity的 onSaveInstanceState和onRestoreInstanceState方法,也就是说,你在Save方法中保存好你想在进程被杀死时想要保存的Activity状态,然后你就可以在Restore方法中获取这些状态以恢复Activity。当你把这些做完后,剩下的就是系统的事情了,系统会承诺,如果由于内存压力杀死了你的Activity所在的进程,那么当你返回时,系统会重建你的应用进程,并帮助你恢复之前Activity的状态。
  4. 提供一种在不同应用之间的用户流(user flow)的方式,当然这要靠系统来协调。最经典的例子就是分享功能的实现。

对于Activity来说,系统并不关心的是:

一旦系统从Activity入口进入到你的APP UI之中,系统将不再关心Activity内部逻辑的组织。你可以将所有的应用逻辑全放入这一个Activity中,比如你可以手动地改变它的views,使用fragments或者其他框架,你也可以把你的应用逻辑分拆成额外的内部activities。你也可以三者同时使用(指的是改变views,使用fragemnts,分拆成额外的activities)。这些事情系统是毫不关心的,只要你遵循Activity与系统之间的约定(在适当的状态下启动它,正确地保存/恢复它的状态)。

BroadcastReceiver

这是一种让系统在正常的用户流(user flow)之外,传递事件给APP的机制。最重要的是,因为这是另一个被精心定义的APP的入口,即使APP当前并不在运行,系统也可以将broadcasts传递给APP。所以,举例来说,一个APP可以提前调度一个alarm,以便通知用户一个马上到来的事件,通过将这个alarm传递给该APP的一个BroadcastReceiver,在alarm发生之前,APP都没必要运行。

对于BroadcastReceiver来说,系统并不关心的是:

在APP内部分发事件是一个与BroadcastReceiver接收事件完全不同的事,不管你是使用一些eventbus 框架,实现你自己的回调系统,还是任何其他方法...你都没有理由使用系统的广播机制,因为你并不是在App之间分发事件。(事实上,不使用系统的广播机制还有一个很好的原因,这会带来许多不必要的负担,而且使用全局广播机制来实现APP内部的事件分发会引发许多安全问题)。当然,我们也提供了一个LocalBroadcastManager便利类,它实现了一个纯粹的进程内的intent分发系统,而且它的API与系统BroadcastReceiver API很相似,如果你喜欢当然也可以使用。但再次强调,你没有理由在仅仅发生在APP中的事情上使用BroadcastReceiver机制。

Service

当由于各种各样的原因需要APP在后台运行时,Service就是一个这样的入口。有两种语义上截然不同的Services(一种是Started Service,一种是Bound Service)来告诉系统怎样管理一个APP。

Started Service就相当于因为某种原因你的APP告诉系统:“系统大哥,我有事要干,请让我一直运行,直到我告诉你我干完了。”(这里的我相当于APP,因为此时的Service就代表了APP,而系统是只跟APP对话的)这里的“事”可能是在后台同步数据或者在用户离开APP后播放音乐。

同时,Started Service又有两种,一种是用户可感知的,一种是用户无法感知的。这两种不同的Started Service会让系统对它们采取不同的管理方式。

(此图为本人草画,方便大家理解)

  1. 播放音乐的Service是用户可以直接感知的,所以Service会对系统说:“我想成为前台(foreground),并且在通知栏挂一个通知,让用户能够感到我的存在。”这种情况下,系统知道,必须使出吃奶的劲保证这个service进程的运行,因为如果这个进程宕掉,用户会不高兴。
  2. 另一种后台Service是用户无法直接感知的,所以系统可以更加灵活地处理这个Service的进程。在系统急需RAM以保证用户眼前的事情正常运转时,系统可能会允许该进程被杀死(然后可以在之后有能力时再启动该Service)。

Bound Service 之所以会运行,是因为其他APP或者系统要使用它。通常情况该Service都会给其他进程提供一个API。在这种情况下,系统知道这两个进程之间存在一个依赖关系。所以,如果进程A绑定了进程B中的一个Service,系统就会知道,它要为进程A保证进程B和它里面的Service正常运行。进一步讲,如果进程A是用户当前正在关心的进程,系统将知道把进程B也当作用户正在关心的进程。

由于Service的灵活性(有好也有坏),Service已经成为各种类型的系统中一个非常有用的构建块(building block)。实时墙纸,通知监听器和许多其他的系统核心特性都被构建为Service,当它们需要运行时,系统再绑定它们。

对于Service,系统不关心的是:

Android不关心你的APP中那些不影响它怎样对待你的进程的事,所以这些情况下,是没有理由使用Service的。举例来说,如果你想在后台为你的UI下载数据,你不应该使用Service来做这件事----做这些事时,不告诉系统保持你的进程运行真的是很重要的,因为确实没有必要!!这样做也让系统有更多的自由去管理你的进程,以便与用户正在做的事情相协调(注:可以让系统在内存紧急的情况下,杀死你的进程,优先保证用户正在做的事情,这里忍不住吐槽一句:每个APP肯定都会觉得自己是最重要的哈,Google开发Android的人也是典型的理想主义!

如果你只是简单地开启了一个后台线程来做数据下载(或者其他不是Service的办法),你将会得到你想要的结果:如果用户在你的UI里,系统将会确保你的进程运行,所以下载绝不会被中断。当用户离开了你的UI,你的进程仍将被保持(缓存)因而可以继续下载数据,只要RAM不告急就行。

同样,为了将你的APP的不同部分连接起来,你也没有理由去绑定同一个进程中的Service。这样做倒是没有什么明显的害处,因为系统会看到,该进程对自己有一个依赖,它将会忽略这个依赖,仍将你的APP当作普通进程看待。但是这样做对你和系统实际上都是没有必要的。作为替代,你可以使用单例或者其他进程内的模式来将你的APP的各部分连接到一起。

ContentProvider

最后,ContentProvider是一个专用的办法,用来将你的APP的数据公开到其他地方。人们通常会将它们当作对数据库的抽象,因为有许多的API和支持库就是这样使用ContentProvider的。但是从系统设计的角度,这并不是ContentProvider的初衷。

对于系统来说,ContentProvider实际上是一个入口,用于获取一个APP内部的公开的被命名的数据项(data items),每个数据项都被一个URI scheme所标识。这样,APP就可以决定怎样将自己的数据项映射到一个URI scheme,怎样将这个URI scheme公开给其他APP或者系统,好让APP或者系统使用这个URI scheme来获取自己内部的数据。这将让系统能够用一些很独特的方式来管理你的APP:

  1. 将URI scheme公开出去并不要求你的APP一直保持运行,所以即使你的APP没有运行,这些URI scheme也可以公开给任何APP和系统。只有当某个人告诉系统:“请把这个URI代表的数据拿给我。”时,系统将会让你的APP运行起来向你索要对应于URI的数据项并返回给请求者。
  2. 这些URIs也提供了一个很重要的细粒度的安全模型。比如,你的APP可以将代表一张你的APP内的图片的URI放在剪贴板上,但是让它的ContendProvider 保持在锁定状态,所以没有人能够自由地获取它。当其他APP从剪贴板上获取了这个URI,并向系统请求获取对应的图片时,系统可以给它一个临时的“URI许可”,以便让它仅能获取该URI所对应的图片,你的APP的其他内容都是安全的。

对于ContentProvider,系统不关心的是:

在一个ContentProvider背后,你的APP如何管理你的数据,系统毫不关心;如果你不需要SQLite database中的结构化数据,你可以不使用SQLite。比如,FileProvider帮助类可以让你的APP内的原始文件轻松通过一个ContentProvider获取。

同样,如果你不打算公开你的APP中的数据给其他人使用,你也可以不实现ContentProvider。是这样的,因为围绕着ContentProvider,有许多便利的方法,这些方法让你很容易地将数据存入SQLite database,并用这些数据填充UI元素如ListView。但是如果这些方法让你觉得实现自己的想法有许多困难,你可以不使用它们,请自由地选择一个对你的APP来说合适的数据模型。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 非著名程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android面试
要想知道如何使用多进程,先要知道Android里的多进程概念。一般情况下,一个应用程序就是一个进程,这个进程名称就是应用程序包名。我们知道进程是系统分配资源和调度的基本单位,所以每个进程都有自己独立的资源和内存空间,别的进程是不能任意访问其他进程的内存和资源的。那如何让自己的应用拥有多个进程?很简单,我们的四大组件在AndroidManifest文件中注册的时候,有个属性是android:process 这里可以指定组件的所处的进程。默认就是应用的主进程。指定为别的进程之后,系统在启动这个组件的时候,就先创建(如果还没创建的话)这个进程,然后再创建该组件。你可以重载Application类的onCreate方法,打印出它的进程名称,就可以清楚的看见了。再设置android:process属性时候,有个地方需要注意:如果是android:process=":deamon",以:开头的名字,则表示这是一个应用程序的私有进程,否则它是一个全局进程。私有进程的进程名称是会在冒号前自动加上包名,而全局进程则不会。一般我们都是有私有进程,很少使用全局进程。他们的具体区别不知道有没有谁能补充一下。 使用多进程显而易见的好处就是分担主进程的内存压力。我们的应用越做越大,内存越来越多,将一些独立的组件放到不同的进程,它就不占用主进程的内存空间了。当然还有其他好处,有心人会发现Android后台进程里有很多应用是多个进程的,因为它们要常驻后台,特别是即时通讯或者社交应用,不过现在多进程已经被用烂了。典型用法是在启动一个不可见的轻量级私有进程,在后台收发消息,或者做一些耗时的事情,或者开机启动这个进程,然后做监听等。还有就是防止主进程被杀守护进程,守护进程和主进程之间相互监视,有一方被杀就重新启动它。应该还有还有其他好处,这里就不多说了。 坏处的话,多占用了系统的空间,大家都这么用的话系统内存很容易占满而导致卡顿。消耗用户的电量。应用程序架构会变复杂,应为要处理多进程之间的通信。这里又是另外一个问题了。
Demo_Yang
2018/10/15
1K0
Android开发之路--(2)--Android四大组件
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/47214197
Hankkin
2018/09/06
8570
Android面试题(四大组件篇)[通俗易懂]
A会回调onPause()>>onStop(),透明则不会调用onStop(),对话框则不会调用onStop()
全栈程序员站长
2022/08/31
1K0
Android面试题(四大组件篇)[通俗易懂]
Android四大组件全面解析,夯实基础。
为什么onDestroy没有执行? 用一句话概述 不要在onStop,onDestory中保存重要数据;最近任务栏清除app,app的onDestory不会掉用是因为该Binder调用是非阻塞的,导致App被杀死,所以onDestory没来得及调用 详细链接参考 https://blog.csdn.net/u013122625/article/details/77916482
Petterp
2022/02/09
9450
Android四大组件全面解析,夯实基础。
「Android」四大组件,你真的都掌握了?
ContextImpl 作为 Context 的抽象类,实现了所有的方法,我们常见的 getResources() , getAssets() , getApplication() 等等的具体实现都是在 ContextImpl 的
圆号本昊
2021/09/24
1.2K0
「Android」四大组件,你真的都掌握了?
android的四大主件
Android有四大组件:Activity、Service、Broadcast Receiver、ContentProvider。 Activity 做一个完整的Android程序,不想用到Activity,真的是比较困难的一件事情,除非是想做绿叶想疯了。因为Activity是Android程序与用户交互的窗口,在我看来,从这个层面的视角来看,Android的Activity特像网站的页面。 Activity,在四大组件中,无疑是最复杂的,这年头,一样东西和界面挂上了勾,都简化不了,想一想,独立做一个应用有多少时间沦落在了界面上,就能琢磨清楚了。从视觉效果来看,一个Activity占据当前的窗口,响应所有窗口事件,具备有控件,菜单等界面元素。从内部逻辑来看,Activity需要为了保持各个界面状态,需要做很多持久化的事情,还需要妥善管理生命周期,和一些转跳逻辑。对于开发者而言,就需要派生一个Activity的子类,然后埋头苦干上述事情。对于Activity的更多细节,先可以参见:reference/android/app/Activity.html。后续,会献上更为详尽的剖析。 Service 服务,从最直白的视角来看,就是剥离了界面的Activity,它们在很多Android的概念方面比较接近,都是封装有一个完整的功能逻辑实现,只不过Service不抛头露脸,只是默默无声的做坚实的后盾。 但其实,换个角度来看,Android中的服务,和我们通常说的Windows服务,Web的后台服务又有一些相近,它们通常都是后台长时间运行,接受上层指令,完成相关事务的模块。用运行模式来看,Activity是跳,从一个跳到一个,呃...,这有点像模态对话框(或者还像web页面好了...),给一个输入(抑或没有...),然后不管不顾的让它运行,离开时返回输出(同抑或没有...)。 而Service不是,它是等,等着上层连接上它,然后产生一段持久而缠绵的通信,这就像一个用了Ajax页面,看着没啥变化,偷偷摸摸的和Service不知眉来眼去多少回了。 但和一般的Service还是有所不同,Android的Service和所有四大组件一样,其进程模型都是可以配置的,调用方和发布方都可以有权利来选择是把这个组件运行在同一个进程下,还是不同的进程下。这句话,可以拿把指甲刀刻进脑海中去,它凸显了Android的运行特征。如果一个Service,是有期望运行在于调用方不同进程的时候,就需要利用Android提供的RPC机制,为其部署一套进程间通信的策略。 Android的RPC实现,如上图所示(好吧,也是从SDK中拿来主义的...),无甚稀奇,基于代理模式的一个实现,在调用端和服务端都去生成一个代理类,做一些序列化和反序列化的事情,使得调用端和服务器端都可以像调用一个本地接口一样使用RPC接口。 Android中用来做数据序列化的类是Parcel,参见:/reference/android/os/Parcel.html,封装了序列化的细节,向外提供了足够对象化的访问接口,Android号称实现非常高效。 还有就是AIDL (Android Interface Definition Language),一种接口定义的语言,服务的RPC接口,可以用AIDL来描述,这样,ADT就可以帮助你自动生成一整套的代理模式需要用到的类,都是想起来很乏力写起来很苦力的那种。更多内容,可以再看看:guide/developing/tools/aidl.html,如果有兴致,可以找些其他PRC实现的资料lou几眼。 关于Service的实现,还强推参看APIDemos这个Sample里面的RemoteService实现。它完整的展示了实现一个Service需要做的事情:那就是定义好需要接受的Intent,提供同步或异步的接口,在上层绑定了它后,通过这些接口(很多时候都是RPC的...)进行通信。在RPC接口中使用的数据、回调接口对象,如果不是标准的系统实现(系统可序列化的),则需要自定义aidl,所有一切,在这个Sample里都有表达,强荐。 Service从实现角度看,最特别的就是这些RPC的实现了,其他内容,都会接近于Activity的一些实现,也许不再会详述了。 Broadcast Receiver 在实际应用中,我们常需要等,等待系统抑或其他应用发出一道指令,为自己的应用擦亮明灯指明方向。而这种等待,在很多的平台上,都会需要付出不小的代价。 比如,在Symbian中,你要等待一个来电消息,显示归属地之类的,必须让自己的应用忍辱负重偷偷摸摸的开机启动,消隐图标隐藏任务项,潜伏在后台,监控着相关事件,等待转瞬即逝的出手机会。这是一件很发指的事情,不但白白耗费了系统资源,还留了个流氓软件的骂名,这真是卖力不讨好的正面典型。 在Android中,充分考虑了广泛的这类需
用户2192970
2019/02/21
4260
android四大组件
Android开发的四大组件,本文主要分为一、Activity详解 二、Service详解 三、Broadcast Receiver详解 四、Content Provider详解 外加一个重要组件 intent的详解。 一、Activity详解 Activty的生命周期的也就是它所在进程的生命周期。
黄啊码
2020/05/29
1K0
Android四大组件安全问题
Activity AndroidMainfest 配置 android:exported="false", 其它应用不可以调用 检测栈顶 Activity, 防止页面被劫持 WebView 加载网页发生证书认证错误时, 会调用 WebViewClient 类的 onReceivedSslError 方法, 如果该方法实现调用了 handler.proceed() 来忽略该证书错误, 则会受到中间人攻击的威胁, 可能导致隐私泄露。当发生证书认证错误时, 采用默认的处理方法 handler.cancel()
续写经典
2018/08/28
9570
Android四大组件详解
Android四大组件详解 Activity(活动) 概念 Service(服务) 概念 定义与作用 Content Provider(内容提供器) 介绍 作用 系统的Content Provider 自定义Content Provider Broadcast Receiver广播 概述 广播的作用 广播接收者的创建 广播接收者的类型 注册广播的两种方式 静态注册和动态注册的区别 有序广播和无序广播的区别 有序广播接收者们的优先级 有序广播的拦截和篡改 简单介绍:Android四大核心组件指的是 Acti
是阿超
2022/11/23
6.4K0
Android四大组件之ContentProvider
Android四大组件之ContentProvider ContentProvider 安卓应用程序默认是无法获取到其他程序的数据,这是安卓安全学的基石(沙盒原理)。但是经常我们需要给其他应用
xiangzhihong
2018/01/26
1K0
Android四大组件之Activity
Hi,大家好,又见面啦,上一期我们讲了如何安装AS,是不是已经有小伙伴迫不及待的创建了自己的项目并开始尝试了呢?那么这一期我们主要为大家介绍Activity。作为Android的四大组件之一,Activity占据着非常重要的作用。本文将围绕Android的生命周期、启动模式、基本配置等方面进行介绍。
下码看花
2019/09/02
1K0
Android四大组件之Activity
Android四大组件
Android四大组件 0,综合帖 android四大组件(详细总结) 一个帖子学会Android开发四大组件 ppt Android四大核心组件 1,activity (1)Button Android开发之onClick事件的三种写法 - - 博客频道 - CSDN.NET android:onclick属性 - 一别经年 的个人空间 - 开源中国社区 Android 中OnClick的五种实现方式_百度文库 (2)BaseAdapter Ad
用户1733354
2018/05/22
7940
Android四大组件详解
Android四大组件分别为activity、service、content provider、broadcast receiver。
用户7557625
2020/07/15
6.8K0
Android四大组件之一Activity详解
Activity是Android应用的重要组成单元之一(另外三个是Service、BroadcastReceiver和ContentProvider),而Activity又是Android应用最常见的组件之一。通常一个Android应用需要N个Activity组成,Activity主要负责与用户交互
提莫队长
2019/03/01
6570
Android四大组件之一Activity详解
Android四大组件:关于Activity的知识都在这里了
关于内存泄漏 & 性能优化,请看系列文章: Android性能优化:这是一份全面&详细的内存优化指南 Android性能优化:手把手带你全面了解 内存泄露 & 解决方案 Android性能优化:那些关于Bitmap图片资源优化的小事 Android性能优化:手把手带你全面了解 绘制优化 Android性能优化:布局优化 详细解析(含、、讲解 )
Carson.Ho
2019/02/22
7040
Android四大组件之ContentProvider
Hi,大家好,我们又双叒叕见面啦,为了让大家快速的学习Android知识,我们每天都在更新文章,相信小伙伴们已经开始眼熟我们了!这一期我们讲解ContentProvider(内容提供者)相关知识,他也是我们近期更新的Android四大组件中最后一个。话不多说,让我们赶紧开始学习吧~
下码看花
2019/09/02
6650
Android四大组件之ContentProvider
精选Android中高级高频面试题:四大组件及Fragment原理
延伸:从整个生命周期来看,onCreate和onDestroy是配对的,分别标识着Activity的创建和销毁,并且只可能有一次调用; 从Activity是否可见来说,onStart和onStop是配对的,这两个方法可能被调用多次; 从Activity是否在前台来说,onResume和onPause是配对的,这两个方法可能被调用多次; 除了这种区别,在实际使用中没有其他明显区别;
Android技术干货分享
2020/04/21
2.1K0
精选Android中高级高频面试题:四大组件及Fragment原理
Android四大组件之Service
Hi,大家好,上一期我们讲了如何使用BroadcastReceiver,这一期我们讲解Android四大组件之Service相关知识。每天一篇技术干货,每天我们一起进步。
下码看花
2019/09/02
8770
Android四大组件之Service
笔记——四大组件(十五)
1、Activity是一种展示型组件。Activity的启动由Intent触发,其中Intent可以分为显式Intent和隐式Intent,显式Intent可以明确地指向一个Activity组件,隐式Intent则指向一个或多个目标Activity组件。
木溪bo
2019/02/25
7260
笔记——四大组件(十五)
Android 开发基础常识
可以通过bindService的方式,先在Activity里实现一个ServiceConnection接口,并将该接口传递给bindService()方法,在ServiceConnection接口的onServiceConnected()方法 里执行相关操作。
zhangjiqun
2024/12/16
1240
Android 开发基础常识
相关推荐
Android面试
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档