• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 从源码的角度理解四大组件的工作过程——Android开发艺术探索笔记

从源码的角度理解四大组件的工作过程——Android开发艺术探索笔记

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了角度突破线指标源码,五日均线角度源码,江恩角度线公式源码,江恩角度线指标源码,角度源码等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

从源码的角度理解四大组件的工作过程——Android开发艺术探索笔记


系统对四大组件的过程进行了很大程度的封装,日常开发中并不需要了解底层的工作原理,那么研究这些原理的意义在哪里呢?

如果你想在技术上更进一步,那么了解一些系统的工作原理是十分必要的,也是开发人员日后成长为高级工程师所必备的技术能力。 Android作为一个优秀的基于Linux操作系统,其内部一定有很多值得我们学习的地方,通过对Android操作系统的学习对提高开发人员的内功有很大的好处。 如果你从事Android Rom开发,那就没什么好说的了,看源码吧。

本文侧重于对四大组件工作过程的分析,通过分析他们的工作过程理解系统内部运行机制,加深我们对Android整体系统结构的认识。

Android相关部分的源码实在是太多,全部贴上了太过繁琐,所以借用了amurocrash同学的UML图使得整个流程更加容易理解。

四大组件的运行状态

Activity的主要作用是展示一个界面并和用户交互,它扮演的是一种前台界面的角色。 Service是一种计算型组件,用于在后台执行一系列计算任务。Service有两种状态:启动状态和绑定状态。启动状态时的Service不需要与外界交互,绑定状态的Service可以方便的和Service组件进行通信。Service是运行在主线程中的,因此耗时的后台计算仍然需要在单独的线程中去完成。灵活采用stopService和unBindService这两个方法才能完全停止一个Service组件。 BroadcastReceiver是一种消息型组件,用于在不同的组件乃至不同的应用之间传递消息。广播注册有静态和动态两种方式,动态注册通过Context.registerReceiver()来实现,不需要时通过Contex.unRegisterReceiver()来解除广播,这种方式必须要应用启动才能注册;静态注册则在AndroidManifest文件中进行,应用安装时会被系统解析,不需要启动应用就可接收广播。匹配过程是通过来描述的。 ContentProvider是一种共享型组件,用于向其他组件乃至其他应用共享数据。它内部维持着一份数据集合,并需要实现增删改查这四种操作,这个数据集合既可以通过数据库来实现,也可以采用其他类型来实现,比如List,Map等。需要注意的是,增删改查要处理好线程同步,这几个方法是在Binder线程池中被调用的,另外,ContentProvider不需要手动停止。

Activity的工作过程

UML图

注<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCsb0tq9BY3Rpdml0ebXE1ebKtcq1z9bKx9PJQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKS5zdGFydEFjdGl2aXR5t723qMC0zeqzybXEoaPV4rj2t723qLe1u9hBY3Rpdml0eU1hbmFnZXJTZXJ2aWNloaMgQWN0aXZpdHlNYW5hZ2VyU2VydmljZaOoQU1To6m8zLPQ19RBY3Rpdml0eU1hbmFnZXJOYXRpdmWjrLb4QWN0aXZpdHlNYW5hZ2VyTmF0aXZlvMyz0NfUQmluZGVysqLKtc/WwctJQWN0aXZpdHlNYW5hZ2Vy1eK49kJpbmRlcr3Tv9qjrNLytMtBTVPSssrH0ru49kJpbmRlcqGjIEFNU9XiuPZCaW5kZXK21M/zssnTw7WlwP3Eo8q9ttTN4szhuamjrLXa0ru0zrX308PL/LXEZ2V0t723qMqxu+HNqLn9Y3JlYXRlt723qLP1yry7r6OsuvPQ+LX308PW0NaxvdO3tbvY1q7HsLS0vai1xLbUz/OhoyC0021ha2VBcHBsaWNhdGlvbrXEyrXP1r/J0tS/tLP2o6zI57n7QXBwbGljYXRpb27S0b6tsbu0tL2ouf3By6OsxMfDtL7Nsru74dTZ1ti4tLS0vaijrNXi0rLS4s6218XSu7j206bTw9a709DSu7j2QXBwbGljYXRpb2621M/zoaNBcHBsaWNhdGlvbrXEtLS9qNKyysfNqLn9SW5zdHJ1bWVudGF0aW9uwLTN6rPJtcSjrNXiuPa5/bPMus1BY3Rpdml0ebbUz/O1xLS0vai5/bPM0rvR+aOstrzKx82ouf3A4LzT1NjG98C0yrXP1rXEoaMgQ29udGV4dEltcGzKx0NvbnRleHS1xL7fzOXKtc/Wo6xDb250ZXh0SW1wbMrHzai5/UFjdGl2aXR5tcRhdHRhY2i3vbeowLS6zUFjdGl2aXR5vajBornYwaq1xKOs1NphdHRhY2i3vbeo1tBBY3Rpdml0ebu5u+HN6rPJV2luZG93tcS0tL2osqK9qMGi19S8urrNV2luZG93tcS52MGqo6zV4tH5tbFBY3Rpdml0eb3Tyty1vcrCvP6+zb/J0tS0q7XduPh3aW5kb3fBy6GjDQo8aDEgaWQ9"service的工作过程">Service的工作过程

