android架构

android系统架构及组件介绍

心已入冬 提交于 2019-11-30 12:25:08
1、andoid系统架构采用分层架构思想,包括应用程序层,应用框架层,系统库和android运行时,lInux内核 2、组件介绍 (1)view:andoid应用中所有用户界面元素都是使用View和ViewGroup对象构建而成,view对象用于屏幕上绘制可供用户交互的内容 (2)activity是一个应用程序组件,表示用户界面的单一屏幕,用户可以用来交互为了完成某项任务,activity相当于web应用程序中的页面,activity提供一个可视化区域,在当前区域中可以放置各种控件,一个app一般由于若干个activity组成,一般会有一个主activity (3)Service是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件,例如常见的音乐播放器 (4)BroadcastReceiver是一种用于响应系统范围广播通知的组件 广播分为两类: a、普通广播:完全异步,可以在同一时刻被所有接受者接收到 b、有序广播:接受者按照预先声明的优先顺序一次接受广播 (5)Intent负责组件的启动,想启动某个组件,必须向系统传递一则消息,Intent就是一个消息传递对象,一般有以下用途: a、启动activity:activity表示应用中的一个屏幕,通过将intent传递给startActity(),就可以启用新的activity实例 b、启动服务:通过将 Intent 传递给

【Android进阶】浅析Android Binder机制

北城余情 提交于 2019-11-30 10:32:32
在Android开发过程中,Binder的身影无处无处不在,我们编写的程序都使用过Binder机制(例如startActivity的执行过程)但是请问你知道什么是Binder么?在开发过程中你察觉到它的存在了么? 什么是Binder Biner翻译过来是“胶水“的意思,这个翻译分形象。Binder的主要工作就是淡化了进程边界,淡化了进程间通信的过程。要是想更好的理解Binder就必须从Linux进程谈起。 Linux进程 为了保护进程空间不被别的进程破坏或者干扰,Linux中的进程是相互独立的,也就是所谓的进程隔离。(而且一个进程的内存空间还被分为了用户空间和内核空间,二者也是相互隔离的。这里不做探讨)所以在Linux中,进程与进程之间是相互隔离的,而且进程中的用户和内核空间也是隔离的。 也就是说为了安全和独立,一个进程是不能直接操作或者访问另外一个进程的内存空间的。他们之间既然是隔离的,在需要通信、协作的时候就需要使用进程间通信技术(即IPC,也称跨进程通信),我们都知道Android框架是建立在Linux之上的,当然也会面对进程间通讯的问题。 为什么使用Binder 在Linux系统中为了达到进程间通讯的目的,我们可以选用诸如管道、Socket等技术手段,那么为什么Android选用了Binder这种新型的IPC技术,放弃了原有成熟的技术呢? 主要有如下两个方面: 1.

Android推送通知指南

自古美人都是妖i 提交于 2019-11-30 03:22:06
在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户 端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案,可是Android平台上实现起来却相对比较麻烦,最近利用几天的 时间对Android的推送通知服务进行初步的研究。 在Android手机平台上,Google提供了C2DM(Cloudto Device Messaging)服务,起初我就是准备采用这个服务来实现自己手机上的推送功能。 Android Cloud to Device Messaging (C2DM)是一个用来帮助开发者从服务器向Android应用程序发送数据的服务。该服务提供了一个简单的、轻量级的机制,允许服务器可以通知移动应用 程序直接与服务器进行通信,以便于从服务器获取应用程序更新和用户数据。C2DM服务负责处理诸如消息排队等事务并向运行于目标设备上的应用程序分发这些 消息。 但是经过一番研究发现,这个服务存在很大的问题: 1)C2DM内置于Android的2.2系统上,无法兼容老的1.6到2.1系统; 2)C2DM需要依赖于Google官方提供的C2DM服务器,由于国内的网络环境,这个服务经常不可用,如果想要很好的使用,我们的App Server必须也在国外,这个恐怕不是每个开发者都能够实现的; 有了上述两个使用上的制约,导致我最终放弃了这个方案

AndServer+Service打造Android服务器实现so文件调用

