android架构

Android 架构设计浅谈

一世执手 提交于 2019-12-14 00:48:01
1.1 基本结构 基本架构我先用现在市面普及和成熟的mvp(model-view-presenter),我的理念是职责分层,高内聚低耦合。 MVP模式的核心思想: 相对于我们大家以前熟知的mvc来说,mvp把activity中的UI逻辑抽象成View接口,吧业务逻辑抽象成presenter接口,model类还是原来的model。 1.2mvp 模式的作用 1.分离了视图逻辑和业务逻辑,降低了耦合 2.ativity只处理生命周期的任务,代码变得更加简洁 3.视图逻辑个业务逻辑分别抽象到了view和presenter的接口中去,提高代码的可阅读性 4.presenter被抽象成接口,可以有多重具体的实现,所以方便进行单元测试 5.把业务逻辑抽到presneter中去,避免后台线程引用着activity导致activity的资源无法被系统 回收从而引起内存泄露和oom 1.3mvp 模式的使用 创建IPresenter接口,把所有业务逻辑的接口都放在这里,并创建它的实现PresenterCompl(在这里可以方便地查看业务的功能,由于接口可以有多重实现所以也方便写单元测试) 创建IView接口,把所有视图逻辑的接口都放在这里,其实现类是当前的activity/fragment 由UML图可以看出,activity里包含了一个IPresenter

EGL 介绍和使用

为君一笑 提交于 2019-12-13 16:34:48
1、形象介绍 原文地址: https://www.jianshu.com/p/95dfe935b169 部分内容摘自其他博客,请见最下[参考资料] 首先来看看Android官方对EGL的解释: OpenGL ES 定义了一个渲染图形的 API,但没有定义窗口系统。为了让 GLES 能够适合各种平台,GLES 将与知道如何通过操作系统创建和访问窗口的库结合使用。用于 Android 的库称为 EGL。如果要绘制纹理多边形,应使用 GLES 调用;如果要在屏幕上进行渲染,应使用 EGL 调用。 OpenGL ES 是Android绘图API,但OpenGL ES是平台通用的,在特定设备上使用需要一个中间层做适配,这个中间层就是EGL。 EGL架构 Display(EGLDisplay) 是对实际显示设备的抽象。 Surface(EGLSurface)是对用来存储图像的内存区域 FrameBuffer 的抽象,包括 Color Buffer, Stencil Buffer ,Depth Buffer。 Context (EGLContext) 存储 OpenGL ES绘图的一些状态信息。 Android中的OpenGL 与EGL Android 2.0版本之后图形系统的底层渲染均由OpenGL负责,OpenGL除了负责处理3D API调用,还需负责管理显示内存及处理Android

Android MVP模式浅谈

自闭症网瘾萝莉.ら 提交于 2019-12-12 15:49:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Model – 为UI层提供的数据,或者保存UI层传下来的数据 View – 单纯的展示数据,响应用户操作并都转发给Presenter来做具体的处理 Presenter – 逻辑控制层,从Model处取数据,运算和转化,最后用View来展示;并处理View传过来的用户事件,并做处理 需要注意的是MVP仅用于应用中的GUI部分,它并不是整个应用的架构方式。一个应用的主要的架构应该包括基础组件,业务逻辑层和GUI展示层,而MVP仅是用于展示层的设计模式。另外,它是一个方法论的东西,没有固定的实现方式,只要能体现出它的方法就可以算是MVP。 MVP与 MVC 的区别 MVC之中逻辑是放在了Model里,Controller负责桥接View和Model,View发生变化时通知Controller,Controller再通知Model,Model进行逻辑处理,更新数据,然后通知View来刷新。可以看到MVC中三者之间都有联系,如果处理不好,或者当View比较复杂时,三者之间都会双向关联。MVC在命令行应用,以及WEB中有大量的应用,但对于客户端(PC和移动端)的GUI应用,MVC往往解决不了复杂性,移植性上以及可测试性上也没有优势。 MVP的改进在于: 逻辑放在Presenter中 View和Model抽象成为接口

教你用两招就完美解决 Android 滑动冲突!

