自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

GeofferySun的专栏

代码总结、经验积淀

  • 博客(145)
  • 资源 (7)
  • 收藏
  • 关注

翻译 Realm(Java)数据库使用文档(目录)

Realm 数据库提供了Java、Kotlin、Swift、Object-C、JavaScript、.NET平台,本系列是Java平台(7.0.0-beta)。我会尽量按照官方文档给出的顺序往下逐步翻译,有需要的小伙伴请关注。一、入门二、Realms三、Models四、使用RealmObjects五、Relationships六、Schemas七、Writes八、Queries...

2020-03-19 21:12:41 354

原创 Sunflower——Google官方的Jetpack学习项目笔记(Java版)

Google官方的Jetpack学习项目:Sunflower-github开源项目,太阳花/向日葵GardenActivity(主界面,activity_garden.xml)GardenFragment(我的花园,fragment_garden.xml)FrameLayout(使用BindingAdapter通过数据监听控制显示/隐藏)初始化bindinggardenList绑定GardenPlantingAdaptersubScribeUi数据管理GardenPlantingListViewMo

2022-06-18 16:27:55 1254 1

原创 Android知识大纲梳理

五一了,列个大纲,准备梳理一下Android相关技术的深度与广度。这个系列是个大工程,从现在开始。一、Java部分1.1 基础语法与高级特性1.2 并发编程1.3 文件操作1.4 网络编程基础1.5 动态编程(反射、类加载、动态代理)1.6 JVM二、Android基础2.1 四大组件相关2.2 View体系2.3 Jetpack三、Android进阶3.1 Framework3.2 高级UI3.3 性能调优3.4 Android中网络编程的深入理解四、Kotlin相关4

2022-05-03 18:31:29 3000

转载 自学计算机科学

自学计算机科学本文档是对 TeachYourselfCS 内容的中文翻译,原作者为 Ozan Onay 和 Myles Byrne。如需了解翻译相关信息或帮助改进翻译,请参见 本文档结尾。This document is a Chinese translation of TeachYourselfCS, which is written by Ozan Onay and Myles Byrne. For more information about this translation, please r

2022-04-10 17:00:15 424

转载 JPEG图像的解压缩操作

一、解压缩操作过程为JPEG对象分配空间并初始化指定解压缩数据源获取文件信息为解压缩设定参数,包括图像大小,颜色空间开始解压缩取出数据解压缩完毕释放资源1.1 为JPEG对象分配空间并初始化解压缩过程中使用的JPEG对象是一个jpeg_decompress_struct的结构体。同时还需要定义一个用于错误处理的结构体对象,IJG中标准的错误结构体是jpeg_error_mgr。struct jpeg_decompress_struct cinfo;struct jpeg_erro

2022-03-17 22:52:04 3703

原创 如何进行图片缓存

大厂面试问“图片如何进行缓存”的时候主要在考察什么?是否对缓存淘汰算有一定的研究;是否对常见的图片加载框架有深入研究;是否对算法效果有验证闭环的意识,对使用场景是否适合。一、题目剖析1.1 如何对图片进行缓存?缓存介质,网络/磁盘/内存缓存;缓存算法的设计分析(关键,不同的目标对象、使用场景,使用不同的算法的效果是有差别的);以熟悉的框架为例分析它的缓存机制;要有验证算法效果的(优化、量化)意识。1.2 如何评价缓存算法是否合适?获取成本很高的话缓存就很值缓存对象很.

2022-03-03 21:14:55 4772

原创 编译原理三大经典书籍

1、龙书(Dragon book)英文名:Compilers: Principles,Techniques,and Tools作者:Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman中文名:编译原理技术和工具 龙书是Alfred V.Aho等人于1986年出版的,由于出版年代较早,其中包含部分过时的技术并且没有反映一些新的编译技术。新编的《编译原理》抛弃诸如算符优先分析等过时技术,增加面向对象编译、类型检查等新技术。本书深入讨论了编译器设计的重要主题,

2022-02-23 19:09:18 2618

原创 Apk文件重签名失败:java.util.zip.ZipException

