android架构

android中的Context到底该怎么用

你说的曾经没有我的故事 提交于 2019-12-20 04:22:29
在Android系统中,有很多的service,也就是服务。我们的程序如果用到系统功能,一般都是调用服务间接完成的。也就是在Android系统中存在许多C/S架构。而context的作用,就是android应用连接service的桥梁。比如Activity中有一个方法,getSystemService()。 这个方法调到最后,实际上是调用的ContextImpl的getSystemService()方法。而ContextImpl是对Context的实现 。 Context不是函数而是一个类——如果不太了解面向对象,可以把“类”看做一种数据类型,就像int,不过类型为“类”的数据(称为对象)可能储存远比int多的信息,比如这里的类型为 Context的对象就储存关于程序、窗口的一些资源 。 有些函数调用时需要一个Context参数,比如Toast.makeText, 因为函数需要知道是在哪个界面中显示的Toast 。 再比如,Button myButton = new Button(this); 这里也需要Context参数(this),表示这个按钮是在“this”这个屏幕中显示的 。 Android开发使用(纯粹的)面向对象语言,一切都是对象,就连我们写的函数都是对象的函数。 public class MainActivity extends Activity {

微信团队分享:极致优化,iOS版微信编译速度3倍提升的实践总结

你说的曾经没有我的故事 提交于 2019-12-20 00:57:35
1、引言 岁月真是个养猪场,这几年,人胖了,微信代码也翻了。 记得 14 年转岗来微信时,用自己笔记本编译微信工程才十来分钟。如今用公司配的 17 年款 27-inch iMac 编译要接近半小时;偶然间更新完代码,又莫名其妙需要全新编译。在这么低的编译效率下,开发心情受到严重影响。 于是年初我向上头请示,优化微信编译效率,上头也同意了。 学习交流: - 即时通讯/推送技术开发交流5群: 215477170 [推荐] - 移动端IM开发入门文章:《 新手入门一篇就够:从零开发移动端IM 》 (本文同步发布于: http://www.52im.net/thread-2873-1-1.html ) 2、相关文章 《 微信团队分享:微信移动端的全文检索多音字问题解决方案 》 《 微信团队分享:iOS版微信的高性能通用key-value组件技术实践 》 《 微信团队分享:iOS版微信是如何防止特殊字符导致的炸群、APP崩溃的? 》 《 微信团队原创分享:iOS版微信的内存监控系统技术实践 》 《 iOS后台唤醒实战:微信收款到账语音提醒技术总结 》 《 微信团队分享:微信Android版小视频编码填过的那些坑 》 《 微信手机端的本地数据全文检索优化之路 》 《 微信团队披露:微信界面卡死超级bug“15。。。。”的来龙去脉 》 《 微信客户端团队负责人技术访谈

微信团队分享:极致优化,iOS版微信编译速度3倍提升的实践总结

╄→尐↘猪︶ㄣ 提交于 2019-12-20 00:41:09
1、引言 岁月真是个养猪场,这几年,人胖了,微信代码也翻了。 记得 14 年转岗来微信时,用自己笔记本编译微信工程才十来分钟。如今用公司配的 17 年款 27-inch iMac 编译要接近半小时;偶然间更新完代码,又莫名其妙需要全新编译。在这么低的编译效率下,开发心情受到严重影响。 于是年初我向上头请示,优化微信编译效率,上头也同意了。 学习交流: - 即时通讯/推送技术开发交流5群: 215477170 [推荐] - 移动端IM开发入门文章:《 新手入门一篇就够:从零开发移动端IM 》 (本文同步发布于: http://www.52im.net/thread-2873-1-1.html ) 2、相关文章 《 微信团队分享:微信移动端的全文检索多音字问题解决方案 》 《 微信团队分享:iOS版微信的高性能通用key-value组件技术实践 》 《 微信团队分享:iOS版微信是如何防止特殊字符导致的炸群、APP崩溃的? 》 《 微信团队原创分享:iOS版微信的内存监控系统技术实践 》 《 iOS后台唤醒实战:微信收款到账语音提醒技术总结 》 《 微信团队分享:微信Android版小视频编码填过的那些坑 》 《 微信手机端的本地数据全文检索优化之路 》 《 微信团队披露:微信界面卡死超级bug“15。。。。”的来龙去脉 》 《 微信客户端团队负责人技术访谈

android下调试声卡驱动之概述

我怕爱的太早我们不能终老 提交于 2019-12-19 13:12:19
在Android中音频系统使用的是ALSA系统架构。ASoC--ALSA System on Chip 。是建立在标准ALSA驱动层上,为了更好地支持 嵌入式处理器和移动设备中的音频Codec的一套软件体系。在音频设备驱动中ASoC被分为Machine、Platform和Codec三大部分。 Codec部分:负责音频解码,这部分代码全然无平台无关(设备原厂提供),它包括了一些音频的控件(Controls),音频接 口,DAMP(动态音频电源管理)的定义和Codec IO功能。为了保证硬件无关性,不论什么特定于平台的代码都 要移 到Platform和Machine驱动中。 Platform部分:包括了平台的音频DMA和音频接口的配置和控制(I2S,PCM。AC97等); 与处理器芯片相关 的代码。 Machine部分:是耦合Platform和Codec驱动,同一时候与上层交互的代码。因为上层是标准的alsa架构。所下面层接口肯定要做了 统一,这部分由Machine本身的Platform驱动和Platform设备组成(请跟上面的Platform驱动差别开)。Platform驱动 内核已经完毕了,所以无须过多的关心怎么跟上层ALSA怎么衍接的问题。我们仅仅须要注冊一个Machine的Platform 设备以及完毕Platform和Codec耦合。 1、ALSA设备文件结构

构建具有超过65K个方法的Apps

北城以北 提交于 2019-12-18 19:58:09
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 由于Android平台的持续成长,Android apps的大小也一样不断变大。当你的应用程序及其引用的库达到某个大小时,你将遇到一个 表示你的app已经达到了Android app构建架构的一个限制 的 build errors 。早些时候的构建系统将报出一个类似下面这样的一个error: Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536 更近一些的Android构建系统版本则显示一个不同的error,但指示了相同的问题: trouble writing output: Too many field references: 131000; max is 65536. You may try using --multi-dex option. 从这两个errors中可以看到一个共同的数字:65,536。这个数字很重要,它表示一个单独的Davlik Executable(dex)字节码文件中的代码可以调用的引用的总个数。如果你在构建一个Android app且遇到了这个error,那么恭喜你,你的代码量非常大!这份文档解释了要如何绕过这个限制并继续构建你的app。 注意:

Android学习资料总结

♀尐吖头ヾ 提交于 2019-12-18 18:43:25
从事ASP.NET Web开发两年了,主要是做Web项目(ASP.NET WebForm和ASP.NET MVC),也做过C/S架构的企业内部系统,偶然接触Android,学艺不精,项目没做出什么,倒是写了一堆博客,方便自己,服务他人搞了一个索引,大家随便看看就好~ 博客索引 写此文的初衷是想将本人的Android博客做一个目录索引文章: Android中Intent的显示和隐式使用 Android中ActionBar及Overflow的显示 Android Activity的生命周期 Android中Fragment的简单介绍 Android数据存储之SharedPreferences Android数据存储之File Android数据存储之SQLite Android数据展示之ListView Android数据填充器LayoutInflater Android中XML解析-Dom解析 Android中XML解析-SAX解析 Android中XML解析-PULL解析 Android下的Junit测试 Android组件之自定义ContentProvider Android组件之Service浅谈 Android中远程Service浅析 Android组件之BroadCast简单实践 Android中Dialog对话框的调用及监听 Android数据解析-JSON解析

Android系统显示原理

核能气质少年 提交于 2019-12-18 05:13:17
一.Android系统显示原理 Android的显示过程简单概括为:Android 应用程序把经过测量、布局、绘制后的surface缓存数据,通过surfaceFlinger把数据渲染到显示屏幕上,通过Android的刷新机制来刷新数据。也就是说应用层负责绘制,系统层负责渲染,通过进程间通信把应用层需要绘制的数据传递给系统层服务,系统层服务通过刷新机智把数据刷新到屏幕。 通过阅读Android系统的源码可以了解显示的流程,Android的图形显示系统采用的是client/server架构。SurfaceFlinger(server)由C++代码编写。Client端代码分为两部分,一部分是由java提供给应用使用的API,另一部分是由C++写成的底层具体实现。 二.绘制原理 绘制任务是由应用层发起的,最终通过系统层绘制到硬件屏幕上显示的。 1.应用层: 图1.1 如上图,这是一个UI界面,有很多不同层次的基本元素(view)构成,整体是一个树形结构,不同的镶嵌,存在不同的父子关系,这是一个递归的渲染过程。在Android 中,iew绘制有三个核心的步骤,,如图1.2,通过measure来绘制view的大小,通过layout确定view的位置,最后通过draw绘制到surface,在Android源码中,viewRootImp类的performTraversals()方法中

eclipse到Android Studio的项目迁移

北城以北 提交于 2019-12-18 00:39:19
一直以来。公司开发都是用eclipse。可是随着我们应用不断成长。项目结构越来越庞大。项目间依赖关系变得非常复杂。用eclipse管理显得非常吃力,常常一个同事更改依赖项目之后,别人在更新。都会出现故障。由于这些事情浪费非常多时间。 终于决定迁移到Android Studio。 可是迁移的过程中还是遇到了非常多问题,通过这篇博客,把迁移过程中遇到的问题。以及每一个问题的解决方式,记录一下。也希望能帮助到有相同需求的同学。 这里就不具体介绍从eclipse导入到Android Studio的过程了。 1.乱码 用eclipse开发时编码用的是GBK,而android studio中使用的是UTF-8,所以在build的时候,项目中的温度符号,以及一些中文凝视就会出现乱码。 解决方式 统一编码,我们把编码都改成UTF-8. Android studio通过例如以下方式改项目和文件的编码: File -> Other Settings -> Default Settings -> 搜索File Encodings ->改三个地方的编码(IDE Encoding,Project Encoding,Default encoding for properties files) 2. 反复图片 我们有一个Library是从主项目中抽取出来的。抽取的过程中非常多图片从主项目中copy出来之后

Android系统架构

限于喜欢 提交于 2019-12-16 13:13:07
本文转载自 https://blog.csdn.net/itachi85/article/details/54695046 Android系统架构 Android系统架构分为五层,从上到下依次是应用层、应用框架层(Framework)、系统运行库层(Native)、硬件抽象层(HAL)和Linux内核层。 1 应用层 系统内置的应用程序以及非系统级的应用程序都是属于应用层。负责与用户进行直接交互,通常都是用Java进行开发的。 2 应用框架层(Java Framework) 应用框架层为开发人员提供了可以开发应用程序所需要的API,我们平常开发应用程序都是调用的这一层所提供的API,当然也包括系统的应用。这一层的是由Java代码编写的,可以称为Java Framework。下面来看这一层所提供的主要的组件。 名称 功能描述 Activity Manager(活动管理器) 管理各个应用程序生命周期以及通常的导航回退功能 Location Manager(位置管理器) 提供地理位置以及定位功能服务 Package Manager(包管理器) 管理所有安装在Android系统中的应用程序 Notification Manager(通知管理器) 使得应用程序可以在状态栏中显示自定义的提示信息 Resource Manager(资源管理器) 提供应用程序使用的各种非代码资源,如本地化字符串

Android Studio gradle配置详解

心不动则不痛 提交于 2019-12-14 19:26:01
= android gradle配置详解 AppExtension类及其属性 可能大部分人看到AppExtension类会感觉到非常的陌生,其实我们在app中的build.gradle中填写配置信息的时候,经常看到它,它是什么呢? 如果你按ctrl+鼠标左键对着android{},点击进去就知道了,其实android{…}表示的就是AppExtension这个类。 如图: 我们再来看看AppExtension继承关系: 除了AppExtension之外还有2个类与之相似,LibraryExtension和TestExtension 如果是module项目作为lib使用,那么lib下的build.gradle中的android对应的是LibraryExtension AppExtension的属性 aaptOptions :aapt是一个可以将资源文件编译成二进制文件的工具。aaptOptions表示aapt工具设置的可选项参数。 adbExecutable:adb从编译sdk时执行 adbOptions :adb的可选项参数 applicationVariants:应用变体列表 ==buildToolsVersion== :构建工具版本(必要的) buildTypes :构建类型(一般是release和debug,还可以自定义) compileOptions :编译可选项参数 =