Android
文章平均质量分 78
主要是Android开发遇到的问题,和一些开发总结
小山研磨代码
最强的男人要有迷离的眼神
展开
-
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 · 3104 阅读 · 0 评论 -
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 · 4447 阅读 · 0 评论 -
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 · 3360 阅读 · 0 评论 -
LiveData:还没普及就让我去世?我去你的 Kotlin 协程
很尴尬,在知乎看了扔物线的视频,受益匪浅,就把内容码了出来,后经查阅发现大佬已经汇总了博客【传送门】LiveData是Android官方在2017年推出一系列架构组件中的一个,一起推出的还有Lifecycle和ViewModel等,这些组件后改称为Jetpack。LiveData成为了Jetpack的架构组件的元老级成员。为什么要走下坡路了?有人问Android官方“是要废弃LiveData吗”。从RxJava说起,LiveData面世就受到了很大关注,一个原因就是让人想到了RxJava,LiveDat转载 2021-12-14 23:24:51 · 571 阅读 · 0 评论 -
【Framework】透视Android中的Handler
准备对Framework层基于Android应用开发的内容进行学习回顾,学习一个新技术前我们一般都会灵魂三问:是什么、为什么、怎么用。源码的学习一定要亲自去看,用IDE或者Source Insight都没问题,如果看不懂就再看,多看,反复地看,相信我每看一次都有收获。尤其是Android中AMS这里,内容太多了,看资料和文档,要找到适合自己的方法论,了解总体流程,再去抠细节,一上来就看细节会淹死在代码里。AMS学习基于Handler、Binder、Activity…ActivityThread最终围绕着H.原创 2021-12-13 15:04:42 · 2673 阅读 · 2 评论 -
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 · 2247 阅读 · 0 评论 -
Jetpack——DataBinding源码解析
Jetpack——DataBinding源码解析原创 2021-11-17 10:15:18 · 407 阅读 · 0 评论 -
Jetpack——LiveData与ViewBinding
Jetpack——LiveData与ViewBinding原创 2021-11-17 10:14:00 · 1949 阅读 · 0 评论 -
Jetpack——LiveData源码解析
Jetpack——LiveData源码解析原创 2021-11-17 10:12:15 · 1682 阅读 · 0 评论 -
Jetpack——Lifecycle源码解析
一、Lifecycle是什么?传送门:Lifecycle 官网文档是学习最好的资料Lifecycle 是构建生命周期感知型组件,这些组件可以根据 Activity 或 Fragment 的当前生命周期状态调整行为。生命周期感知型组件可执行操作来响应另一个组件的生命周期状态的变化。这些组件有助于您写出更有条理且往往更精简的代码,这样的代码更易于维护。可以有效避免内存泄漏,解决Android生命周期常见难题。Lifecycle框架使用观察者模式监听被观察者的生命周期的变化。Lifecycle 框架涉及原创 2021-11-10 22:35:11 · 3011 阅读 · 0 评论 -
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 · 1358 阅读 · 0 评论 -
ViewPager源码学习
ViewPager最佳实践:Banner实现预加载界面还未显示时后台进行加载操作,节约显示时间提升体验,导致内存、流量消耗懒加载用的时候再加载,优化预加载的问题,大厂都会用setOffscreenPageLimit(0)无效,默认预加载导致// 预加载n页,默认为1,至少为1才有效// View中onMeasure()先测量子布局,ViewPager先测量自己不会按照子布局参数设置xml设置布局宽高大小尺寸,onMeasuredDimension()// 第1期/公开课,自定义重写onMea原创 2021-11-05 21:24:17 · 185 阅读 · 0 评论 -
高可用、高可扩展的原生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 · 2013 阅读 · 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 · 2199 阅读 · 0 评论 -
自定义控件精进
#1024程序员节#又是一年,列个提纲,回头补全。绘制原理。事件处理。高级系统UI拆解,源码解析。自定义控件实现。原创 2021-10-24 12:53:18 · 101 阅读 · 0 评论 -
Android中的RxJava
最近准备梳理一下Kotlin,先复习一遍RxJava思想,做个学习笔记+伪代码,整个脉络分为三个部分。(一)使用场景RxJava是重量级、最复杂的框架(没有之一),JakeWharton 的巅峰之作,操作符非常丰富、特别庞大,学关键的内容,学思维方式,看PPT资料,学两遍。为什么要学习RxJava?改变思维(Rx思维)来提升效率,响应式编程/异步事件流编程Rx思维:起点(分发事件)—>…—>终点(消费事件),中间不会断掉且可以做拦截,链条式思维学习资料源码:JakeWhar.原创 2021-10-03 18:13:28 · 765 阅读 · 0 评论 -
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 · 294 阅读 · 0 评论 -
开启 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 · 710 阅读 · 0 评论 -
Android序列化(1)Serializable
概念说到Java,万物皆对象。对象,是一个比较抽象的概念,他就是类存活在内存中的一个实例,有状态和行为,一旦JVM停止运行,对象的状态也会随之丢失。那么如何将这个对象当前状态进行一个记录,使其可以进行存储和传输呢?这就要用到序列化了。序列化(Serialization)把对象转换为字节序列的过程称为对象的序列化,把对象的状态保持下来,写入到磁盘或者其他介质中。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列原创 2021-04-23 18:15:32 · 342 阅读 · 0 评论 -
Android页面跳转使用Intent 能传递数据大小的问题
抛出问题日常开发中我们经常用到的页面跳转传值,而在 Activity 间传递数据,就需要借助 Intent,可以传递基础类型数据或者可序列化的对象数据。平时传递少量数据的时候是没问题的,但是,当传递数据较大的时候会崩溃,就会触发 TransactionTooLargeException 异常。我们在这里先创建一个困难:Intent intent = new Intent(context, TestActivity.class);byte[] data = new byte[1024 * 1024];原创 2021-04-23 11:23:53 · 834 阅读 · 0 评论 -
约束布局ConstraintLayout
国际惯例,官网参考文档是最好的学习资料:使用 ConstraintLayout 构建自适应界面1,背景约束布局 ConstraintLayout 是最受欢迎的 Jetpack 库之一,其实是Android Studio 2.2中主要的新增功能之一,也是 Google 在2016年的 I/O 大会上重点宣传的一个功能。AS 已经将它作为新建页面默认布局了。经历这几年的迭代,功能已经非常的成熟,现在 2.0 正式版本也发布了,也许你已熟悉了旧版本中的功能,并开始用它来快速构建复杂的页面布局,而新版本除了包原创 2021-04-21 19:01:37 · 2701 阅读 · 0 评论 -
AMS源码分析
转载来源:AMS源码分析(一)Activity生命周期管理AMS源码分析(二)onActivityResult执行过程AMS源码分析(三)AMS中Activity栈管理详解(一)Activity生命周期管理1. 前言AMS(ActivityManagerService)是Activity管理的核心组件,提供了Activity的启动、生命周期管理、栈管理等功能,熟悉AMS会对我们认识Activity的工作原理有很大的帮助。当前比较成熟的插件化技术,也是通过对Activity启动流程中的重要组件转载 2021-04-19 17:49:43 · 1270 阅读 · 0 评论 -
MVP 模式简单易懂的介绍方式
Android MVP 模式 1 也不是什么新鲜的东西了,我在自己的项目里也普遍地使用了这个设计模式。当项目越来越庞大、复杂,参与的研发人员越来越多的时候,MVP 模式 的优势就充分显示出来了。MVP 模式是 MVC 模式在 Android 上的一种变体,要介绍 MVP 就得先介绍 MVC。在 MVC 模式中,Activity 应该是属于 View 这一层。而实质上,它既承担了 View,同时也包含一些 Controller 的东西在里面。这对于开发与维护来说不太友好,耦合度大高了。把 Activity转载 2021-04-13 16:39:33 · 2928 阅读 · 0 评论 -
Java语言高级特性(1)——泛型
你没看错,这个题目是2021年写下的。Android现在主推Kotlin,还有flutter的Dart语言,还有必要深扣“过气的”Java吗?当然还是要学的,今天第一篇先总结泛型相关的知识点,后期会做一个系列出来:SDK还是改成Java,Kotlin也需要编译成为Java运行;目前大量的第三方库和继承与接手公司既有代码都是Java所写的;Java语言应用不仅仅在Android,在后台开发中也是一个最流行的语言;大公司面试都要求我们有扎实的Java语言基础。所以,请大家不要轻视提高自己Java.原创 2021-04-04 18:09:24 · 262 阅读 · 0 评论 -
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 · 1059 阅读 · 0 评论 -
关于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 · 653 阅读 · 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 · 6938 阅读 · 3 评论 -
Android定时任务
1. TimerTimer 是 JDK 自带的定时任务执行类,可以直接使用 Timer 来实现定时任务。这种实现方式比较简单,可以指定首次执行的延迟时间、首次执行的具体日期时间,以及执行频率,能满足日常需要。Timer 是线程安全的,因为背后是单线程在执行所有任务。Timer 是基于绝对时间调度的,而不是基于相对时间,所以它对系统时间的改变非常敏感。1.1 它的使用代码如下:import java.util.Date;import java.util.Timer;import java.util.原创 2021-03-17 11:34:28 · 829 阅读 · 0 评论 -
Java/Android中ScheduledExecutorService定时器任务
ScheduledExecutorService是专门用来执行定时任务的一个线程池,使用如下:import java.util.Random;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;/** * 测试定时任务 */public class Test { public s原创 2021-03-17 10:30:39 · 907 阅读 · 1 评论 -
腾讯股票接口API(3)——根据股票代码获取分时数据
前几天调用了一些腾讯股票的其他接口,很稳,免费而且不限制次数,需要的话大家可以参考:腾讯股票接口API(1)——根据股票代码获取详情腾讯股票接口API(2)——根据股票代码获取K线数据一、获取分时数据有点坑,找了好久么有满足美股的参数。一般沪深和港股请求如下:// 请求茅台数据为例https://web.ifzq.gtimg.cn/appstock/app/minute/query?code=sh600519获取数据为:{"code":0,"msg":"","data":{"sh600原创 2021-03-13 16:53:02 · 25718 阅读 · 14 评论 -
腾讯股票接口API(1)——根据股票代码获取详情
获取股票简要信息,找来找去也没有找到官方的文档,都是复制粘贴的,这里先简单记录一下。1.简要信息以贵州茅台为例:http://qt.gtimg.cn/q=s_sh600519 // sh600519是贵州茅台的股票代码,根据自己的关键字拼接URL可以直接在Android项目中请求,会得到如下一串字符串:v_s_sh600519="1~贵州茅台~600519~2075.95~42.95~2.11~38930~794942~~26078.04~GP-A";这里v_s代表简要信息,sh600519原创 2021-03-05 13:42:00 · 58029 阅读 · 16 评论 -
腾讯股票接口API(2)——根据股票代码获取K线数据
一、使用腾讯股票API,获取上证指数的日k数据:参考:腾讯股票API获取上证指数// 1. https://web.ifzq.gtimg.cn/appstock/app/fqkline/get 固定访问链接// 2. param=代码,日k,开始日期,结束日期,获取多少个交易日,前复权// 2.1 usAAPL.OQ 股票代码,这里是us是美股,AAPL是苹果,“.OQ”是美股拼接后缀,其他不需要拼接// 2.2. 500代表获取多少个交易日,500实际查出来的是501条数据,多一条//原创 2021-03-10 17:18:48 · 30611 阅读 · 3 评论 -
Android 使用原生列表对话框Dialog(单选、多选)
如果公司不是特殊要求,尽量还是使用系统原生的控件,维持一个好的生态,而不是闭着眼睛抄iOS效果。直接上代码:import android.os.Bundle;import android.view.View;import android.widget.Toast;import androidx.appcompat.app.AlertDialog;import androidx.appcompat.app.AppCompatActivity;public class DialogDemo.原创 2021-03-08 16:44:36 · 1155 阅读 · 0 评论 -
Android开发基础——Log
常规使用Android的日志工具Log(import android.util.Log;)一共为我们提供了5个方法(优先级依次升高)来供我们打印日志,当然他们有不同的重载,按需使用。Log.v()对应的级别为verbose,是Android日志级别最低的一种。用于打印开发调试中的一些详细信息,最为琐碎、意义最小的日志,包含诸如方法名,变量值之类的信息,仅在开发中使用,不可在发布产品中输出。Log.d()对应级别为debug,比verbose高一级。开发中经常选择输出此种级别的日志,用于打印一些调原创 2021-02-08 14:19:59 · 1034 阅读 · 0 评论 -
Android studio 4 找不到插件:Plugin Error: Plugin xxx is incompatible (supported only in IntelliJ IDEA).
Android studio 4 找不到插件:Plugin Error: Plugin xxx is incompatible (supported only in IntelliJ IDEA).Android studio升级到4.1之后,有一些老的插件不再支持,启动后会提示错误信息:Plugin Error: Plugin is incompatible (supported only in IntelliJ IDEA).到设置界面的已安装插件安装列表又找不到这个插件,或者在插件市场仍然能够原创 2020-11-20 09:54:51 · 6849 阅读 · 6 评论 -
No cached version of com.android.tools.build:gradle:3.6.3 available for offline mode.
打开 Android Studio 后提示gradle可以升级到3.6.3,点击更新,进度条都没动立马报错如下:No cached version of com.android.tools.build:gradle:3.6.3 available for offline mode.问题的原因是AS把联网模式给关闭了,打开这个开关一切正常,美滋滋~打开Gradle面板:view -> ...原创 2020-04-20 14:16:34 · 3299 阅读 · 4 评论 -
Realm(Java)数据库使用文档(测试与调试)
文章目录15.1 Android Studio调试15.2 NDK调试Realm(Java)数据库使用文档(目录)有关如何将Realm与JUnit 3,JUnit4,Robolectric,Mockito和PowerMock结合的信息,请参见unitTest示例。15.1 Android Studio调试使用Android Studio或IntelliJ时,需要注意一个小“陷阱”:调试器会...翻译 2020-03-29 19:08:59 · 297 阅读 · 0 评论 -
Realm(Java)数据库使用文档(第三方类库)
文章目录14.1 GSON14.2 序列化Serialization14.3 原始清单Primitive lists14.4 故障排除Troubleshooting14.5 Jackson 数据绑定14.6 Kotlin14.7 Parceler14.8 Retrofit14.9 Robolectric14.10 RxJavaRealm(Java)数据库使用文档(目录)本节介绍如何将Realm...翻译 2020-03-29 18:35:07 · 417 阅读 · 0 评论 -
Realm(Java)数据库使用文档(Threading)
文章目录13.1 线程示例13.2 跨线程使用Realm13.3 Android框架线程13.3.1 异步任务13.3.2 IntentService13.4 多进程支持13.5 冻结对象Realm(Java)数据库使用文档(目录)Realm使得在多个线程上处理数据变得毫不费力,而不必担心一致性或性能,因为 对象 objects 和 查询 queries 始终在自动更新。您可以对不同线程中的活...翻译 2020-03-29 15:31:17 · 322 阅读 · 0 评论 -
Realm(Java)数据库使用文档(加密Encryption)
Realm(Java)数据库使用文档(目录)请注意我们许可的“出口合规性”部分,因为如果您位于受到美国出口限制或禁运的国家/地区,则会对使用Realm施加限制。通过使用RealmConfiguration.Builder.encryptionKey将512位加密密钥(64字节)传递给配置,可以在磁盘上对Realm文件进行加密:byte[] key = new byte[64];new ...翻译 2020-03-29 14:39:11 · 412 阅读 · 0 评论