今天给一个手里的debug出来的apk文件在命令行用jks签名,常规操作:jarsigner -verbose -keystore app.jks -storepass app123 -keypass pwd123 -signedjar lovelight_signed.apk base.apk release直接报错提示:·jarsigner: 无法对 jar 进行签名: java.util.zip.ZipException: invalid entry compressed size (expe

2022-01-20 16:42:31 3244

转载 LiveData:还没普及就让我去世?我去你的 Kotlin 协程

很尴尬,在知乎看了扔物线的视频,受益匪浅,就把内容码了出来,后经查阅发现大佬已经汇总了博客【传送门】LiveData是Android官方在2017年推出一系列架构组件中的一个,一起推出的还有Lifecycle和ViewModel等,这些组件后改称为Jetpack。LiveData成为了Jetpack的架构组件的元老级成员。为什么要走下坡路了?有人问Android官方“是要废弃LiveData吗”。从RxJava说起,LiveData面世就受到了很大关注,一个原因就是让人想到了RxJava,LiveDat

2021-12-14 23:24:51 528

原创 【Framework】透视Android中的Handler

准备对Framework层基于Android应用开发的内容进行学习回顾,学习一个新技术前我们一般都会灵魂三问:是什么、为什么、怎么用。源码的学习一定要亲自去看,用IDE或者Source Insight都没问题,如果看不懂就再看,多看,反复地看,相信我每看一次都有收获。尤其是Android中AMS这里,内容太多了,看资料和文档,要找到适合自己的方法论,了解总体流程,再去抠细节,一上来就看细节会淹死在代码里。AMS学习基于Handler、Binder、Activity…ActivityThread最终围绕着H.

2021-12-13 15:04:42 2627 2

原创 Java里的final关键字

final 是 Java 中一个常见关键字,表示的意思也很简单,就是“这个东西不能变”。许多程序设计语言都有自己的办法告诉编译器某个数据是“常数”。常数主要应用于下述两个方面:(1) 编译期常数,它永远不会改变(2) 在运行期初始化的一个值,不希望它发生变化对于编译期的常数,编译器(程序)可将常数值“封装”到需要的计算过程里。也就是说,计算可在编译期间提前执行,从而节省运行时的一些开销。在 Java 中,这些形式的常数必须属于基本数据类型( Primitives),而且要用 final 关键字

2021-12-09 18:10:29 665

原创 Android中Activity获取View宽高的常用方式

Android开发中,onCreate()、onStart()、onResume()关键生命周期方法中获取某控件的宽高,然而获取的结果均为 0,Why?Because:View的measure()与Activity的生命周期没有同步执行,因此不能保证在onCreate()、onStart()、onResume()中获取控件宽/高时,这个View已经测量结束,so,如果没有测量完成,我们取得的宽高就是0。Activity中测试代码,具体看注释即可:public class MainActivity ex

2021-11-30 00:10:18 2177

原创 Jetpack——DataBinding源码解析

Jetpack——DataBinding源码解析

2021-11-17 10:15:18 378

原创 Jetpack——LiveData与ViewBinding

Jetpack——LiveData与ViewBinding

2021-11-17 10:14:00 1911

原创 Jetpack——LiveData源码解析

Jetpack——LiveData源码解析

2021-11-17 10:12:15 1646

原创 Jetpack——Lifecycle源码解析

一、Lifecycle是什么?传送门:Lifecycle 官网文档是学习最好的资料Lifecycle 是构建生命周期感知型组件,这些组件可以根据 Activity 或 Fragment 的当前生命周期状态调整行为。生命周期感知型组件可执行操作来响应另一个组件的生命周期状态的变化。这些组件有助于您写出更有条理且往往更精简的代码,这样的代码更易于维护。可以有效避免内存泄漏,解决Android生命周期常见难题。Lifecycle框架使用观察者模式监听被观察者的生命周期的变化。Lifecycle 框架涉及

2021-11-10 22:35:11 2844

原创 Android 动画的思考(View体系)

学习Android的View体系一定要了解甚至熟练运用动画,才能做出优秀的应用,这里强调是View/ViewGroup体系下的动画,因为又新出了Jetpack Compose体系的动画,后续会总结姊妹篇出来。import android.animation.Keyframe;import android.animation.ObjectAnimator;import android.animation.PropertyValuesHolder;import android.view.View;im

2021-11-09 17:59:05 1330

原创 RecyclerView源码学习

源码分析缓存复用部分以onCreateViewHolder()和onBindViewHolder()方法作为入口点、重点onTouchEvent()// 滑动事件,入口点 scrollByInternal() scrollStep() scrollHorizontallyBy()|scrollVerticallyBy()-->mLayout(GridLayoutManager extends LinearLayoutManager)-->LinearLayoutManager

2021-11-05 21:30:49 158

原创 ViewPager源码学习

ViewPager最佳实践:Banner实现预加载界面还未显示时后台进行加载操作,节约显示时间提升体验,导致内存、流量消耗懒加载用的时候再加载,优化预加载的问题,大厂都会用setOffscreenPageLimit(0)无效,默认预加载导致// 预加载n页,默认为1,至少为1才有效// View中onMeasure()先测量子布局,ViewPager先测量自己不会按照子布局参数设置xml设置布局宽高大小尺寸,onMeasuredDimension()// 第1期/公开课,自定义重写onMea

2021-11-05 21:24:17 156

原创 高可用、高可扩展的原生WebView通信架构的实践

通过上一篇文章的思路梳理,具体编码实现分为三个步骤:Part1 从0开始手把手实战Android Webview独立进程通信架构(上)1、H5会替代Native么?2、H5和Native的使用场景;3、Webview和App其他组件的关系和通信;4、WebView模块搭建;5、WebView模块组件化;6、WebView通信接口定义和实现;Part2 从0开始手把手实战Android Webview独立进程通信架构(中)1、WebView通信接口定义和实现;2、Fragment接口实现;

2021-11-05 21:06:55 1967 2

原创 高可用、高可扩展的原生WebView通信架构的思考

一、为什么学WebView?为什么学习Webview,主要是指WebView的应用场景,当前大环境里应用越来越广泛,主要有两方面的制约因素:硬件,手机的性能,CPU 2.8GHz,内存RAM 12G,处理速度越来越快;网络,应用的内容实时从服务器拉取,网络带宽高/延时低,5G,体验提高。二、是否会替代原生开发?不会。早在2012年就开始鼓吹html一统天下…操作系统的原因,Android和iOS风格不同,如果实现原生效果,需要大量if-else;很难做到html要和PC兼容(三端统一),

2021-11-05 20:58:01 2164

原创 自定义控件精进

#1024程序员节#又是一年,列个提纲,回头补全。绘制原理。事件处理。高级系统UI拆解,源码解析。自定义控件实现。

2021-10-24 12:53:18 76

原创 Android中的RxJava

最近准备梳理一下Kotlin,先复习一遍RxJava思想,做个学习笔记+伪代码,整个脉络分为三个部分。(一)使用场景RxJava是重量级、最复杂的框架(没有之一),JakeWharton 的巅峰之作,操作符非常丰富、特别庞大,学关键的内容,学思维方式,看PPT资料,学两遍。为什么要学习RxJava?改变思维(Rx思维)来提升效率,响应式编程/异步事件流编程Rx思维:起点(分发事件)—>…—>终点(消费事件),中间不会断掉且可以做拦截,链条式思维学习资料源码:JakeWhar.

2021-10-03 18:13:28 703

转载 Handler的初级、中级、高级问法,你都掌握了吗?

文章转载自作者:小小小小怪兽_666Handler是Android中的消息处理机制,是一种线程间通信的解决方案,同时你也可以理解为它天然的为我们在主线程创建一个队列,队列中的消息顺序就是我们设置的延迟的时间,如果你想在Android中实现一个队列的功能,不妨第一时间考虑一下它。本文分为三部分:Handler的源码和常见问题的解答一个线程中最多有多少个Handler,Looper,MessageQueue?Looper死循环为什么不会导致应用卡死,会耗费大量资源吗?子线程的如何更新UI,比如D

2021-09-01 10:03:35 149

翻译 Groory语言关于省略的知识点

【原文:Style guide】目录,内容很多需要一点点消化1. 没有分号2. 返回关键字可选3. Def 和 type(定义和类型)4. 默认公开5. 省略括号6. Classes as first-class citizens(作为一等公民的阶级??)7. Getters 和 Setters 方法8. 使用命名参数和默认构造函数初始化 bean9. 使用 with() 和 tap() 对同一个 bean 进行重复操作10. Equals 和 ==11. GStrings (interpolation,

2021-06-15 12:42:10 242

原创 waiting for target devices to come online

手残,Android studio 自带的模拟器拖拽了两张图片后,长按电源点击了重启模拟器后,黑屏了,重启也不能正常使用,AS状态栏只显示一句话:wait for all target devices to come online。查了下问题,很多人建议:Wipe Data,这样做就相当于新建一个模拟器了,之前的数据都没了。尝试了另一个选项:Cold Boot Now,恢复正常,并且之前的数据和测试Demo都在。步骤关掉模拟器;打开 Tools → AVD Manager;点击出问题的模拟器

2021-04-29 17:57:15 419

原创 Vim打不开文件:Another program may be editing the same file./An edit session for this file crashed.

Linux Vim 打开一个脚本文件“f03.sh”,直接报错:vim f03.sh遇到英文错误不要怕,先看一下报错的内容。Another program may be editing the same file.An edit session for this file crashed.E325: ATTENTIONFound a swap file by the name ".f03.sh.swp" owned by: geofferysun dated: W

2021-04-28 16:25:15 1629

原创 开启 Linux 版的 Window 子系统(WSL)

最近在学习 Android 的 NDK 和 JNI,音视频和图像处理等内容后期编译 C 库要用到 Linux 环境了,最近做个记录,点点滴滴。1. 如何拥有Linux环境?(1)Windows 环境电脑配置高、内存大的最好是安装虚拟机,能最接近真实环境;开启 Linux 版的 Window 子系统(WSL,Windows Subsystem for Linux) 【推荐】;与在虚拟机下使用 Linux 相比,WSL 占用资源更少,更加流畅WSL 可以对 Windows 文件系统下的文件直.

2021-04-27 11:40:25 626

原创 Android序列化(1)Serializable

概念说到Java,万物皆对象。对象,是一个比较抽象的概念,他就是类存活在内存中的一个实例,有状态和行为,一旦JVM停止运行,对象的状态也会随之丢失。那么如何将这个对象当前状态进行一个记录,使其可以进行存储和传输呢?这就要用到序列化了。序列化(Serialization)把对象转换为字节序列的过程称为对象的序列化,把对象的状态保持下来,写入到磁盘或者其他介质中。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列

2021-04-23 18:15:32 296

原创 Android页面跳转使用Intent 能传递数据大小的问题

抛出问题日常开发中我们经常用到的页面跳转传值,而在 Activity 间传递数据,就需要借助 Intent,可以传递基础类型数据或者可序列化的对象数据。平时传递少量数据的时候是没问题的,但是,当传递数据较大的时候会崩溃,就会触发 TransactionTooLargeException 异常。我们在这里先创建一个困难:Intent intent = new Intent(context, TestActivity.class);byte[] data = new byte[1024 * 1024];

2021-04-23 11:23:53 730

原创 约束布局ConstraintLayout

国际惯例,官网参考文档是最好的学习资料:使用 ConstraintLayout 构建自适应界面1,背景约束布局 ConstraintLayout 是最受欢迎的 Jetpack 库之一,其实是Android Studio 2.2中主要的新增功能之一,也是 Google 在2016年的 I/O 大会上重点宣传的一个功能。AS 已经将它作为新建页面默认布局了。经历这几年的迭代,功能已经非常的成熟,现在 2.0 正式版本也发布了,也许你已熟悉了旧版本中的功能,并开始用它来快速构建复杂的页面布局,而新版本除了包

2021-04-21 19:01:37 2612

转载 AMS源码分析

转载来源:AMS源码分析(一)Activity生命周期管理AMS源码分析(二)onActivityResult执行过程AMS源码分析(三)AMS中Activity栈管理详解(一)Activity生命周期管理1. 前言AMS(ActivityManagerService)是Activity管理的核心组件,提供了Activity的启动、生命周期管理、栈管理等功能,熟悉AMS会对我们认识Activity的工作原理有很大的帮助。当前比较成熟的插件化技术,也是通过对Activity启动流程中的重要组件

2021-04-19 17:49:43 1145

原创 Java多态与泛型 ,动态绑定,静态绑定

(一)多态1.概念简单理解就是,一个对象可以表现出多种状态。可以看做是对抽象对象的逆过程,具体化抽象对象的行为。而它是如何实现这种表现出多种状态功能的呢。从Java语法上来讲有如下两种方式:1.1 使用继承:将父对象(更抽象的对象/或者说基类)设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。class Aninal{ void sound(发出声音);}//sound是动物的一个叫声方法class cat extend Anima

2021-04-19 11:49:26 560

转载 Java源码分析之HashMap

本文基于Java 8HashMap使我们在开发过程中经常用到的数据结构,在面试过程中也会经常问到,本篇博文就基于JDK1.8具体分析一下HashMap的实现。首先看一下HashMap中的静态变量和一些类变量:// 默认最大容量static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16// HashMap的最大容量static final int MAXIMUM_CAPACITY = 1 << 30;// 默

2021-04-16 19:03:57 126 2

转载 MVP 模式简单易懂的介绍方式

Android MVP 模式 1 也不是什么新鲜的东西了,我在自己的项目里也普遍地使用了这个设计模式。当项目越来越庞大、复杂,参与的研发人员越来越多的时候,MVP 模式 的优势就充分显示出来了。MVP 模式是 MVC 模式在 Android 上的一种变体,要介绍 MVP 就得先介绍 MVC。在 MVC 模式中,Activity 应该是属于 View 这一层。而实质上,它既承担了 View,同时也包含一些 Controller 的东西在里面。这对于开发与维护来说不太友好,耦合度大高了。把 Activity

2021-04-13 16:39:33 2757

原创 根据股票代码特征分类

在根据股票代码获取详情一文中,查询股票简要信息的时候,为了用户不输入前缀,需要自己拼接,逻辑如下:A股-上证 6位纯数字,以600、601、603、605、900开头,查询股票详情时候拼接前缀“sh”沪市A股 沪市A股的代码是以600、601或603打头沪市B股 沪市B股的代码是以900打头A股-深证 6位纯数字,以000、002、003、200、300开头,查询股票详情时候拼接前缀“sz”深市A股 深市A股的代码是以000打头中小板 中小板的代码是002打头深圳B股 深圳B股的代码

2021-04-08 15:38:28 3854 1

原创 Java语言高级特性(1)——泛型

你没看错,这个题目是2021年写下的。Android现在主推Kotlin,还有flutter的Dart语言,还有必要深扣“过气的”Java吗?当然还是要学的,今天第一篇先总结泛型相关的知识点,后期会做一个系列出来:SDK还是改成Java,Kotlin也需要编译成为Java运行;目前大量的第三方库和继承与接手公司既有代码都是Java所写的;Java语言应用不仅仅在Android,在后台开发中也是一个最流行的语言;大公司面试都要求我们有扎实的Java语言基础。所以,请大家不要轻视提高自己Java.

2021-04-04 18:09:24 234

原创 Android TextView Java代码加粗

在Android中TextView加粗一般放在Xml文件中设置,简单<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textStyle="bold" />有时候会根据逻辑判断,需要在Java代码中做动态处理:/** * 给文本控件加粗 * * @param textView 控件 * @param isBold 是否加粗

2021-03-26 14:48:01 1006

转载 关于Java的多继承

文章目录一、为什么Java不支持多重继承?1.1 Java不支持多重继承1.2 为什么Java不支持多重继承?1.2.1 简单1.2.2 很少使用二、如何给女朋友解释为什么Java不支持多继承?2.1 继承2.2 多继承2.3 Java不支持多继承2.4 Java 8支持多继承三、实现多重继承3.1 接口3.2 内部类四、知乎帖子最近在学习NDK和JNI相关,讲到了C++多继承问题,想的Java是不支持多继承的,就顺带看看这些资料,做个记录。做股票软件,画K线图的时候看源码,又发现了他们定义的接口e

2021-03-20 12:41:24 579 1

原创 腾讯股票接口API(4)——计算分时线平均值

以茅台为例,通过上一篇《腾讯股票接口API(3)——根据股票代码获取分时数据》中获取到了股票的分时数据:{"code":0,"msg":"","data":{"sh600519":{"data":{"data":["0930 2000.00 925","0931 1981.01 1321","0932 1984.88 1754","0933 1980.03 2033","0934 1988.98 2243","0935 1979.03 2694","0936 1981.01 3102","0937 198

2021-03-17 17:58:11 6452 3

Java版本的Sunflower官方学习项目

Google官方只给出了Kotlin版本的SunFlower项目,这里我将其改造成Java语言,供大家参考学习,多交流。

2022-06-18

Android 的WebView长按保存图片

根据业务需要,WebView上经常会用到长按保存图片的功能,现在做一个Demo,希望能够帮到有用的童鞋。简述请看博文:http://blog.csdn.net/geofferysun/article/details/53900625

2016-12-28

Android 头像替换,解决华为手机取不到图片

只用涉及到用户模块的App基本上就会用到头像替换的功能,类似的代码也是信手沾来,百度、GitHub以及各大论坛好博客一大把,随便粘过来就可以用了。但是。。。有坑。在华为荣耀手机上踩坑了,网上看了下问的人不少,没人回答。觉得很有必要写下来,希望能够帮到更多的朋友。 http://blog.csdn.net/geofferysun/article/details/53432945

2016-12-02

Android图片上传(头像裁切+原图原样)

Android图片上传(头像裁切+原图原样) http://blog.csdn.net/geofferysun/article/details/42835669

2015-01-18

ActivityGroup|顶部底部均有Tab标签之二

ActivityGroup|顶部底部均有Tab标签之二 http://blog.csdn.net/geofferysun/article/details/41852605

2014-12-10

Android 顶部底部均有Tab标签

Android 顶部底部均有Tab标签 http://blog.csdn.net/geofferysun/article/details/41826451

2014-12-09

ExtJS 学习的几个小例子

ExtJS 学习的几个小例子,只要测试了本地数据(JSON)的读取

2013-02-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除