android架构

安卓开发电商mvp框架和流式布局,搜索框

假如想象 提交于 2019-12-24 10:19:23
在我看来mvp框架其实是mvc框架变种产品。讲原本的activity/fragment的层次划分成present层和view层。m还是原来的实体层用来组装数据,p层则用来隔离view层,被称为中介层,v层还是view层主要用来展示数据的层。如下图所示: 有了present层之后呢?view层就专心在activity/fragment里面主要去处理视图层和维护自己的生命周期,将业务逻辑委托给present层,present层作为实体层和视图层的中介。实体层和视图层不直接进行交互,而是通过委托给persent层进行交互,这样做的好处是: 分离了视图逻辑和业务逻辑,降低了耦合 Activity只处理生命周期的任务,代码变得更加简洁 视图逻辑和业务逻辑分别抽象到了View和Presenter的接口中去,提高代码的可阅读性 Presenter被抽象成接口,可以有多种具体的实现,所以方便进行单元测试 把业务逻辑抽到Presenter中去,避免后台线程引用着Activity导致Activity的资源无法被系统回收从而引起内存泄露和OOM 方便代码的维护和单元测试。 以下主要展示的功能和框架有: MVP架构+基类+Volley封装 底部标签与Fragment的联动 arguments动态传值 接口回调 js交互,有参无参调用,弹框 自定义全局异常捕获 base封装Activity和Fragment

Android 全局获取Context的技巧(随时随地的使用Context)

孤人 提交于 2019-12-23 21:48:42
参考:《第一行代码》第13章 ##################################################### 很多地方都需要使用Context,弹出Toast/启动活动/发送广播/操作数据库/使用通知等 活动(Activity)本身就是一个Context对象,但当应用程序的架构开始复杂起来,很多的逻辑代码都将脱离Activity类,但此时又恰恰需要使用Context,这时,问题来了? ################################################## 第一种获取Context的方法 在被调用方法的参数中设置一个Context,等待其他方法调用时传入一个Context,这时就可以使用 这虽然也是一种解决方案,但是将获取Context 的任务转移给了调用方,没有去考虑调用方是否可以得到Context对象,所以这不是一个好的方法 ##################################################### 第二种方法(更有效) Android提供了一个Application类,每当应用程序启动的时候,系统就会自动将这个类进行初始化。而我们可以定制一个自己的Application类,以便于管理程序内一些全局的状态信息,比如说全局Context 首先

Android 全面插件化 RePlugin 流程与源码解析

妖精的绣舞 提交于 2019-12-23 21:32:00
转自 Android 全面插件化 RePlugin 流程与源码解析 RePlugin,360开源的全面插件化框架,按照官网说的,其目的是“尽可能多的让模块变成插件”,并在很稳定的前提下,尽可能像开发普通App那样灵活。那么下面就让我们一起深入♂了解它吧。 (ps :阅读本文请多参考源码图片 ( ̄^ ̄)ゞ ) 一、介绍   RePlugin对比其他插件化,它的强大和特色,在于它只Hook住了ClassLoader。One Hook这个坚持,最大程度保证了稳定性、兼容性和可维护性,详见 《全面插件化——RePlugin的使命》 。当然,One Hook也极大的提高了实现复杂程度性,其中主要体现在: 增加了Gradle插件脚本,实现开发中自动代码修改与生成。 分割了插件库和宿主库的代码实现。 代码中存在很多不少 @deprecated 、 TODO 和临时修改。 初始化、加载、启动等逻辑比较复杂。 图一 Replugin项目结构   本篇将竭尽所能,为各位介绍其流程和内部实现,如果存在一些地方存在纰漏,还请指出。文章篇幅较长,需耐心阅读,阅读时可结合图片源码,同时欢迎收藏,或选择感兴趣点阅读,下面主要涉及: 二、ClassLoader基础知识。 三、Replugin项目原理和结构分析。 四、Replugin的ClassLoader。 五、Replugin的相关类介绍。 六

Android开发中的MVP模式详解