无人久伴 提交于 2019-12-11 23:38:18
冲突情况 在 Android 开发中,滑动冲突总是我们一个无法避免的话题。而对于解决方案却是众说纷纭。比如 RecyclerView 嵌套 RecyclerView,直接通过相关方法禁掉内部 RecyclerView 的滑动;ScrollView 嵌套 RecyclerView 直接把 ScrollView 替换为 NestedScrollView 等等。 但我们今天要说的是在自定义 View 中遇到滑动冲突时,我们又应该如何处理呢?当然,今天的话题需要 View 的事件分发机制做理论前提。 1. 简单介绍 View 的事件分发机制 当然,这里也可以简单地提一下,基本的流程就是下面的伪代码。 public boolean dispatchTouchEvent(MotionEvent ev) { boolean consume = false; if (onInterceptTouchEvent(ev)) { consume = onTouchEvent(ev); }else{ consume = child.dispatchTouchEvent(ev); } return consume; } 当一个 ViewGroup 接收到一个事件的时候,首先会调用 dispatchTouchEvent () 方法进行事件分发,如果 onInterceptTouchEvent () 返回

面试过程中,你知道这些小知识,将事半功倍

╄→尐↘猪︶ㄣ 提交于 2019-12-11 21:01:17
在平时我们面试的过程总总会遇到一些面试官问一些平时我们不怎么注意的问题,当问出来的时候,面试者通常都是一脸懵逼,这和我想象中的不一样阿,怎么不按照套路出牌,当然一些小知识更能体现出你的细心和好学,以下分析20个面试中的小知识,共勉~.· 整理的这份PDF有从基础到进阶。含有BATJ.字节跳动面试专题,算法专题,高端技术专题,混合开发专题,java面试专题,Android,Java小知识,到性能优化.线程.View.OpenCV.NDK等应有尽有。还有辅之相关的视频+学习笔记 (更多完整项目下载。未完待续。源码。图文知识后续上传github。) 可以点击 关于我 联系我获取完整PDF和面试准备路线 ( VX:mm14525201314 ) Android 面试帮助篇 1 、要做一个尽可能流畅的 ListView ,你平时在工作中如何进行优化的? ①Item 布局,层级越少越好,使用 hierarchyview 工具查看优化 。 ②复用 convertView ③使用 ViewHolder ④item 中有图片时,异步加载 ⑤快速滑动时,不加载图片 ⑥item 中有图片时,应对图片进行适当压缩 ⑦实现数据的分页加载 2 、对于 Android的安全问题 ①错误导出组件 ② 参数校验不严 ③WebView 引入各种安全问题,webview 中的 js 注入 ④不混淆、不防二次打包

生成自定义NDK交叉编译链(toolchain)

℡╲_俬逩灬. 提交于 2019-12-11 01:16:29
背景:在Mac下编译FFmpeg库时,看了比较多的教程基本都失败,偶然间发现NDK在去GCC化,需要通过交叉编译来完成编译,这里记录下NDK交叉编译链过程 地址 https://developer.android.google.cn/ndk/guides/standalone_toolchain 简单说交叉编译就是在A平台下编译B平台上可以使用的二进制库文件。 环境 操作系统:mac os 10.14.2 ndk版本:android-ndk-r20 编译器:clang 选择工具链(toolchain) android平台目前的架构有armeabi、armeabi-v7a、arm64-v8a、x86、x86_64、mips,在编译不同平台架构的库时,我们需要指定不同的交叉编译链来完成编译的工作,具体对应关系如下表: ABI toolchain armeabi-v7a armv7a-linux-androideabi arm64-v8a aarch64-linux-android x86 i686-linux-android x86-64 x86_64-linux-android 具体对应工具链的地址是在$NDK_HOME/toolchains目录中 制作工具链(toolchain) NDK提供make-standalone-toolchain.sh

[Android各版本特性]Android 8.0 Oreo

好久不见. 提交于 2019-12-10 23:05:18
Android8.0版本调整了很多东西,特别要注意的是: 后台service限制。 无法继续在清单中为隐式广播注册广播接收器。 后台位置信息限制。 通知增加渠道ID 音频焦点AudioFocusRequest变更。 文章目录 1.通知 2.画中画模式 3.可下载字体 4.XML 中的字体 5.自动调整 TextView 的大小 6.自适应图标 7.颜色管理 8.多显示器支持 9.统一的布局外边距和内边距 10.AnimatorSet 11.缓存数据 12.内容刷新请求 13.JobScheduler 改进 14.显式请求音频焦点 15.蓝牙 16.权限 *17.后台执行限制 18.Android 后台位置限制 19.网络连接和 HTTP(S) 连接 1.通知 通知渠道 :Android 8.0 引入了通知渠道,其允许您为要显示的每种通知类型创建用户可自定义的渠道。用户界面将通知渠道称之为通知类别。 通知标志 :Android 8.0 引入了对在应用启动器图标上显示通知标志的支持。通知标志可反映某个应用是否存在与其关联、并且用户尚未予以清除也未对其采取行动的通知。通知标志也称为通知点。 休眠 :用户可以将通知置于休眠状态,以便稍后重新显示它。重新显示时通知的重要程度与首次显示时相同。应用可以移除或更新已休眠的通知,但更新休眠的通知并不会使其重新显示。 通知超时 :现在,使用