僤鯓⒐⒋嵵緔 提交于 2019-11-30 00:49:13
so 文件调用 随着 Android 移动安全的高速发展,不管是为了执行效率还是程序的安全性等,关键代码下沉 native 层已成为基本操作。 native 层的开发就是通指的 JNI/NDK 开发,通过 JNI 可以实现 java 层和 native 层(主要是 C/C++ )的相互调用,native 层经编译后产生 so 动态链接库,so 文件具有可移植性广,执行效率高,保密性强等优点。 那么问题来了,如何调用 so 文件显得异常重要,当然你也可以直接分析 so 文件的伪代码,利用强悍的编程功底直接模拟关键操作,但是我想对于普通人来说头发还是比较重要的。 当前调用 so 文件的主流操作应该是: 1,基于 Unicorn 的各种实现(还在学习中,暂且不表) 2,Android 服务器的搭建,在 App 内起 http 服务完成调用 so 的需求(当然前提是过了 so 的效验等操作) 至于为什么选用 AndServer,好吧,不为什么,只是因为搜索到了它 为什么结合 Service,在学习 Android 开发的时候了解到了 Service 的生命周期,个人理解用 Service 去创建 Http 服务比较好。 当然也有 Application 的简单使用,因为在正式环境中,大多数 so 文件的逻辑中都有 context 的一些包名了,签名了的效验等,自定义 Application

Android Zygote进程启动分析

删除回忆录丶 提交于 2019-11-29 18:42:35
dvm,app进程,linux进程三者关系 DVM指 dalivk 的虚拟机。每一个 Android 应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik 虚拟机实例。而每一个 DVM 都是在 Linux 中的一个进程,所以说可以认为是同一个概念 Zygote进程与app进程关系 Zygote是java层的进程即它也拥有一个独立的Dalvik 虚拟机实例,它是被linux层的第一个用户空间Init进程所启动的,它的主要作用就是用来孵化 app进程 和 系统进程 fork一个app进程,是通过ActivityManagerService类向Zygote发出fork命令,ActivityManagerService是在系统进程,但是Zygote处于自己的进程中,它们之间的通信没有采用binder机制,而是采用了socket机制,因此我们可以把Zygote称为一个孵化server,ActivityMamagerService称为一个client 下面的图描述了上面的过程 涉及到的类 我们先来梳理这个过程中使用到的类,并且这些类是做什么的 以server和client2个维度来归纳这些类 Zygote进程启动分析 大家都知道android系统的Zygote进程是所有的android进程的父进程,包括SystemServer和各种应用进程都是通过Zygote进程fork出来的

Android系统启动过程