守給你的承諾、 提交于 2019-12-23 10:21:02
Android开发中的MVP模式详解 MVC、MVP、MVVM介绍 在 Android 开发中,如果不注重架构的话, Activity 类就会变得愈发庞大。这是因为在 Android 开发中 View 和其他的线程可以共存于 Activity 内。那最大的问题是什么呢? 其实就是 Activity 中同时存在业务逻辑和 UI 逻辑。这导致增加了单元测试和维护的成本。 这就是为什么要清晰架构的原因之一。不仅是因为 Activity 类变得臃肿,也是其他的一些问题,例如 Activity 和 Fragment 相结合时的生命周期、数据绑定等等。 MVP简介 MVP(Model,View,Presenter) View :负责处理用户时间和视图展现。在 Android 中就可能是 Activity 或者 Fragment 。 Model : 负责数据访问。数据可以是从接口或者本地数据库中获取。 Presenter : 负责连接 View 和 Model 。 用一句话来说: MVP 其实就是面向接口编程, V 实现接口, P 使用接口。 清晰的架构: 举个栗子: 在 Android Studio 中新建一个 Activity ,系统提供了 LoginActivity ,直接用它是极好的。 不得不说, Material Design 的效果真是美美哒! 好,那我们就用用户登录页来按照 MVP

58同城高性能移动Push推送平台架构演进之路

一曲冷凌霜 提交于 2019-12-22 14:47:32
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本文详细讲述58同城高性能移动Push推送平台架构演进的三个阶段,并介绍了什么是移动Push推送,为什么需要,原理和方案对比;移动Push推送第一阶段(单平台)架构如何设计;移动Push推送典型性能问题分析解决,以及高可用、高性能、高稳定性如何保证。 什么是移动Push推送 移动Push推送是移动互联网最基础的需求之一,用于满足移动互联环境下消息到达App客户端。以转转(58赶集旗下真实个人的闲置交易平台)为例,当买家下单后,我们通过移动Push推送消息告诉卖家,当卖家已经发货时,我们通过移动Push消息告诉买家,让买卖双方及时掌握二手商品交易的实时订单动态。 为什么需要移动Push推送? 移动互联网络环境下,经常会出现弱网环境,特别是2G、3G等网络环境下,网络不够稳定,App客户端和相应服务器端的长连接已经断开,消息无法触达App客户端。而我们业务需要把Message(转转App交易消息等)、Operation(转转App运营活动等)、Alert(转转红包未消费提醒等)等消息推送给App客户端,从而触发用户看到这些消息,通过点击这些Push消息达到相应目标。 推送原理和方案对比 移动Push推送主要有以下三种实现方式。 移动App轮询方式(PULL) App客户端定期发起Push消息查询请求

android系统编译.so库

佐手、 提交于 2019-12-22 08:24:00
android系统编译so库 移植准备 移植目的 移植环境 ABI和API ABI API ABI和API区别 编译环境 NDK-build AOSP 参考文档 移植准备 这里主要是针对我自己最近遇到的项目问题,需要在android4.4系统上移植android9.0的webrtc语音处理算法,因而引入的内容。 移植目的 本文主要描述的就是如何将自己的代码编译成native库在android系统上运行(并不包括在android系统上使用自己的库),那么本质就是生成指定结构的二进制.so。要生成可用的二进制.so必不可少的就是需要了解到编译环境、目标机软硬件环境 移植环境 最终的目标.so动态库实质就是二进制机器码,要想获取最终的.so就需要针对源代码进行编译生成,这就牵涉到目标平台和宿主机的软硬件环境 宿主机(开发机器) 软件环境:编译器(根据目标平台架构决定)、系统(Windows、Linux)、C/C++库 硬件环境:机器架构(arm/arm64,x86/x86-64) 目标平台(.so运行平台) 软件平台:android系统版本(对应的API和ABI版本) 硬件平台:架构(ABI版本) ABI和API ABI application binary interface,应用程序二进制接口。不同的android设备对应不同的CPU,不同的CPU又对应不同的指令集

Android中的Handler, Looper, MessageQueue和Thread

狂风中的少年 提交于 2019-12-21 14:20:21
前几天,和同事探讨了一下 Android 中的消息机制,探究了消息的发送和接收过程以及与线程之间的关系。虽然我们经常使用这些基础的东西,但对于其内部原理的了解,能使我们更加容易、合理地架构系统,并避免一些低级错误。 对于这部分的内容,将分成 4 小节来描述: 1.职责与关系 2.消息循环 3.线程与更新 4.几点小结 -------------------------------------------------------------------------------------------------- 1 ) 接下来,我们开始这部分的内容,首先了解一下各自的职责及相互之间的关系。 职责 Message :消息,其中包含了消息 ID ,消息处理对象以及处理的数据等,由 MessageQueue 统一列队,终由 Handler 处理。 Handler :处理者,负责 Message 的发送及处理。使用 Handler 时,需要实现 handleMessage(Message msg) 方法来对特定的 Message 进行处理,例如更新 UI 等。 MessageQueue :消息队列,用来存放 Handler 发送过来的消息,并按照 FIFO 规则执行。当然,存放 Message 并非实际意义的保存,而是将 Message 以链表的方式串联起来的,等待 Looper 的抽取。