吴裕雄--天生自然Android开发学习:1.2 开发环境搭建

大兔子大兔子 提交于 2019-12-10 22:26:51
现在主流的Android开发环境有: ①Eclipse + ADT + SDK ②Android Studio + SDK ③IntelliJ IDEA + SDK 现在国内大部分开发人员还是使用的Eclipse,而谷歌宣布不再更新ADT后,并且官网也去掉了集成Android开发环境的Eclipse下载链接,各种现象都表示开发者最后都终将过渡到Android Studio,当然这段过渡时间会很长,但如果你是刚学Android的话建议直接冲Android Studio着手;而且很多优秀的开源项目都是基于Android Studio!当然,在本教程中对两种开发环境都会进行一个介绍,用哪个取决与你自己~ 还有一个IntelliJ,和Android Studio差不多的,并不对此进行讲解! 1.JDK安装与配置环境变量的配置 配置环境变量是为了方便我们一些命令行的操作,后续会用到! 右键我的电脑——>高级——> 新建JAVA_HOME系统变量 2.开发工具二选一 一开始也说了开发环境IDE的现状,另外前面忘记说一点:Android Studio是比较吃配置的,如果电脑不怎么好,建议还是先使用Eclipse进行Android开发,下面先说下我们熟悉IDE开发APP的流程,按照下述流程来熟悉IDE的使用: 3.相关术语的解析 Dalvik: Android特有的虚拟机,和JVM不同

第41天:IDA动态调试so(差点die了)

∥☆過路亽.° 提交于 2019-12-10 21:30:57
我是废物我是废物我是废物 搞了两天,动调so我终于成功一次了。 网上很多教程,无奈我全没复现成功。 先提一下,一定一定最好用真机调试,我失败是因为我一直用的夜神模拟器x86架构的,然后我用android原生arm架构的就成功了。但是这个原生模拟器真是龟速,10几分钟开机,我吐了。。。。所以推荐android真机。 卧槽,明天十点考试,我还没开始复习。。。。心累。 写一下我遇到的坑吧。千万不要用主要打游戏的模拟器。 无论是什么,一定要有root权限。 首先是把android_server复制到模拟器或真机。 adb push android_server /data/路径自己写 chmod 777 android_server ./android_server 然后需要转发端口,adb forward tcp:23946 tcp:23946 第一个应该是电脑端口,第二个是安卓的端口。 然后可以附加程序。 不行了,我不行了,我要通宵复习了,明天有空用一道题详细讲解一下吧,不过网上教程挺多,可以参考,踩到的坑可以评论提问,我觉得我把坑都踩遍了。。。。。 来源: CSDN 作者: J1nX 链接: https://blog.csdn.net/qq_41858371/article/details/103482401

吴裕雄--天生自然Android开发学习:android 背景相关与系统架构分析

╄→гoц情女王★ 提交于 2019-12-10 19:29:57
1.Android背景与当前的状况 Android系统是由Andy Rubin创建的,后来被Google收购了;最早的版本是:Android 1.1版本 而现在最新的版本是今年5.28,Google I/O大会上推出的Android M,有趣的是Android系统的命名都是以点心来命名的,下述表是15个Android版本名称,对应API号以及发布时间! 看完上面的信息,我们可能有这样的一个疑问: 那么多的系统版本,我们开发的时候要针对哪个版本进行开发? 这就是作为一个Android必须面对的Android的"碎片化"问题了,而这个问题又分为两个: ①系统碎片化:我们开发App时可能需要做到低版本兼容,比如,最低兼容至2.3版本;由于各种Rom定制的盛行,国人都喜欢对原生系统做一些更改,这导致了在原生系统上可行,而在定制Rom上不可行的问题,比如相机调用~ ②屏幕碎片化:市面上各种各样屏幕尺寸的手机,4.3寸,4.5寸,4.7寸,5.0寸,5.3寸...等等,除了手机外,还有Android平板,所以开发时我们可能要处理这个屏幕适配的问题,当然,刚学我们并不需要去考虑这些复杂的东西,后续实际开发我们再来深究! 2.Android系统特性与平台架构 系统特性: 应用程序框架支持组件的重用与替换(app发布时遵守了框架的约定,其他app也可以使用该模块) Dalvik虚拟机