启动过程

启动过程

绑定过程
这里写图片描述
注
- Service有两种状态:启动状态和绑定状态,两种状态是可以共存的。

BroadcastReceiver的工作过程

BroadcastReceiver的工作过程包括广播注册过程、广播发送和接收过程。
动态注册
这里写图片描述

发送接收
这里写图片描述

注:

静态注册是由PackageManagerService(PMS)在应用安装的时候完成整个注册过程的,除广播以外,其他三大组件也都是在应用安装时由PMS解析并注册的。 广播的发送有几种类型:普通广播、有序广播和粘性广播,有序广播和粘性广播与普通广播相比具有不同的特性,但是发送和接收过程是类似的。 FLAG_INCLUDE_STOPPED_PACKAGES:广播会发送给已经停止的应用,FLAG_EXCLUDE_STOPPED_PACKAGES广播不会发送给已经停止的应用 从Android 3.1开始,处于停止状态的应用无法接受到开机广播。

ContentProvider

启动过程

这里写图片描述

当ContentProvider所在的进程启动时,会同时被启动并被发布到AMS中,需要注意的是,这个时候它的onCreate要先去Application的onCreate执行,这在四大组件中是一个少有的现象。 用启动的入口为ActivityThread的main方法,main方法会创建ActivityThread实例并创建主线程消息队列。 attach方法中远程调用AMS的attachApplication方法,并提供ApplicationThread用于和AMS的通信。 attachApplication方法会通过bindApplication方法和H来调回ActivityThread的handleBindApplication,这个方法会先创建Application,再加载ContentProvider,然后才会回调Application的onCreate方法。 ContentProvider的multiprocess属性决定了ContentProvider是否是单例(false时),一般都用单例。 ontentResolver的具体类是ApplicationContentResolver,当ContentProvider所在进程未启动时,第一次访问它会触发ContentProvider的创建以及进程启动。

Query流程

这里写图片描述

insert,delete和update方法类似,这里就不在分析了。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 从源码的角度理解四大组件的工作过程——Android开发艺术探索笔记

相关文章

  • 2017-05-26udp connect 总结
  • 2017-05-26ListView嵌套出现的问题,listview嵌套出现
  • 2017-05-26Android开发技巧之Camera拍照功能
  • 2017-05-26使用Gradle动态配置资源,gradle动态资源
  • 2017-05-26Butter Knife使用详解,butterknife
  • 2017-05-26SharedPreferences详解,sharedpreferences
  • 2017-05-26硅谷社交3--登录页面,硅谷社交3--
  • 2017-05-26HBase Thrift2 CPU过高问题分析
  • 2017-05-222.4.1 ScrollView(滚动条)
  • 2017-05-26android不同的按钮一起点击崩溃解决,android一起

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 想要了解Kotlin,看这个就够了,想要Kotlin,
    • 二维码积分兑换商城,积分兑换商城
    • android学习第一天(android的介绍和基础):,android第一天
    • Android:手把手教你 实现Activity 与 Fragment 相互通信(含Demo)
    • Android程序中使用iconfont心得,androidiconfont
    • Android开发学习之路--异步消息Handler,Message,Looper和AsyncTask之初体验
    • Android View的绘制流程,androidview绘制
    • Android Studio 之 注释模板,androidstudio
    • 项目优化之热更新,项目优化
    • 使用Merge INTO优化SQL,性能提升巨大

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有