android架构

Android 模块化开发

大兔子大兔子 提交于 2020-01-23 14:01:43
概述 单独开发每个模块,用集成的方式把他们组合起来,拼出一个app。如通用的模块,自动更新的模块,反馈模块,推送模块都可以单独以模块来开发,最后进行集成。我们可以通过一个壳来包含很多个模块。 好处 可以单独升级模块。耦合度低。同时,也很好地解决了“牵一发而动全身”的问题。方便分工。与其他团队合作时,如外包的团队,可以很好的地将核心代码与外包部分隔离开,不用和他们分享核心代码,让他们去做独立的功能,做好直接调用就行。方便以后重构代码,不用担心会改到核心代码。 架构分层 顶层 : 将所有的业务模块聚合在一起,加上配置,形成主应用。一个模块化做得好的应用,主应用都会比较简单且稳定。 中间层 : 模块按照功能划分。比如app可以划分为更新、登录、分享、播放等模块。采用aar作为模块的最小单位,之所以选择aar是因为jar不能带资源只能带java代码,library太容易被修改。aar的好处是能带资源并且是编译好的,不能被修改。保证了模块的版本不会在被别人调用的时候随意修改,如果想修改就要联系做aar的人,让他去升级aar的版本。 在android studio里,用maven打包aar。aar其实就是依赖。 底层 :包含基础库和底层库 (1)基础库:包含所有模块需要的依赖库,以及一些工具类,比如封装了的常用网络请求,封装图片处理fresco,数据库相关等,还包含所有模块需要的依赖库; (2

Android中app卡顿原因分析示例

廉价感情. 提交于 2020-01-21 13:35:34
在知乎回答了一个“为什么微博的app在iPhone比Android上流畅”的问题。后面部分是一个典型的动画卡顿的性能分析过程,因此帖在这里。有编程问题可以在这里交流。 知乎链接 。 ========================================================= 我来说下我所知道的事情。我不知道iOS为什么流畅,但我知道一些Android为什么不流畅的原因。 首先,就题主所说的问题,我用iPad和小米Pad对比了一下微博滑动滚屏这件事情(2014年8月10日目前微博app最新版本)。正如题主所说,直观感受上明显感觉iOS要流畅、舒服。 在这件事情上我认为主要是这三个原因: 速度曲线。 当你滑动界面然后松手,这时界面会继续滑动,然后速度减小,直到速度为0时停止。iOS下速度减小的这个过程比较慢,尤其是快要停的时候是慢慢停的,视觉上有种很顺滑的感觉;Android下则从松手到停要快很多,相比之下有种戛然而止的感觉。 从数据/技术角度来看这个事情,我们滑动界面的最终目的不是为了“动”,而是为了“停”,因此只要平滑的到达目的地,似乎越快完成这个过程越好,所以Android的选择是理所当然的。但事实是,大家普遍更喜欢iOS的方式,这样做显得更顺滑、更优雅。 帧率。 绝大部分时间两者都能保持60FPS左右的满帧率。但都会有偶尔的掉帧

【me.yokeyword:fragmentation】Android 6.0以下界面无法更新的问题

回眸只為那壹抹淺笑 提交于 2020-01-21 00:17:04
项目使用 ‘me.yokeyword:fragmentation:1.3.6’ 进行界面开发。 在 Android 5版本上出现界面无法更新的问题,具体现象是: 1、列表数据加载之后页面看不到数据,但是点击等事件有响应,从其他界面返回,数据会显示出来。 2、输入框输入内容,看不到内容,但是在退出界面/从其他界面返回时,可以看到。 3、界面滚动无反应。 分析: 都是界面没有实时更新,但是数据和界面其实都是存在的,只是设备没有显示出来。 1、考虑是否是界面过于复杂,设备无法刷新的问题。单独新建一个界面,只有输入框,现象依旧。 2、考虑跟系统相关,只有6.0以下出现问题。而且其他项目同样架构并无问题 3、考虑项目某些设置存在问题。对比两个项目,发现问题项目的主activity关闭了硬件加速,去掉,再测试,问题解决。 总结:fragmentation库在Android6.0以下的设备上,依赖硬件加速,所以不能关闭硬件加速。具体代码,删除:【android:hardwareAccelerated=“false”】 来源: CSDN 作者: 谢小片 链接: https://blog.csdn.net/xfnbing/article/details/104049519

Android2.2快速入门

六月ゝ 毕业季﹏ 提交于 2020-01-20 15:28:50
前言   这是前段时间用于公司Android入门培训的资料,学习Android三周时间收集整理的,时间仓促,希望能对像我这样还没入门就直接上项目的人一点帮助 :) 声明   欢迎转载,但请保留文章原始出处:)     博客园:http://www.cnblogs.com     农民伯伯: http://www.cnblogs.com/over140/ 正文    一、 环境配置和安装( Android2.2 )    参考文章: 这里    1.1 JDK    1.2 SDK    下载地址: http://dl.google.com/android/android-sdk_r06-windows.zip    1.3 Eclipse 3.5 (Galileo)    下载地址:   http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo/R/eclipse-java-galileo-win32.zip    1.4 ADT 0.9.7    下载地址: http://dl.google.com/android/ADT-0.9.7.zip    1.5 安装    依次下载,按照文章步骤安装即可,注意安装 SDK 时,需要如下设置下:       

