首页
学习
活动
专区
工具
TVP
发布

移动开发面面观

专栏作者
80
文章
94725
阅读量
30
订阅数
RecyclerView的复用机制
RecyclerView是Android业务开发非常常用的组件。我们知道它有复用,并且设计优雅。可能看过源码的同学还知道,它有几层复用。 但看网上的博客会发现,大多只是照着源码看一遍,并不会仔细地分析和推敲,RecyclerView为什么要设计这一层缓存,每一层缓存在什么情景下使用,以及每一层缓存的设置,对RecyclerView运行真正的影响。 所以,笔者试图通过本文,讲清楚以下几个问题:
Oceanlong
2020-06-28
1.1K0
The Key of Widget in Flutter
当我们刚开始使用Flutter,我们在继承StatelessWidget和StatefulWidget时,不会关注Key。整个界面的渲染通常也不会有什么问题。但当我们想要复用Widget,想要优化我们的渲染性能时,Key就成为了一个绕不过的话题。
Oceanlong
2020-03-20
1.1K0
Flutter Notification使用说明
在Flutter进行界面开发时,我们经常会遇到数据传递的问题。由于Flutter采用节点树的方式组织页面,以致于一个普通页面的节点层级会很深。当我们需要在子节点向父节点传递一些信息时,我们不可能层层传递Listener,所以我们需要一种在子节点跨层级传递消息的方式。
Oceanlong
2020-02-25
1.4K0
InheritedWidget使用说明
在Flutter进行界面开发时,我们经常会遇到数据传递的问题。由于Flutter采用节点树的方式组织页面,以致于一个普通页面的节点层级会很深。此时,我们如果还是一层层传递数据,当需要修改数据时,就会比较麻烦。
Oceanlong
2020-02-24
1.1K0
LeakCanary源码解析
LeakCanary是Android开发中非常常用的一个内存泄漏监测和分析工具。了解其工作原理,有助于对Android的内存泄漏有更深层次的认识。
Oceanlong
2019-03-15
9590
Android Gradle Get Start
Gradle其实是一套平台和规范,为打包提供的规范。而Android的打包,是Google写的一个Gradle插件。
Oceanlong
2019-03-12
8680
Android JNI 开发
几乎稍有经验的Android开发,都会在工作中用到JNI的开发。即使工作中没有涉及到JNI的开发,在我们使用第三方的库时,也经常需要引入.so文件。
Oceanlong
2019-02-22
1.2K0
Android 动态加载so文件
在开发中,我们时常会遇到包体积过大的情况。其中,一个大的第三方so文件,经常会让人头痛。那么,能否动态加载.so文件呢?答案是可以的。
Oceanlong
2019-02-22
3.8K0
Android dependencies 基础知识
在build:gradle2.x的时代,我们在进行第三方依赖时,会有一些尴尬的问题。比如,我们制作了一个库,依赖了Glide2.0 。项目组集成我们的库,同时也需要使用Glide4.0 。
Oceanlong
2018-12-05
2.5K0
iOS学习笔记——AlamoFire
前言 在移动开发中,发起http请求几乎是每个app必备的功能。今天就用这篇博客记录iOS发起http请求的示例代码。 本文基于swift,使用第三方库Alamofire。 引入第三方库 iOS与Android类似,都会通过一个构建脚本来实现对工程第三方依赖的管理。在Android中这个脚本叫build.gradle。在iOS开发中,这个脚本叫Podfile。我们通过编辑Podfile管理iOS工程的依赖: platform :ios, '8.0' use_frameworks! target 'Hell
Oceanlong
2018-07-03
1.7K0
Android引入OpenCV
简介 在移动开发中,如果我们要实现一些图像处理相关的功能,难免要用到OpenCV。而OpenCV是用c++开发的。我们在Android中,需要使用jni的方法去使用它。 引入配置 我们引入jni开发的基本配置方法,已经在另一篇博客中介绍过了,不再赘述。这一次我们无非是要引入第三方的c++库。 首先,我们找到或新建jniLibs文件夹,然后将依赖的动态库和静态库(路径为OpenCV-android-sdk\sdk\native\libs)拷贝到\src\main\jniLibs下面。 然后,找到cpp文件夹。
Oceanlong
2018-07-03
1.1K0
Android插件化——Activity的启动
在之前的文章中,我们有讲过Android插件化加载资源。其核心思想是,通过仿照安装的流程,自行创建Resources,然后通过ResId去加载相应的资源。 同样,在启动插件Activity时,我们的思路也类似。通过仿照Activity的启动过程,我们自行创建Activity,“偷梁换柱”,交给系统去启动。 思路参考:VirtualAPK 为了成功地实施“偷梁换柱”我们首先要熟悉Activity的启动流程: Activity.startActivity Activity.startActivityForRes
Oceanlong
2018-07-03
7380
Android插件化——资源加载
前言 资源,是APK包体积过大的病因之一。插件化技术将模块解耦,通过插件的形式加载。插件化技术中,每个插件都能够作为单独的APK独立运行。宿主启动插件的类,难免要涉及插件类中的资源问题。 那么,如何加载插件资源,就成为一个待解决的问题。 原理 参考APK打包流程:Android插件化基础-APK打包流程 Android工程在打包成apk时,会使用aapt将工程中的资源名与id在R.java中一一映射起来。 R.java public static final int ic_launcher=0x7f
Oceanlong
2018-07-03
1.3K0
Android并发备忘录
前言 随着Java的发展,并发这个概念不再是服务端独有的了。Android等移动端在App越做越大的趋势下,合理地控制并发也成为了一个非常重要的技能。在这里对Android开发中可能用到的并发知识做一个记录,以作备忘。 ---- 线程 提到并发不得不提线程。线程就是CPU将计算的时间片,分配给某个任务。线程与CPU核心数量并不直接关系,单核CPU也可以模拟出多线程,只是它将时间片分给不同的线程,让他们交叉执行任务。 值得注意的是,线程的主要作用是让任务能够并行执行。它并不能保证任务能够更快的执行。尤其在单核
Oceanlong
2018-07-03
4880
Android事件分发备忘
前言 事件的分发是面试的必考题,也是Android作为一个移动系统,与用户交互的基础。由于整个事件分发比较繁杂,这里做一个总结,以作备忘。 事实上,Android系统中的事件分发机制是一个委托者模型。我们先从最简单的看起。 三个方法 在Android的摸触事件中,我们通常关注的方法有三个。 dispatchTouchEvent(MotionEvent event) onInterceptTouchEvent(MotionEvent event) onTouchEvent(MotionEvent event)
Oceanlong
2018-07-03
4090
JNI处理图片——黑白滤镜
前言 在Android的开发中,我们有时会遇到对性能要求比较高的模块。所幸Android通过NDK为我们提供了c++开发的方式。我们可以通过c++完成核心的耗时的计算,然后通过JNI的方式将处理完成的
Oceanlong
2018-07-03
1.4K0
okhttp使用备忘录
前言 OkHttp是目前使用最广泛的移动端网络底层库。在Volley、Retrofit等知名上层网络库中,都可以看到它的身影。即使在高版本的Android系统中的URLConnection中也可以看到它的身影。� 因为,各大网络库对OkHttp进行了封装。我们虽然使用方便,却不免失去了一定的灵活性。如果OkHttp拥有的功能,上层库却没有封装,我们在使用时,就会比较麻烦。因此,我们在这里尝试直接使用OkHttp,看看未经封装的OkHttp如何使用。 Request OkHttp将请求封装在了Request类
Oceanlong
2018-07-03
4500
ProgressiveJpeg介绍与在Android中的使用
什么是Jpeg JPEG/JFIF是万维网(World Wide Web)上最普遍的被用来存储和传输照片的格式。它并不适合于线条绘图(drawing)和其他文字或图标(iconic)的图形,因为它的压缩方法用在这些类型的图形上,得到的结果并不好(PNG和GIF格式通常是用来存储这类的图形;GIF每个像素只有8比特,并不很适合于存储彩色照片,PNG可以无损地存储照片,但是文件太大的缺点让它不太适合在网络上传输)。 什么是ProgressiveJpeg 我们在网页中浏览大图时,如果图片够大,网速够慢,我们
Oceanlong
2018-07-03
1.7K0
ForkJoinPool简介ForkJoinPool
ForkJoinPool 背景描述 过去我们在线程池解决问题时,通常维护了一个阻塞的任务队列。每个工作线程在任务完成后,就会去任务队列里面寻找任务。这种方式在我们执行数量较多且不互相依赖的任务时非常方便且高效。但是当我们需要执行一个很大的任务时,普通的线程池似乎就很难有什么帮助了。 在JDK7中新增了ForkJoinPool。ForkJoinPool采用分治+work-stealing的思想。可以让我们很方便地将一个大任务拆散成小任务,并行地执行,提高CPU的使用率。关于ForkJoinPool的精妙之处,
Oceanlong
2018-07-03
9430
Android线程池的详细说明(二)
下面我们来看一看它的工作原理。 线程池的主要状态由一个AtomicInteger变量ctl控制,里面存放了两个概念变量: workerCount 表示有效线程的数量。 runState 表示线程池是否在运行或是正在关闭等状态。 <b>workerCount:</b> 为了把这两个变量包装到同一个int中,ThreadPoolExecutor限制了workerCount最大值是2^29-1。workerCount是允许开发和未允许关闭的线程数之和。这个数字可能在短时间与实际存活的线程数不同。比如在Threa
Oceanlong
2018-07-03
8470
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档