こ雲淡風輕ζ 提交于 2019-11-29 18:37:10
Android系统启动过程 首先Android框架架构图:(来自网上,我觉得这张图看起来很清晰)    Linux内核启动之后就到Android Init进程,进而启动Android相关的服务和应用。 启动的过程如下图所示:(图片来自网上,后面有地址)          下面将从Android4.0源码中,和网络达人对此的总结中,对此过程加以学习了解和总结, 以下学习过程中代码片段中均有省略不完整,请参照源码。 一 Init进程的启动   init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行, 并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。init始终是第一个进程。   启动过程就是代码init.c中main函数执行过程:system\core\init\init.c 在函数中执行了:文件夹建立,挂载,rc文件解析,属性设置,启动服务,执行动作,socket监听…… 下面看两个重要的过程:rc文件解析和服务启动。 1 rc文件解析   .rc文件是Android使用的初始化脚本文件 (System/Core/Init/readme.txt中有描述: four broad classes of statements which are Actions , Commands , Services ,

Android Sensor (2) -- Sensor 架构及app的回调方式

余生长醉 提交于 2019-11-29 18:32:01
1.1 Sensor架构 1.1.1.数据传递方式 App -->I2C过程: app通过SensorManager,getSystemServer调用到SystemSensorManager SystemSensorManager通过jni调用到SensorManager.cpp ,通过binder createconnection调用到SensorService SensorService通过SystemServer启动,Sensor调用到hal kernel I2c向app传递数据: SensorService 在是一个binder线程,threadloop方法中device.poll来读 发送数据,通过BitTube(跨进程socket) sendEvents 把数据传递到 android_hardware_SensorManager.cpp 这个jni中, 通过JNI调用,调用到java层SystemSensorManager中的SensorEventQueue.dispatchSensorEvent,通过app向SensorEventQueue注册的mListener,来回调数据到app的onSensorChanged()方法 1.2 mSensorManager.registerListener @frameworks/base/core/java/android

Android Jetpack介绍

送分小仙女□ 提交于 2019-11-29 17:09:48
作为一名Android开发者,在APP开发过程中,对于生命周期管理、数据管理、多线程处理、后台任务、导航、页面等功能开发存在各种各样的问题。Google针对这一开发痛点,创建了一个组件库,这就是 Jetpack 。 自2018 Google I/O发布Jetpack以来,已经补充了针对Android UI、行为、架构、基础四个领域涉及共30个库,框架图如下: Jetpack组件库框架图 Jetpack 使用优点 Jetpack可帮助开发人员更轻松地编写高质量的应用程序,其优点有: 提升开发效率 组件可以单独使用,也可以结合起来使用,同时加入Kotlin语言功能,提高开发效率 消除样板代码 Android Jetpack管理繁琐的活动,如后台任务,导航和生命周期管理,开发者使用Jetpack库可以将样板代码处理的逻辑交由库去完成,专注于具体业务逻辑实现,提升代码质量 构建高品质程序 围绕现代设计实践,使用Jetpack组件可以减少崩溃,减少内存泄漏,并提供向后兼容性。(Jetpack逐步将库迁移到androidx.*包中,与android 平台API隔离,这样能够带来更频繁的更新,开发者可以始终保持最新和最好的Jetpack组件版本使用) Jetpack 组件介绍 Jetpack提供了基础、架构、行为、UI四个领域的库,其中: 基础组件 提供跨领域功能 架构组件

fir.im Weekly

孤人 提交于 2019-11-29 14:31:45
终于一脚迈入了 2016 年。无论你是否准备好,未来已经汹涌扑来…… 新年第一期的 fir.im Weekly 干货颇多,来看一看:) ##2015 Developer Survey stackoverflow 的这份报告是对Technology、Work、Community的调查,技术部分包括编程语言、桌面操作系统、文本编辑器、IDE、Source Control 等,报告显示2015最流行的编程语言是JavaScript;Swift 是开发者最喜欢的语言;移动开发者中 Android 与 iOS 开发者比例4:3等等。全文报告,请点击 这里 . 补充: @36氪 已贴心po出中文版,在 这里 . ##来看看国外优秀公司的技术栈 @移动开发小冉 分享了一个网站——stackshare 非常实用,可用 Github 的账号登录,在 这里 可以研究国外各个优秀公司的技术栈,比如 Slack 、Anbnb等等。 ##基于Travis CI 搭建Android自动发布工作流 感谢 @Allo 的分享,Travis CI + fir.im CLI 搭建 Android 自动打包发布工作流,是非常棒的示范~ Android开发者想实现自动化发布,简化工作流程,可以来看看 这篇文章 . ##iOS 中的 UI 自适应 由 @RealmChina 分享。 “在本次 GOTO Conference

写给Android开发者的Kotlin入门

只愿长相守 提交于 2019-11-29 14:02:54
写给Android开发者的Kotlin入门 Google在今年的IO大会上宣布,将Android开发的官方语言更换为Kotlin,作为跟着Google玩儿Android的人,我们必须尽快了解和使用Kotlin语言。 不过Kotlin毕竟是语言级别的新事物,比起Java来说,从编程思想到代码细节都有不少变化,我们最好先对Kotlin有个整体的基本的了解,然后再去学习和使用,这样才能高效地掌握Kotlin语言。 Java的辉煌与阴影 1995年,当年如日中天的Sun公司发布了Java语言,引起了巨大的轰动,与当时主流的C语言和Basic语言比起来,Java语言简单、面向对象、稳定、与平台无关、解释型、多线程、动态等特点,就像是打开了一个新的世界,一时间风靡全球,云集者众,微软为了模仿Java搞出C#语言,Netscape为了赶时髦硬塞出一个JavaScript语言,IBM则捏着鼻子做了Java IDE Eclipse(日蚀,呵呵)。直到现在,Java在编程世界里还占据着举足轻重的地位,Andy Rubin在开发Android系统时,也很自然地采用了Java和C++(C++负责NDK开发)作为开发语言。 但是,Java毕竟是20多年前的语言了,虽然有不断扩展更新,但是底层设计思想是很难改动的,这就导致它很难实现一些新的语言特性,例如函数式编程、Lambda 表达式、流式API、高阶函数