Android2.2快速入门

本小妞迷上赌 提交于 2020-01-20 15:05:07
声明   欢迎转载,但请保留文章原始出处:)     博客园:http://www.cnblogs.com     农民伯伯: http://www.cnblogs.com/over140/ 正文    一、 环境配置和安装( Android2.2 )    参考文章: 这里    1.1 JDK    1.2 SDK    下载地址: http://dl.google.com/android/android-sdk_r06-windows.zip    1.3 Eclipse 3.5 (Galileo)    下载地址:   http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo/R/eclipse-java-galileo-win32.zip    1.4 ADT 0.9.7    下载地址: http://dl.google.com/android/ADT-0.9.7.zip    1.5 安装    依次下载,按照文章步骤安装即可,注意安装 SDK 时,需要如下设置下:           不然更新不下来,那个链接地址被墙了。    二、 Android 系统架构        2.1 Linux 内核 (Linux Kernel)     *

Android2.2快速入门 zz

僤鯓⒐⒋嵵緔 提交于 2020-01-20 14:59:42
http://www.cnblogs.com/over140/archive/2010/09/27/1836567.html 前言   这是前段时间用于公司Android入门培训的资料,学习Android三周时间收集整理的,时间仓促,希望能对像我这样还没入门就直接上项目的人一点帮助 :) 声明   欢迎转载,但请保留文章原始出处:)     博客园:http://www.cnblogs.com     农民伯伯: http://www.cnblogs.com/over140/ 正文    一、 环境配置和安装( Android2.2 )    参考文章: 这里    1.1 JDK    1.2 SDK    下载地址: http://dl.google.com/android/android-sdk_r06-windows.zip    1.3 Eclipse 3.5 (Galileo)    下载地址:   http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo/R/eclipse-java-galileo-win32.zip    1.4 ADT 0.9.7    下载地址: http://dl.google.com/android/ADT-0.9

怎样给你的Android 安装文件(APK)瘦身

拜拜、爱过 提交于 2020-01-18 21:39:36
本文源地址 : 怎样给你的Android 安装文件(APK)瘦身 Android的apk文件越来越大了这已经是一个不争的事实。 在Android 还是最初版本号的时候,一个app的apk文件大小也还仅仅有2 MB左右,到了如今。一个app的apk文件大小已经升级到10MB到20MB这个范围了。apk文件大小的爆炸式增长主要是由于用户对app质量的期待越来越高以及开发人员的开发经验增长,详细体如今下面几个方面: Android设备 dpi 的多样化 ([l|m|tv|h|x|xx|xxx]dpi) Android平台的进化,开发工具的改进以及开源类库生态系统的丰富 用户对高质量UI的期待 其它原因 Android开发人员在设计一个app的时候应该将终于公布一个轻量级app作为一个最佳实践来考虑。为什么?首先这就意味着你拥有了一个简洁。易维护代码基础。 其次。官方应用商店对超过50MB的apk设置了拓展包文件下载选项。apk文件在50MB下面更easy让用户下载。最后,我们的应用程序环境是一个带宽有限,存储空间有限的环境,apk安装文件越小。下载就会越快。安装也会更快,良性循环,最后说不定用户由于这个给好评。 在大部分情况下,apk大小的增长是为了满足消费者的须要和期待。然而。我觉得apk大小的增速已经超过了用户对app期待的增速。所以,非常大程度上