从事 Android 开发六年,我学到的那些事!

天涯浪子 提交于 2019-12-21 08:04:23
六年来,我为多家公司编写过各种应用程序。你编写代码或处理代码库的文化和方式会随着你的经验而不断变化。 你的代码质量应该随着经验的增加而提高,否则就需要反思了。 选择正确的架构 如果你是从头开始开发应用程序,那么就会有许多优势。 其中之一就是选择正确的体系结构。通常,我们喜欢将所有内容都写在同一个activity文件中,因为这样做很容易。但是,当你的代码量增多时,这就会成问题。你的代码库会变得十分庞大,每个文件包含的代码行数也会非常庞大。 考虑到代码的性能和维护,在早期阶段选择正确的体系结构,才是明智的做法。 MVC、MVP、MVVM和MVI等许多体系结构可帮助 Android 开发人员轻松维护、测试和开发新功能。 上图说明了在设计完应用程序后,所有模块应如何相互交互。尽管这完全取决于你的组织,但你也有可能会有机会选择适合应用程序的体系结构。 但是,强烈建议你选择适合需求的特定体系结构。 关于哪种架构最好这个话题也是众说纷纭。 根据开发人员指南: “没有任何一种方法能够编写出适用于每种情况的最佳应用程序。话虽如此,对于大多数情况和工作流来说,这种推荐的体系结构都是一个很好的起点。” 善加利用Android Studio Android Studio 提供了最快的工具,可以为每种类型的 Android 设备构建应用程序。 不幸的是,我们仅探索了该IDE的一小部分。Android

将Android系统源码导入Android studio的方法

半世苍凉 提交于 2019-12-20 09:38:03
Android源码目录结构如下: |-- Makefile |-- abi (applicationbinary interface,应用程序二进制接口,生成libgabi++.so相关库文件) |-- art (google在4.4后加入用来代替Dalvik的运行时) |-- bionic (Android的C library,即C库文件) |-- bootable (启动引导相关代码) |-- build (存放系统编译规则及generic等基础开发配置包) |-- cts (Android兼容性测试套件标准) |-- dalvik (dalvik JAVA虚拟机) |-- developers (开发者用,存放几个例子) |-- development (开发者需要的一些例程及工具) |-- device (设备相关代码,这是各厂商需要配置和修改的代码) |-- docs (介绍开源相关文档) |-- external (android使用的一些开源的模组) |-- frameworks (核心框架——java及C++语言) |-- hardware (部分厂家开源的硬解适配层HAL代码) |-- kernel (驱动内核相关代码) |-- libcore (核心库相关) |-- libnativehelper (JNI用到的库) |-- ndk (ndk相关) |--

Android安装 sdk+jdk+Eclipse+Adt开发工具

。_饼干妹妹 提交于 2019-12-20 06:50:48
根据别人提供的手册和安装过程体验加以更新和详细描述 安装Android开发工具 开发Android应用程序的门坎并不高,因为Google已经为Android应用程序开发提供了免费而且跨平台的集成开发环境。只要手上有台计算机,能连接上网络,我们就能随时下载相关的开发工具下来,着手开发Android应用程序。 2.1 系统需求 想要开始学习Android应用程序设计,仅需要一套个人计算机系统,并在其上安装好“Android开发工具”即可。目前市面上大多数的计算机(不包含上网本)应该都能满足Android应用程序开发的基本需求。 2.1.1 操作系统 我有台计算机了,但Android应用程序应该在哪一种操作系统上来开发呢? Android应用程序可以在所有主流操作系统(Windows、Mac、Linux)上开发。 l Windows XP、Vista或者Windows 7 l Mac OS X 10.4.8或之后版本(仅适用x86架构的Intel Mac 。如果读者都是2007年后买的Mac,那应该都是Intel核心的Mac) l Linux(Linux很有很多发布套件,官方是在Ubuntu上测试,但是应该所有常见的发布包,如Fedora、Debian、OpenSUSE上都可以使用)。 本教程主要在Windows 操作系统上开发与测试。 2.1.2 必要开发工具