- 博客(118)
- 资源 (6)
- 问答 (1)
- 收藏
- 关注
原创 java.lang.SecurityException: getImeiForSlot: The user 10282 does not meet the requirement
项目场景:这两天项目升级Android 编译版本,将build.gradle 中的 compileSdkVersion 升级到 29后,发现APP在Android 10 及Android 11设备上在调用获取设备信息的时候崩溃了。问题描述:Android 编译版本升级为29后,在Android 10 和Android 11 手机上获取设备信息崩溃,报错java.lang.SecurityException: getImeiForSlot: The user 10282 does not meet
2020-12-17 20:36:51 12742 3
原创 Androidstudio 4.1 找不到符号: 变量 VERSION_NAME 位置: 类 BuildConfig
发生场景:昨天把 AS 升级到4.1.1,gradle 升级到com.android.tools.build:gradle:4.1.1 ,然后一顿操作猛如虎。在时候,就是找不到包名下的BuildConfig.VERSION_NAME,如下图所示问题描述:编译时报错:错误: 找不到符号符号: 变量 VERSION_NAME位置: 类 BuildConfig原因分析:从com.android.tools.build:gradle:4.1.0开始,build.gradle文件正式移除了
2020-12-14 13:36:07 11394 9
原创 Android源码分析——ViewGroup的事件分发机制(二)
通过前一篇博客View的事件分发机制,从dispatchTouchEvent说起(一)的介绍相信大家对 Android View 事件的分发机制有了很深的理解。我们知道 Android 中 View 是存在于 Activity。 今天我们继续学习 Activity 到 ViewGroup 的事件分发机制。一、Activity 分发到 ViewGroup当我们手指触摸到屏幕时,最先接收到事件的...
2020-04-05 21:31:27 2598 2
原创 View的事件分发机制,从dispatchTouchEvent说起(一)
事件分发机制是android中的核心知识点和难点。相信很多人也和我一样对于这点感到非常困惑。我看了很多篇博客和书面资料。今天我们就聊聊事件的分发机制。一、点击事件的传递规则1、什么是点击事件(MotionEvent)在了解点击事件的传递规则之前,我们首先要弄明白什么事点击事件(MotionEvent),所谓MotionEvent是指手指接触屏幕后所产生的一系列事件。ACTION_DOWN...
2020-03-30 22:01:22 3401 2
原创 Android源码分析——View是如何被添加到屏幕的?
前言在 Android 中,我们知道我们能看到的界面都是 Activity ,但是我们能看到的这些 View 是如何被添加到View中的昵?今天这篇文章我们就通过源码来追踪溯源,看看 View 究竟是如何被添加到手机屏幕上的。本文篇幅较长请大家耐心阅读。View 被添加到Activity的步骤我们写一个Activity的时候一般都是如下所示的写法来将资源资源加载到了Activity 。pu...
2020-03-28 13:53:03 2737 5
原创 不奋发,则心日颓靡;不检束,则心日恣肆。
前言我很少写一些非技术的东西,今天就扯点别的东西。聊一聊我们程序员的生活,也是聊一下最近两年自己的一些感受吧。身体是革命最重要的本钱“身体是革命最终的本钱”,这句话说的非常对,我们只有好的身体能,在工作中拼出我们的未来。没有好的身体即使是十八般武艺样样精通,也很难施展。工作了两三年了,之前一直是加班,缺乏锻炼,体重一直增加,抵抗力也大不如从前了。最近这段时间自己眼睛不太好,已经将近两个月了...
2019-10-24 10:52:33 3037 4
原创 最长回文子串——动态规划和马拉车算法
题目s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”分析我们首先要理解什么是"回文",回文就是无论从前往后读还是从后往前读都是一样的,如:“abcba”,"noon"等。那么要求回文串,最简单直接的方法就是暴力法,...
2019-08-10 12:01:50 2261
原创 Android热修复——深入剖析AndFix热修复及自己动手实现
前言去年写过一篇热修复的文章,那时候刚开始接触,照猫画虎画的还算比较成功。但是那种修复需要重新启动APP,也就是在JAVA层实现的热修复。我们知道目前Android主流的修复还有在Native层实现修复的,就是在Native层替换方法,不用重新启动APP。今天写了个Demo,下面主要分享一下它的主要原理。1、热修复目前,热修复的原理主要有两种技术,一是不需要启动APP就能实现修复,在Nati...
2019-07-20 23:07:00 6836 7
原创 滑动窗口算法
什么是滑动窗口算法我们学习过计算机网络都知道为了避免拥塞发生,在网络传输时有滑动窗口协议控制传输时流量。该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输,提高网络吞吐量。这个跟我们今天说的滑动窗口算法是一个原理。滑动窗口算法的作用该算法的作用就是将我们多层嵌套的循环语句根据局部最优解来转换为单个的循环语句,从而减少时...
2019-07-13 22:02:14 10638 5
原创 手撸一款Android屏幕适配SDK
1、屏幕适配的原因Android手机屏幕碎片化严重,导致界面元素在不同屏幕上的显示效果不一致。下面我们看下未对控件适配在不同屏幕上的截图。这是MI6,未适配。这是夜游模拟器为适配2、屏幕适配的目的让界面元素匹配不同屏幕的尺寸3、屏幕适配的方式布局适配避免写死布局控件,使用warp_content,match_parent。LinerLayout 使用layout_weigh...
2019-07-08 17:45:29 4343 3
原创 静态库与动态库原理,编译流程详解
编译流程1、预处理(Preprocessing)完成宏替换、文件引入,以及去除空行、注释等,为下一步的编译做准备。 $ gcc -E test.c -o test.i -E让gcc在预处理结束后停止编译,test.i 为预处理后的输出文件。-o:指定输出文件。 也就是对各种预处理命令进行处理,包括头文件的包含、宏定义的扩展、条件编译的选择等2、编译(Compilation)将预处...
2019-06-30 20:23:04 3918
原创 NDK基础知识
前言学习NDK之前我们首先需要了解NDK是什么?Android NDK 是一套允许您使用 C 和 C++ 等语言,以原生代码实现部分应用的工具集。在开发某些类型的应用时,这有助于您重复使用以这些语言编写的代码库。——Android中文开发技术文档那么我们首先需要有C或C++的基础,下面介绍一些C/C++的基础知识。1、函数指针函数:返回值是一个指针的函数,即本质是一个函数...
2019-06-30 20:17:50 2710
原创 深入理解HashMap原理(二)——手写HashMap
前言前面一篇文章(深入理解HashMap原理(一)——HashMap源码解析(JDK 1.8))我们通过JDK 1.8的HashMap的源码了解了HashMap的原理。俗话说:光说不练假把式。下面我们自己动手撸一个HashMap。本文基于JDK1.7 只写数组+链表结构。思考我们前面知道,HashMap的存储结构为散列表,解决哈希冲突是通过链表法解决的,结构如下:那么我们也要来...
2019-04-17 13:59:13 4558 7
原创 深入理解HashMap原理(一)——HashMap源码解析(JDK 1.8)
介绍HashMap原理是JAVA和Android面试中经常会遇到的问题,这篇文章将通过HashMap在JDK1.7和1.8 中的源码来解析HashMap的原理。相关源码数组采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),当然,对于有序数组,则可采用二分查找,插值查找,斐波那契查...
2019-04-10 14:11:18 4811 4
原创 [Android设计模式之旅]——责任链模式
介绍责任链模式(Chain of Responsibility Pattern)就是当我们发送一个请求后,沿着一个任务链执行,任务链上每个对象都能处理该请求,如果一个对象不处理,就会传递给下一个对象。这原理好像跟事件分发机制有点像啊!意图职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。所以责任...
2019-03-23 15:05:22 2315
原创 [Android设计模式之旅]————适配器模式
定义Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatile interfaces.将一个类的接口变成客户端所期待的另一中接口,从而使原本因接口不...
2019-03-21 16:20:32 2496
原创 [Android设计模式之旅]———原型模式
前言原型模式是一种比较简单的设计模式,听名字“原型”我们可以隐约猜到可能带有原型属性。其实原型模式是一个创建型模式。原型模式中应该有一个样板对象,有一个具备克隆能力抽象类或接口,具体原型类实现该接口,内部复制出一个对象。原型模式一般用在创建比较复杂或是耗时的实例,通过克隆可以使得程序运行更加高效。定义用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。使用场景原型模式我们前面...
2019-03-16 22:01:15 2216
原创 [Android设计模式之旅]——单例模式
前言单例模式应该是我们平时开发过程中最常用到的设计模式之一,它的核心结构中包含一个被称为单例的特殊类。通过单例模式能够保证程序中只有一个类只有一个实例。定义“单例模式是保证一个类只有一个实例,并且提供一个能够全局访问他的节点”————《设计模式》单例模式的实现方式1、饿汉模式public class Singleton{ private Singleton singleInstan...
2019-03-06 11:22:10 2330
原创 Android 模块化、组件化、插件化以及热修复的比较
前言已经好久好久没有更新博客了,去年后半年太忙,没怎么抽出时间来写博客。以后给自己定个小目标,不管多忙,每周都要写一篇博客。闲话不多说,下面开始扯正题,最近有个同事问我“模块化、组件化,插件化还有热更新他们之间有什么关系和区别?“概述随着产品的业务不断的增加,我们的APP中代码就会越来越多,这时侯为了方便我们多个成员之间协同开发,所以就出现的根据业务,将我们代码分割为不同的模块(用户中心模块...
2019-03-05 22:21:40 3393 1
转载 Java的基本数据类型在虚拟机中的实现
前言首先我们做个小测验,通过下面代码来看看Java语言和Java虚拟机对boolean类型有什么不同:public class Foo { public static void main(String[] args) { boolean flag = true; if (flag) System.out.println("Hello, Java!"); ...
2018-09-19 17:37:31 3407
原创 Handler 源码解析——Handler的创建
前言Android 提供了Handler和Looper来来满足线程间的通信,而前面我们所说的IPC指的是进程间的通信。这是两个完全不同的概念。Handler先进先出原则,Looper类用来管理特定线程内消息的交换(MessageExchange);1、为什么会有Handler机制?我们刚说Handler机制的主要作用是将某一任务切换到特定的线程来执行,我们做项目可能都遇到过AN...
2018-08-18 16:07:15 2961
原创 Android学习--深入探索RemoteViews
什么是RemoteViewsRemoteViews表示的是一个View结构,它可以在其他进程中显示,由于它在其他进程中显示,为了能够及时更新它的界面,RemoteViews提供了一组基础的操作来跨进程更新它的界面。源码中对于它的解释如下:/** * A class that describes a view hierarchy that can be displayed in * ...
2018-08-05 21:15:19 2630
转载 初探JAVA代码在虚拟机中的运行机制
前言从这篇文章开始,后面我们将持续介绍JAVA虚拟机的工作原理。作为一名Android程序员,我们都知道Java代码有很多种运行方式,比如:可以在命令行中运行,可以在开发工具中运行,可以以jar文件的形式运行,甚至可以在网页中运行。这些执行的方式都离不开JRE(Java Runtime Environment) 即Java运行时环境。 我们平时开发之前搭建环境安装的JDK里面也有JRE,下面...
2018-08-04 00:06:13 6284 3
原创 Android学习——手把手教你实现Android热修复
前言最近一段时间看了一些关于Android热修复的知识,比如Andfix,Tinker,Sophix等,看了这些框架的原理,就想着自己能不能手撸一个简单的demo。下面我们就来自己动手实现Android热修复吧。热修复实现原理所谓热修复就是,在我们应用上线后出现小bug需要及时修复时,不用再发新的安装包,只需要发布补丁包,在客户不知不觉之间修复掉bug,JAVA虚拟机JVM在运行时...
2018-07-07 20:50:50 19912 24
原创 Android自定义无压缩加载超清大图
自定义无压缩加载超清大图前言 已经很久没有写博客了,前段时间做项目就遇到加载超大图时系统内存溢出,我们一般处理加载图片时OOM的方法都是对图片进行压缩。但是发现手机系统相册是可以打开大图的,今天就分享一波自定义无压缩加载超清大图。 BitmapRegionDecoder BitmapRegionDecoder用来解码一张图片的某个矩形区域,通常用于加载某个图片的指定区域。...
2018-07-01 22:24:17 6078 1
原创 Flutter从入门到实战
Flutter从入门到实战Flutter概述 Flutter是一款移动应用程序SDK,一份代码可以同时生成iOS和Android两个高性能、高保真的应用程序。 Flutter目标是使开发人员能够交付在不同平台上都感觉自然流畅的高性能应用程序。我们兼容滚动行为、排版、图标等方面的差异。 无需移动开发经验即可开始使用。应用程序是用Dart语言编写的,如果您使用过Java或...
2018-05-28 00:06:52 30629 12
原创 Java中 synchronized 关键字学习
前言 线程安全是我们并发编程中很重要的,为什么会造成线程安全,主要原因有两点:1、共享数据(即临界资源)2、多条线程共同操作同一数据。为了解决这种问题,所以引入了锁机制的概念。这种锁很好理解,我们可以理解为,“为了确保临界资源的安全,在同一时刻只能有一个线程调用该临界资源,当某个线程调用临界资源的时候,给它加上锁,不让其他线程调用,只有当前线程调用完临界资源后,开锁,临界资源可以被其他线程...
2018-05-02 19:55:03 3411
原创 Android8.0源码解析——Activity的启动过程
前言 Activity是Android的四大组件,关于Activity 的启动过程是怎么样的昵,下面我们主要通过Android8.0的源码来分析一下。1、Activity的生命周期: Activity的生命周期我们都知道有protected void onCreate(); protected void onRestart(); protected void onStart(); ...
2018-04-12 20:46:20 5980
原创 Okhttp 与 Retrofit的简单介绍及两者间的联系
前言 Android为我们提供了两种HTTP交互的方式:HttpURLConnection和Apache HTTP Client( Android 6.0——API 23已经不支持该方式了 ),虽然两者都支持HTTPS,流的上传和下载,配置超时IPv6和连接池,已足够满足我们各种HTTP请求的需求。但更高效的使用HTTP可以让我们的应用运行更快、更节省流量。这就诞生了Okhttp及Ret...
2018-03-25 21:28:26 8528
原创 Android学习之——Binder学习入门篇
前言 已经不知道多久没有学习,没有写博客了。昨天看到一句“一个好的程序员,还是一名作家。” 感觉自己不应该一天老给自己找借口说工作太忙,没时间学习。废话不多说,下面进入今天的正题那就是大多数Android程序员为之头疼的东西——Binder。但是,Binder又是面试时大多数面试官会问的问题。关于Binder的资料网上有很多很多,但是,由于Binder代码本身就比较枯燥,很多资料都是长篇...
2018-03-12 22:33:11 4862
原创 [Andriod设计模式之旅]——Builder模式
前言 具体介绍Builder设计模式之前,首先我们想一个问题。前段时间双十一室友组了台电脑,我们都知道电脑是一个非常复杂的组合体,里面有好多元件(CPU,硬盘,显示器,电源,显卡等等),不同的人对自己电脑的配置要求不同,但是得到的结果都是不同配置的一台电脑,那么这个过程怎么样封装使组件之间的耦合度降到最低,同时方便扩展。这时候就用到builder设计模式了。一、Builder设计
2017-12-10 15:02:46 3427 1
原创 Android Studio 插件——《阿里巴巴 Java 开发规约》的扫描插件
前言 好久没有写博客了,前不久的杭州云栖大会上,阿里巴巴正式发布了由阿里巴巴 P3C 项目组,经过 247 天的持续研发,正式发布众所期待的 《阿里巴巴 Java 开发规约》的扫描插件! 热爱军事的朋友应该都知道,P3C 是世界知名的反潜巡逻机,专门对付潜艇,寓意是扫描出所有潜在的代码隐患。这个项目组是阿里巴巴开发爱好者自发组织的虚拟项目组,把《阿里巴巴 Java 开发规
2017-10-25 09:57:41 9944 1
转载 Instant App 常见问题官方指南 | Android 开发者 FAQ Vol.6
我们被大家的热情惊到了 —— 事实上我们发出上一篇 Instant App 的文章没几天就收到了一大堆问题。由于涉及到的类目太多,我们这里简单归纳了一下,方便大家查看。如果还有更多问题也请随时通过留言的方式与我们取得联系。1. 基础类问题Q: 哪些设备兼容 Android Instant App?A: Android Instant Ap
2017-08-20 16:04:24 4690
原创 Android实现模拟登陆教务系统并解析网页数据
前言 时光飞逝,日月如梭,转眼间四年的大学生活已经结束啦!开始了程序员的加班生活。我的第二学位的毕业设计是实现一个学习小助手。这其中最重要的环节就是模拟登录学校的教务系统,获取到教务系统的数据并解析,用自己的数据库存储,展示在自己设计的界面上。例如课程表我是仿照超级课程表的界面来设计的。废话不多说下面先看看效果。 抓取教务系统登录时需要传递的参数 模拟登录之前我...
2017-07-09 14:22:05 5373 9
原创 AndroidStudio 插件 之 Findbugs 安装与简单使用教程
前言 对于代码质量的检查,一直是一个比较棘手的问题。虽然我们部门有关于java代码的各种规范,领导也多次强调对代码的评审。但是在实际执行过程中,由于开发人员的水平参差不齐,在开发项目时还有各种其他因素,比如时间紧任务重,自己的代码不规范没有意识到,就疏于对代码质量的检查,然后草率的提交。还有就是大家对代码检测的不重视,有种意识就是即使代码不规范,我们的程序也可以正常运行,为什
2017-04-27 17:26:04 9020 4
转载 Android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
1 Android手机目前常见的分辨率1.1 手机常见分辨率:4:3VGA 640*480 (Video Graphics Array)QVGA 320*240 (Quarter VGA)HVGA 480*320 (Half-size VGA)SVGA 800*600 (Super VGA)5:3WVGA 800*480 (Wide VG
2017-04-20 17:02:51 1728
翻译 在Android中运用RxJava
1、RxJava 2.01.1、什么是RxJava和响应式编程(reactive programming) 在响应编程中,消费者对数据进行反应,这就是为什么异步编程也被称为响应式编程的原因。 响应式编程允许将事件更改传播到已注册的观察者。 RxJava是从Netflix的反向扩展(Rx)到Java的端口。 RxJava是2014年开源的,托管于http://reacti...
2017-04-16 12:45:29 2830
原创 Android Studio 报错 Error:Some file crunching failed, see logs for details
错误描述: Error:Some file crunching failed, see logs for details最近有好多读者问我为什么按照我的方法加完后还是报错。这里做一下补充。注意⚠️:这是一类问题!报这个错大家可以看看Gradle的详细报错日志。具体方法如下:点击右下角的Gradle Console。查看gradle详细日志:问题出现的原因1: 在资源文件中的图片不是PN...
2017-04-15 21:34:19 17968 18
原创 AS 升级之Gradle's dependency cache may be corrupt问题解决办法
问题:今天,发现自己的AndroidStudio可以升级2.3了,于是就兴高采烈的将自己的AndroidStudio由2.2—rc1升级到 2.3 了。升级之后本以为终于可以试试了结果让我呆了。出现如下所示的问题:解决办法:1、在MAC操作系统中,先删除用户目录下的.gradle文件夹(如下所示)。Windows操作系应该也在用户目录下:2、MAC中还应该删除掉Ap
2017-03-06 19:52:15 4913
原创 [Android设计模式之旅]——设计模式的6大原则
前言 已经很久没有写博客了,今天开始继续学习Android的23种设计模式,首先在学习设计模式之前我们得先了解设计模式的六大基本原则——单一SRP(单一指责原则)、OCP(开闭原则)、LSP(里氏替换原则)、DIP(依赖倒置原则)、ISP(接口隔离原则)、LOD(迪米特原则)。1、单一职责原则 单一职责原则的英文名称是Single Responsibility Pr...
2017-02-26 22:58:27 1578
ThinkAndroid Http请求Demo
2015-10-29
Android客户端如何记住登录状态
2015-10-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人