- 博客(87)
- 资源 (6)
- 收藏
- 关注
原创 Android 小米深色模式对View进行适配
问题概述:问题来源于测试提了一个bug,在小米手机上图片直接消失了。原因:造成这个问题的原因在于,小米手机深色模式下会为所有的应用默认开启深色模式,可在设置中主动关闭。哪怕应用没有主动适配,小米也会为应用开启深色模式。其他厂商暂未发现此问题。问题再探究竟:小米手机为开启深色模式的应用开启颜色反转,黑色变成白色,白色变成黑色。正常情况下,应用是可以正常反转使用的。但是如果应用如果使用了shape下的solid属性。就会造成solid反转失效。这也是造成我们应用图片不显示的根本原因。由于solid反转
2020-11-30 16:38:29
2328
原创 数组与容器对比
容器能否完全替代数组?针对数组类型,很多语言都提供了容器类,比如 Java 中的 ArrayList、C++ STL 中的 vector。在项目开发中,什么时候适合用数组,什么时候适合用容器呢?这里我拿 Java 语言来举例。如果你是 Java 工程师,几乎天天都在用 ArrayList,对它应该非常熟悉。那它与数组相比,到底有哪些优势呢?我个人觉得,ArrayList 最大的优势就是可以将...
2019-12-23 20:03:09
763
原创 Linux环境变量总结
Linux是一个多用户多任务的操作系统,可以在Linux中为不同的用户设置不同的运行环境,具体做法是设置不同用户的环境变量。Linux环境变量分类一、按照生命周期来分,Linux环境变量可以分为两类:1、永久的:需要用户修改相关的配置文件,变量永久生效。2、临时的:用户利用export命令,在当前终端下声明环境变量,关闭Shell终端失效。二、按照作用域来分,Linux环境变量可以分为:...
2019-08-20 14:44:43
278
转载 9102年了,还不知道Android为什么卡?
导读最近华为方舟编译器要开源了,笔者去看了下发布会PPT,发现作为一名Android开发者,PPT中所介绍的知识点我居然不能完全看懂???于是乎恶补了下PPT中的内容,整理成本文。本文将用通俗的语言从底层介绍Android卡顿的历史原因和谷歌与之斗争的过程阅读完这篇文章后你将理解计算机是如何解读我们所写的程序并执行相应功能的了解Android虚拟机的进化史从底层了解造成Android...
2019-08-19 11:26:21
647
转载 Android动态加载技术 简单易懂的介绍方式
我们很早开始就在Android项目中采用了动态加载技术,主要目的是为了达到让用户不用重新安装APK就能升级应用的功能(特别是 SDK项目),这样一来不但可以大大提高应用新版本的覆盖率,也减少了服务器对旧版本接口兼容的压力,同时如果也可以快速修复一些线上的BUG。这种技术并不是常规的Android开发方式,早期并没有完善的解决方案。从“不明觉厉”到稳定投入生产,一直以来我总想对此编写一些文档,这也...
2019-08-14 20:43:28
1072
原创 使用Android sdk/build-tools/dx工具转jar为dex时出现:-Djava.ext.dirs is not supported
使用dx.bat工具出现以下错误:-Djava.ext.dirs=C:\Users\EDZ\AppData\Local\Android\Sdk\build-tools\27.0.3\lib is not supported. Use -classpath instead.Error: Could not create the Java Virtual Machine.Error: A fa...
2019-08-14 16:37:55
2026
5
原创 Kotlin实战--给别人的类添加方法:扩展函数和属性
1.概述扩展函数能够让我们与项目无缝接入,我们能够在无侵入的情况下为类添加更多的行为和属性,Kotlin库中很多地方就用到了扩展函数,如Anko库里面的布局系统,集合的使用等。正是由于扩展函数的使用,才可以让我们与JAVA无缝衔接。并且扩展函数的使用非常的简单,下面我将从下面几个方面介绍扩展函数。为什么要使用Kotlin中的扩展函数?如何使用扩展函数和扩展属性?扩展函数和属性原理扩展函...
2019-05-17 15:45:44
1718
原创 Kotlin实战--消除静态工具类:顶层函数和属性
1.引入我们都知道, Java 作为 门面向对象的语言,需要所有的代码都写作类的函数大多数情况下,这种方式还能行得通。但事实上,几乎所有的大型项目,最终都有很多的代码并不能归属到任何 个类中。有时 个操作对应两个不同的类的对象,而且重要性相差无几。有时存在 个基本的对象,但你不想通过实例函数来添加操作,让它的 API 继续膨胀。结果就是,最终这些类将不包含任何的状态或者实例函数,而是仅仅作为一堆...
2019-05-16 16:55:59
436
原创 用Kotlin的Anko库优雅开发Android应用--Anko库详细教程
前言最近Kotlin的呼声又是日益高涨,前几天9012年Google IO正式将Kotlin从first _class提升为kotlin_first。我也是接触了一段时间的Kotlin,给我的感觉就是简约,快速。无需繁琐的findId,高阶函数的应用,再加上Kotlin的null 安全,更是将代码的崩溃率降到更低。今天我们就来介绍一下今天的主角—Anko1.AnkoAnko是JetBrai...
2019-05-14 14:42:13
2308
转载 CPU核心数目 与 多线程
一直以来有这样的疑惑,在现如今多核多线程的电脑处理器之下,一个进程中的几个线程是 怎么运行的呢?(是经系统和JVM分配少量的资源 最后轮流切换 时间调度?还是这几个线程分配到不同的核上同时运行?)今天就这一问题查了一些资料,现整理如下:单个CPU一个时刻只能运行一个线程?单核CPU电脑同一时间内只能执行一个线程,首先了解一下,CPU执行的过程 ,它是把时间分成若干个小时间段,这些时间段很小的...
2019-05-13 11:35:09
2116
转载 Android 性能优化--内存优化之Bitmap优化
Android开发中,Bitmap是经常会遇到的对象,特别是在列表图片展示、大图显示等界面。而Bitmap实实在在是内存使用的“大客户”。如何更好的使用Bitmap,减少其对App内存的使用,是Android优化方面不可回避的问题。因此,本文从常规的Bitmap使用,到Bitmap内存计算进行了介绍,最后分析了Bitmap的源码和其内存模型在不同版本上的变化。Bitmap的使用一般来说,一个对...
2019-04-25 18:01:49
687
转载 Android性能优化 View--布局优化
目录1.影响的性能布局性能的好坏 主要影响 :Android应用中的页面显示速度2.如何影响性能布局影响Android性能的实质:页面的测量 & 绘制时间1个页面通过递归 完成测量 & 绘制过程 = measure、layout 过程3.优化思路优化方向:布局性能、布局层级、布局复用性 和 测量 & 绘制时间具体如下针对 页面布局的性能、层级、...
2019-04-24 18:10:40
224
转载 Android性能优化 View--绘制优化
目录1.影响的性能绘制性能的好坏 主要影响 :Android应用中的页面显示速度2.如何影响性能绘制影响Android性能的实质:页面的绘制时间1个页面通过递归 完成测量 & 绘制过程3.优化思路主要优化方向是:降低View.onDraw()的复杂度避免过度绘制(Overdraw)3.具体优化方案下面,我将详细分析每种优化方案4.1. 降低View.on...
2019-04-24 17:50:56
1260
原创 磁盘I/O的三种方式对比:标准I/O、直接 I/O、mmap
文章目录@[TOC]1.引入1.1 标准I/O1.2直接I/O1.3 mmap1.引入让我们先看一下Linux系统下IO结构模型从图中可以看到标准 I/O、mmap、直接 I/O 这三种 I/O 方式在流程上的差异1.1 标准I/O大多数文件系统的默认I/O操作都是标准I/O。在Linux的缓存I/O机制中,数据先从磁盘复制到内核空间的缓冲区,然后从内核空间缓冲区复制到应用程序的地...
2019-04-17 16:55:06
1597
原创 深入分析 Java I/O 的工作机制
Java 的 I/O 类库的基本架构I/O 问题是任何编程语言都无法回避的问题,可以说 I/O 问题是整个人机交互的核心问题,因为 I/O 是机器获取和交换信息的主要渠道。在当今这个数据大爆炸时代,I/O 问题尤其突出,很容易成为一个性能瓶颈。正因如此,所以 Java 在 I/O 上也一直在做持续的优化,如从 1.4 开始引入了 NIO,提升了 I/O 的性能。关于 NIO 我们将在后面详细介绍...
2019-04-17 11:56:58
171
转载 磁盘I/O那些事
概述计算机硬件性能在过去十年间的发展普遍遵循摩尔定律,通用计算机的CPU主频早已超过3GHz,内存也进入了普及DDR4的时代。然而传统硬盘虽然在存储容量上增长迅速,但是在读写性能上并无明显提升,同时SSD硬盘价格高昂,不能在短时间内完全替代传统硬盘。传统磁盘的I/O读写速度成为了计算机系统性能提高的瓶颈,制约了计算机整体性能的发展。硬盘性能的制约因素是什么?如何根据磁盘I/O特性来进行系统设计...
2019-04-16 15:40:32
397
原创 Android Retrofit统一处理 token失效跳转到登录页面
文章目录1.问题引入2.解决方案1.问题引入在客户端开发中,我们可能会遇到token失效问题,这个时候我们可以刷新token或者跳转到登录页面,这里我们就给出如何统一处理token失效问题,基于Retrofit。2.解决方案在BaseFilterObserver(implements Observer)中重写onNext方法 public void onNext(@NonNull Res...
2019-04-16 11:56:19
6560
1
原创 Android P(9.0) http网络请求的问题(Cleartext HTTP traffic to **** not permitted)
1.前言Google表示,为保证用户数据和设备的安全,针对下一代 Android 系统(Android P)的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P系统的安卓设备无论是接收或者发送流量,未来都不能明码传输,需要使用下一代(Transport LayerSecurity)传输层安全协议,而 Andr...
2019-03-15 14:45:15
1262
转载 Cookie、Session、Token那点事儿
1.什么是Cookie?2.Session :3.Token :4.Cookie和Session的区别:6.Token 和 Session 的区别:1.什么是Cookie?Cookie 技术产生源于 HTTP 协议在互联网上的急速发展。随着互联网时代的策马奔腾,带宽等限制不存在了,人们需要更复杂的互联网交互活动,就必须同服务器保持活动状态(简称:保活)。于是,在浏览...
2018-09-06 10:47:22
291
原创 Android WebView开发(三)--WebViewClient 与WebChromeClient的使用
1.前言2.WebViewClient类2.1 WebViewClient作用:2.2 WebViewClient 常用方法 :2.2.1 shouldOverrideUrlLoading()方法3.WebChromeClient类3.1 WebChromeClient 作用:3.2 WebChromeClient 常用方法:1.前言前两篇我们讲解了 And...
2018-08-31 17:29:42
2474
原创 Android WebView开发(二)--WebSettings使用详解
1.前言2.WebSettings 介绍3.WebSettings方法介绍1.前言在上一篇文章我们介绍WebView的使用介绍,主要是讲解了WebView的使用基础。这一篇就是介绍WebSettings的使用详解了。 WebSettings 就是一个管理WebView 状态的类。2.WebSettings 介绍 Manages settings sta...
2018-08-31 13:57:06
3493
原创 Android WebView开发(一)--WebView的使用介绍
1.前言2. Android WebView 简介3. 简单使用3.1、添加网络权限4.WebView的状态5. 关于前进 / 后退网页6. 清除缓存数据1.前言目前很多公司的 App 就只使用一个 WebView 作为整体框架, App 中的所有内容全部使用 HTML5 进行展示,这样只需要写一次 HTML5 代码,就可以在 Android 和 iOS 平...
2018-08-29 15:48:49
1010
原创 Android PtrFrameLayout 与RecyclerView滑动冲突解决方法
1.背景2.主要代码逻辑2.1 父View代码(PtrFrameLayout)2.2 子View关键代码(RecyclerView)3.完整代码3.1 父View完整代码1.背景如果你也是用的PtrFrameLayout 下拉刷新框架和RecyclerView 出现了冲突,可以参考一下。在开发中,一个水平布局的RecyclerView出现了与PtrFr...
2018-07-05 14:40:58
1822
3
原创 Android 点击WebView图片预览图片
1. 概述2.流程分析3.代码实现3.1 添加权限:3.2 添加依赖:3.3 代码实现:1. 概述在实际开发中,我们可能会遇到用webview去展示一篇文章或者其他内容,然后我们需要点击里面的图片能够展示出来,这就是我们今天的重点–点击webview的图片进行展示。先看一个效果图。 2.流程分析1.用webview加载文章; 2.点击图片某个...
2018-07-02 14:06:19
2542
1
原创 Java在任意位置拼接字符串
[TOC] 在日常开发中我们经常会碰到对字符串的操作,今天就来总结下Java中对字符串的拼接。 拼接字符串可分为两种: 1.在字符串末尾添加字符串; 2.在字符串任意位置添加字符串; 下面我们分别来看看怎么拼接。1.在字符串末尾添加字符串我们可以用StringBuilder(效率高,线程不安全)和StringBuffer(效率低,线程安全)的append()方法。 举个例子...
2018-05-16 15:19:36
2471
转载 Android中使用Handler造成内存泄露的分析和解决
Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收。也就是说,一个对象不被任何引用所指向,则该对象会在被GC发现的时候被回收;另外,如果一组对象中只包含互相的引用,而没有来自它们外部的引用(例如有两个对象A和B互相持有引用,但没有任何外部对象持有指向A或B的引用),这仍然属于不可到达,同样会被GC回收。...
2018-03-28 11:53:26
376
原创 Android 服务之IntentService 详解
1. IntentService 概述2.IntentService如何使用3. IntentService源码解析1. IntentService 概述IntentService继承自Service,所以,我们可以用来执行后台耗时任务。那为什么又要封装一个这样的IntentService呢?下面我们来看看IntentService有什么特点。它本质是一种特殊的S...
2018-03-22 16:26:57
842
原创 Java设计模式——观察者模式
1.观察者模式概述1.1观察者模式定义1.2 观察者模式UML 类图1.3 观察者的优缺点对比1.4 观察者模式适应场景2.观察者模式实例3.Java内置观察者模式1.观察者模式概述1.1观察者模式定义观察者模式是使用频率最高的设计模式之一,它用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观...
2018-03-16 17:33:12
494
原创 Android窗口管理框架——View的绘制流程和工作原理
1.概述源码分析基于Android O 。如上图,Activity由window组成,Activity内部有个Window成员,它的实例为PhoneWindow,PhoneWindow有个DecorView(这个也是最顶层的View),这个DecorView就是存放布局文件的,里面有TitleActionBar和ContentView(这个就是我们我们setContentView的布局...
2018-03-03 16:38:28
632
原创 Android系统窗口管理框架——View的生命周期
1.View的概述 This class represents the basic building block for user interface components. A View occupies a rectangular area on the screen and is responsible for drawing and event handling...
2018-03-01 20:35:01
1005
转载 Java 线程池详解
什么是线程池 为什么要使用线程池 线程池的处理逻辑 如何使用线程池 如何合理配置线程池的大小 1.什么是线程池 线程池,顾名思义就是装线程的池子。其用途是为了帮我们重复管理线程,避免创建大量的线程增加开销,提高响应速度。2.为什么要用线程池作为一个严谨的攻城狮,不会希望别人看到我们的代码就开始吐槽,new Thread().start()会让代码看起来...
2018-02-08 16:30:41
259
转载 Linux系统编程——I/O多路复用select、poll、epoll的区别
1.概述I/O 多路复用技术是为了解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,使进程不阻塞于某个特定的 I/O 系统调用。select(),poll(),epoll()都是I/O多路复用的机制。I/O多路复用通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪,就是这个文件描述符进行读写操作之前),能够通知程序进行相应的读写操作。但select(),po
2018-02-03 10:11:56
218
原创 Android 读取文件的正确打开方式
1.Java 读取操作基本知识 图片来自: 2017java文件操作(读写操作)从上图可以开出,java的读写操作(输入输出)可以用“流”这个概念来表示,总体而言,java的读写操作又分为两种:字符流和字节流。1.1 流相关知识流是一个抽象的概念。当Java程序需要从数据源读取数据时,会开启一个到数据源的流。数据源可以是文件,内存或者网络等。同样,当程序需要输出数据到目的地时也
2018-01-31 17:33:58
2966
原创 记一次从上层到HAL层的历程
仅限个人查看CTRL+SHIFT+H通过服务接口.Stub查找 通过 _服务类.cpp类全局查找 CTRL+SHIFT+F 硬件人员维护这个值!
2018-01-11 20:34:46
493
原创 Android消息机制--Handler 深入解析(JAVA层)
1. Android 消息机制概述阅读本文之前,你需要知道以下几点:1.Handler的使用必须依赖于一个Looper对象2.线程是默认没有Looper的,但是UI线程有一个Looper对象;3.在启动APP的时候,UI线程Looper会初始化完毕,所以可以得出,UI线程可以直接使用Handler。1.1Android消息机制是什么? Android消息机制 主要指
2018-01-10 21:47:44
662
原创 Android 进阶(三)--Android事件分发机制
1.前言Android事件分发机制在Android开发者必须要了解的知识,并且是解决View的滑动冲突的基础。2.事件分发的基础要想了解事件分发的机制,我们必须要知道事件分发的基础,即,事件分发的对象和流程。2.1 事件分发的定义将点击事件(MotionEvent)向某个View进行传递并最终得到处理。2.2 事件分发的对象当用户触摸屏幕时(View或Vie...
2017-11-28 16:01:05
638
原创 Android进阶(二)--序列化Serializable和Parcelabel使用与区别
1.序列化1.1 序列化的定义 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。简单地说,“序列化”就是将运行时的对象状态转换成二进制,然后保存到流、内存或者通过网络传输给其他端。1.2 序列化的使用场景我们...
2017-11-16 16:53:10
1119
2
原创 Android开发进阶(一) Intent与IntentFilter
1.前言在Android中有四大组件,这些组件中有三个组件与Intent相关,可见Intent在Android整个生态中的地位高度。Intent是信息的载体,用它可以去请求组件做相应的操作,但是相对于这个功能,Intent本身的结构更值得我们去研究。读完本篇你将会了解:1.Intent的显示调用与隐式调用 2.隐式调用的匹配规则(重点) 3.隐式调用的使用场景 4.隐式调用的...
2017-11-14 14:53:59
1851
2
原创 简单封装弧形广告轮播图(ViewPager+贝塞尔曲线)
前言通过ViewPager和贝塞尔曲线实现了一个弧形广告轮播图。效果图实现方法想要实现这个效果,现在几行代码就可以了:Step 1. Add it in your root build.gradle at the end of repositories:allprojects { repositories { ... maven { u
2017-11-09 10:29:34
3900
原创 自定义控件 | 仿《最美有物》点赞效果
前言最近在跟着Hencode学习自定义控件,一直想着自己能够照着别人写的demo写一个好看的View,就科学上网看看了别人的一些demo,看到了一位大神写的模仿《最美有物》的点赞效果,觉得胜似喜欢,于是也跟着写了一个demo。主要是看着流程分析自己撸出来的,之前用了自己的写法,然后看到了大神demo有更好的解决方案,后面也改过来了,所以在代码实现方式都差不多。效果图动画分析1.向上拉伸是一个属性动画
2017-10-24 17:52:30
1194
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人