Android bluetooth介绍(四): a2dp connect流程分析

假装没事ソ 提交于 2020-01-18 12:00:40
关键词:蓝牙blueZ A2DP、SINK、sink_connect、sink_disconnect、sink_suspend、sink_resume、 sink_is_connected、sink_get_properties、AUDIO、DBUS 版本号:基于android4.2之前版本号 bluez 内核: linux/linux3.08 系统: android/android4.1.3.4 作者:xubin341719(欢迎转载,请注明作者,请尊重版权谢谢) 欢迎指正错误,共同学习、共同进步!! Android bluetooth介绍(一):基本概念及硬件接口 Android bluetooth介绍(二): android 蓝牙代码架构及其uart 到rfcomm流程 Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析 Android bluetooth介绍(四): a2dp connect流程分析 一、A2DP_CONNECT上层代码流程 二、从 HCI log 中看 AVDTP 创建过程 1 、 AVDTP l2cap 建立过程 2 、 AVDTP 相关信令处理流程在 HCI 中的流程 DISCOVER \GET_CAPABILITIES\SET_CONFIGURATION\OPEN\START\SUSPEND 三、audiosink函数注冊

Android动态加载代码技术

时间秒杀一切 提交于 2020-01-18 09:06:32
Android动态加载代码技术 在开发Android App的过程当中,可能希望实现插件式软件架构,将一部分代码以另外一个APK的形式单独发布,而在主程序中加载并执行这个APK中的代码。 实现这个任务的一般方法是: // 加载类cls Context pluginContext = mainContext.createPackageContext(PLUGIN_PKG, Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE); ClassLoader loader = pluginContext.getClassLoader(); Class<?> cls = loader.loadClass(CLASS_NAME); // 通过反射技术,调用cls中的方法,下面是一个示例,实际代码因情况而定 Object obj = cls.newInstance(); Method method = cls.getDeclaredMethod("someMethod"); method.invoke(obj); 但是,这个方法在Android 4.1及之后的系统中存在一些问题:对于收费应用,Google Play会将其安装在一个加密目录之下(具体就是/data/app-asec),而不是一个普通目录之下(具体就是/data

QT 的模块

倾然丶 夕夏残阳落幕 提交于 2020-01-18 02:32:44
说起QT,给我的感觉就是一个C++的编程模式,不会QT就不好说C++道上浪迹过的。有很多博客对QT进行了系统性的梳理,再写一个感觉意义不大,我只是想看看官网上的资料,做一个最新的了解。 QT目前不仅仅支持C++接口,还有 QMT(多范式语言) 和 QT for Python 。Python版本也非常好用,但最经典的还是C++版本,C++版本的文档是非常全的,功能也是最新的。所以我这里主要看c++版本。 QT是一套高效完善的界面编程API,虽然是一句话,但这本身也是一件非常了不起的事情。 为了实现这套完善的体系,QT又分了很多模块,我们先来看看这些模块的简单说明。 核心模块 模块 说明 Qt Core 核心类,不包含图像相关的封装 Qt GUI 主要的图像编程API接口模块,包含OpenGL Qt Multimedia 一些多媒体功能,包含音频,视频,广播和照相机的处理 Qt Multimedia Widgets 多媒体组件模块 Qt Network 轻便易用的网络模块 Qt QML 给QML和JavaScript相关的处理模块 Qt Quick 提供用户自定义的动态框架 Qt Quick Controls 轻量化QML类型,位桌面系统,嵌入式和移动设备提供高性能的用户界面 Qt Quick Dialogs 轻量化的对话框交互模块 Qt Quick Layouts QT Quick