自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一个有梦想的码农的博客

就算每一步很小,只要不停下脚步,总有一天会到达理想的那一边

  • 博客(38)
  • 资源 (1)
  • 收藏
  • 关注

原创 从源码认识协程

通过源码了解协程的实现原理

2023-02-13 01:02:20 514

原创 Aspectj基础原理解析

AspectJ的原理解析

2022-06-26 17:43:00 2083

原创 第三方依赖库中kotlin代码提示/*compiled code*/

在AS某些版本中,例如Android Studio Arctic Fox | 2020.3.1(新版狐狸那个版本),在看第三方依赖库代码时,出现了这种问题,java部分的代码可以看到完整的方法实现,而kotlin部分的代码在方法实现中提示/*compiled code*/点Download Sources后,依赖无法看到方法的具体实现,经过摸索后,发现原来是编译器的问题,依赖库在打包时,可以选择生成两种jar包,一种是带完整代码和注释的,命名为xxx-source.jar;一种是仅仅带编译后.cl.

2021-10-26 01:22:16 4437 2

原创 记 · 从零到Jitpack发布,搭建一个MVVM基础框架第三方依赖库

一、搭建MVVM基础框架ViewModel+Databinding+Repository(使用flow返回),主要通过这三大部分搭建最最最基础的MVVM模式。MVVM基础是通过MVP框架演化而来的,如下图

2021-08-13 17:05:04 389

原创 安卓中的Gradle、task任务和自定义插件库

1、androidStudio中build.gradle的结构和作用目录结构:root |--build.gradle (1) |-- app |-- build.gradle (2) |-- module |-- build.gradle (3) |-- settings.gradle (4)(1)根目录下的build.gradle这个文件主要负责整个项目的插件管理,和设置每个子模块的通用配置bui...

2021-05-13 18:47:23 600 3

原创 安卓opengl相关例子代码合集

代码库地址:https://github.com/cy-cyx/OpenGlDome项目中现有的功能模块说明1、fbo文件下使用帧缓冲区,使用一个纹理作为帧缓冲的颜色缓冲区注意:安卓的纹理的原点是在左上角,fbo的纹理的原点是在左下角2、blend文件下混合模式的使用3、light文件下冯氏光照模型分为 环境光 反射光 镜面高光4、mvp文件下视角-模式矩阵5、texture文件下纹理贴图要注意纹理单元和纹理的概念,纹理默认绑定纹理单元06、shadow文件阴影贴图两步渲

2021-03-09 17:11:24 354

原创 ActivityManagerService之onStop()的调用流程,及为何会最迟会延迟10秒执行?

这篇文章通过追踪AMS源码(api28),走一遍执行onStop()的流程,先来一张流程图:从源码开始追踪(省略无关的代码):

2021-02-19 16:26:11 1177

原创 ActivityManagerService之startActivity · 一 相关类的基本介绍

1、ActivityThread和ApplicationThread(内部类)、H(内部类)ActivityThread管理主线程中的执行申请流程,安排和执行activity,作为活动进行广播和其他操作经理要求ApplicationThread是ActivityThread,主要用于和AMS的跨进程通信。可以这样大致理解,通过调用ActivityManager.getService()的方法,我们可以向AMS申请开始一个新的Activity,AMS通过我们传过ApplicationThread.a.

2021-01-21 02:08:23 281

原创 ActivityManagerService之startActivity · 二

这篇文章通过追踪AMS源码(api28),走一遍调用startActivity的代码执行流程,先来一张流程图:从源码开始追踪(省略无关的代码):1.Activity#startActivity2.Activity#startActivityForResultpublic void startActivityForResult(@RequiresPermission Intent intent, int requestCode, @Nullable Bundle

2021-01-21 02:08:02 944 4

原创 记使用腾讯TIM开发聊天通讯遇到的问题及解决方案

目录一、V1和V2在ITIMMessage上接口不同,V1支持多个Elem,V2不支持,对应的解决方案,使用java反射二、向Message塞入多个Elem时,语音Elem顺序会发生变化三、IM在app存活时,切出去修改权限后,返回app,出现找不到Native方法问题四、IM的IMMessage时间戳的单位是秒而不是毫秒,这个就有点奇怪了,需要手动处理一下五、IM的提供消息列表,头像更新不及时一、V1和V2在ITIMMessage上接口不同,V1支持多个Elem,V2不支持,对应的

2020-07-04 23:38:46 2339

原创 略解:AOP 切面编程 —— 动态代理

一、首先要讲动态代理,先要从代理模式讲起// 定义公共接口public interface IShop { public void buy();}public class MyBuy implements IShop { @Override public void buy() { System.out.print("真正的买东西"); ...

2020-05-05 14:41:32 286

原创 EventBus 3.0 略解

记录的EventBus架构中用到的技巧大体的架构——事件总线和观察者模式,BusEvent中所有事件发放和订阅都是在一个单例中去实现的,最基础的代码结构如下,EventBus在这个基础上去优化的public class EventCenter { private static EventCenter instance; private static final Obje...

2020-04-19 01:21:34 187

原创 使用PhishTank api检测钓鱼网站,提示You must supply a URL to use this function

解决方法:http://checkurl.phishtank.com/checkurl/ 将http换成https即可,就这样简单,就这样坑PhishTank官方文档地址https://www.phishtank.com/index.php简单介绍一下PhishTank,PhishTank是一个检测钓鱼网站的免费api,它运作方式就是,收集世界各地的人提交可疑的钓鱼网站,形成一个钓...

2020-04-01 02:05:46 2321 3

原创 java.lang.ClassCastException: android.os.BinderProxy cannot be cast to ......

这个错误出现在bindService后,从回调获得对应服务的Ibinder对象,然后强转成我们自己实现的Binder对象时,出现的类型错误。而且这个错误出现的前提是,我是在一个新的进程启动一个Service <service android:name=".Service1" android:process=".text"/><!--如果不配置默认在主...

2020-01-20 01:22:37 7065

原创 安卓app接入推送的较优解决方案(包括厂商通道、集成推送的使用分析)

推送功能,是每一个app都会开发的功能,它可以很大程度的提高app的使用率和用户的保活率。但是问题来了,由于现在安卓系统越来越成熟,对某些权限的限制越来越大,而且各大厂商的定制系统对后台app监控做得也越来越好,如果自己实现一条后台线程来和后台服务器保持长连接,基本前台app退出不到几分钟就被杀死了,所以我选择通过接入第三方的推送SDK来实现推送功能的实现。 在给公司产品接入推送时...

2019-12-19 17:13:15 10230 7

原创 faceBook、mopub、谷歌的广告创收文档收集

faceBook 文档链接mopub 文档链接谷歌 文档链接注意:1、测试谷歌效果,在文档提供广告id中以供测试(以上三款广告创收,后台统计广告点击数据是通过广告id收集,故接入无需像国内第三方sdk接入一样需要认包名、key之类的东西)2、faceBook在后台申请广告,要慎重!!!极容易被封号,如果不想你号没了,慎重慎重!!3、后台注册账号需要营业执照,个人玩家在...

2019-11-28 12:03:04 640

原创 Android Studio报错:Only fullscreen opaque activities can request orientation保留Activity透明背景的解决方式

        最近,在公司负责了app与社交模块的对接工作,用一个透明背景的Activity作为中间跳转Activity。在接完所有接口后,突然一个bug出现,说点击icon跳转蹦了!蹦了!附带一张日志       我试了一下,一脸懵逼,问他们怎么玩出来这个bug,拿了他们手机,确实必现这个bug,试了好几台手机,发现8.0以上的测试机有些必现这个bug。       从日志中,字面...

2018-10-09 23:57:15 2574 2

原创 笔记:Google Play应用内购买结算(In-app Billing)的接入

Google Play应用内购买结算(In-app Billing)最近公司有需求在Google渠道上加入Google支付 ,所以照着Google官方文档,写了一个Dome,同时也写这篇博客记录一下希望可以帮到有需要的人。官方开发文档链接:https://developer.android.com/google/play/billing/api (需要自备梯子)注意:In-app Bi...

2018-08-03 00:48:43 15364 3

原创 大致总结一下 安卓各大版本的差异(安卓4以上版本)

每次去面试,面试官或多或少都会问到这问题,所以,我百度一番,大致总结一下我找到的结果。在安卓4以前的版本不作为讨论对象,在安卓4之前的版本,谷歌一度想闭源安卓,可惜失败了,而且安卓那时的开放性不高,可设计性也不高。而且手机普及性不高,流量少,市场趋势还没有趋向移动端发展。一、安卓4.X1、引入“Holo”界面,在设计追求简约上面充满了浓浓的工程师风格,慢慢脱离苹果风格,而且在往后版本中...

2018-03-12 19:14:40 22185 1

原创 详解:C语言中的指针和p, p+1, *(p+1), *P+1, p[0], &p[0] 的含义

解析:C语言中的指针和p, p+1, *(p+1), *P+1, p[0], &p[0] 每一种表达式的含义 一、先解决一个问题:什么是指针指针就是存放地址的变量。很好,百度上就是这个答案(哈哈,感觉这句话很废话)。指针是一个大小固定为4个byte的变量,不管是什么类型的指针大小都是固定的,因为存放是一个地址信息。void main() { int a = 1; cha

2018-02-04 01:03:29 69762 20

原创 ThreadLocal的源码解析

涉及到类:Thread、ThreadLocal、ThreadLocalMap(ThreadLocal的内部类)含义:这些变量与普通变量不同,每个访问一个线程(通过其get或set方法)的线程都有其自己的,独立初始化的变量副本。 ThreadLocal实例通常是希望将状态与线程关联的类中的私有静态字段(例如,用户ID或交易ID)例子:private static class Threa...

2020-02-16 22:42:33 141

原创 设计模式——STATE(状态模式)

这是属于设计模式中的对象行为模式之一在TCPConnection中维护着一个TCPState,在不同状态下,维护着一个不同的TCPState,例如:stablished状态下,维护着对应TCPstablished,实现该状态下对应的Open(),Close(),Acknowledge()。如果切换状态,其实就是切换TCPState对象,这样对应的Open(),Close(),Acknowl...

2020-02-08 02:03:58 202

原创 android的JNI开发、C调用java的函数方法、AllocObject和NewObject的区别、使用javap获得方法签名

目录以下总结了Android开发中C语言调用java方法的几种情况:1、非静态native方法调用所在对象中的方法2、C语言调用java有基础类型返回值的情况3、C语言调用java有类对象返回值的情况4、非静态native方法调用本对象中的静态方法5、非静态native方法调非本对象内的方法 使用NewObject实现6、非静态native方法调非本对象内的方法 使用A...

2020-01-03 02:32:29 3452

原创 android的JNI开发、CMake使用、javah命令、静态注册

一、Android Studio中下载必要的插件这要先安装图中箭头所指的两个插件:标号为2的是用于将C编译成so包的工具CMake标号为1的是用于在调试app时,可以调试C代码的工具插件二、在gradle中配置CMake环境在app下的gradle中,在android{}填下CMake配置标号为1是指明CMake的执行文件CMakeLists.txt的所在位置即如下...

2019-12-29 02:30:21 434

原创 Git · 三 git的冲突合并、git stash指令使用方式和脏工作树的管理

当我们使用git pull指令从远程服务器拉取最新版本的代码时,常常很容易和本地的版本的代码出现冲突,例如出现这样的提示:这种情况是出现在你修改了本地代码,修改的代码和远程分支的代码出现冲突且修改的代码没有commit到本地分支时,此时,远程分支的代码无法和本地分支代码进行合并,是因为还有些修改的代码在工作树上没有同步到本地分支。Git在提示中,提供两种解决方式,第一种是先将工作树的修...

2019-08-24 22:28:25 2656

原创 Git · 二 git的工作树、版本库以及分支管理和git status -s、git checkout、git branch等相关指令的使用

先理解Git的空间概念(这引用了Runoob.com 的一张图) 工作区:指的是文件夹中所有非隐藏的文件版本库:其实应该叫分支branch比较好理解(后面会仔细解释)index(版本库的暂存区):这个也是git指令中 --cached,在工作区执行git add后就会添加代码快照到这个暂存区以上三者的关系:1、工作区和暂存区(index)(1)当每次修改代码和添加新文...

2019-08-22 01:24:13 1063 3

原创 Git · 一 gitconfig的初始化配置、ssh秘钥的生成、ssh-agent代理和与Github的接轨

一、Git的配置 —— .gitconfig 一般下载安装Git之后的第一个步骤就使用以下命令配置Git当前的使用者名字和邮箱$ git config --global --add “uers.name” user$ git config --global --add "uers.email" xxx.com可是,这堆命令行代表着什么呢?$ git config代表...

2019-08-15 01:03:31 4583

原创 并发 · 五 —— 使用wait()、notify()、notityAll()实现线程之间的协作

当涉及一种场景,线程A需要等待线程B完成工作后再开始工作,这时就需要使用到Object基类中的wait()、notify()和notifyAll()来实现,先上例子public class text { volatile static boolean ok = false; static Object object = new Object(); public s...

2019-06-19 00:33:41 258

原创 Rxjava的泄露解决方案——rxlifecycle的使用和原理分析

最近在公司没有开发任务,就完整过了一下ReactiveX的rxjava,在考虑使用场景时,就考虑到异步操作可能会造成泄露问题,所以网上搜索就发现relifecycle这个辅助库。下面就记录一下它的使用和实现原理需要在build.gradle中配置:implementation 'com.trello.rxlifecycle2:rxlifecycle:2.2.0'implemen...

2019-04-17 00:52:50 641

原创 并发 · 四 —— 线程状态 和 阻塞时中断的 interrupt()方法

系列:并发 · 一 —— 线程并发 · 二 —— 互斥锁(synchronized 和 Lock)并发 · 三 —— 原子性与易变性线程有四种状态:新建、就绪、阻塞和死亡。1)新建:当线程被创建时,它只会短暂地处于这种状态,在这段时间内,主要会执行一些初始化的的操作。2)就绪:在这种状态下,只要调度器把时间片分配给线程,该线程就可以运行了。3)阻塞:线程能够运行,...

2019-01-31 22:28:49 2022

原创 并发 · 三 —— 原子性与易变性

系列:并发 · 一 —— 线程并发 · 二 —— 互斥锁(synchronized 和 Lock)并发 · 四 —— 线程状态 和 阻塞时中断的 interrupt()方法正文开始: 并发中有这两个概念挺关键的,它涉及到了硬件的一些相关的知识,熟悉了这两个概念,首先,你要真的十分熟悉,才可能尝试下面这种操作,编写无锁代码,这可以很大程度的提高在并发的速度,因为加锁...

2019-01-30 00:10:17 294

原创 并发 · 二 —— 互斥锁(synchronized 和 Lock)

系列:并发 · 一 —— 线程并发 · 三 —— 原子性与易变性并发 · 四 —— 线程状态 和 阻塞时中断的 interrupt()方法下面正文开始。 在单线程中,由于代码是顺序运行的,同一个资源在某一个时刻只会被一个实体使用,并不会出现两个实体同时使用同一个资源的情况。但是在多线程的情况,这种情况就变得常见了,同一个资源可能会被多个实体同时使用。此时就是出现资源...

2019-01-26 00:31:18 795 1

原创 并发 · 一 —— 线程

系列:并发 · 二 —— 互斥锁(synchronized 和 Lock)并发 · 三 —— 原子性与易变性并发 · 四 —— 线程状态 和 阻塞时中断的 interrupt()方法一、什么是并发 在编程问题中相当一大部分的开发需求都可以通过使用顺序编程来完成。所谓的顺序编程就是一大段代码顺序运行。如果把这一大段代码切成几个片段,让其“同时”运行,这就是并发了,同时...

2019-01-21 01:25:50 219

原创 关于Java关键字static与final一些总结

前几天去面试,突然被问到Java关键字中的static和final,有点懵逼,有些概念性的东西竟然忘了,痛定思痛,故打算这样一篇博客来复习一下。一、static静态修饰符,可作用在变量、方法,方法块,类(内部类),所对应的调用时机和调用次数有所不同,主要分为以下几种情况:1、作用在变量和方法块public class ClassE { static int a = 1; static{ S...

2018-04-05 23:11:45 201

原创 Dagger2的学习笔记 · 一

今天玩一下Dagger2,个人第一感觉就是,一种本来挺好理解的东西,硬生生被玩着复杂和变得难以理解了,哈哈,也有可能是自己技术水平不够,不说废话了,下面开始记录一下我的学习心得。Dagger2,官方的说明是A fast dependency injector for Android and Java,翻译成国语就是“Android和Java的快速依赖注入器。”一、什么是依赖注入下面先看一个例子,比...

2018-03-21 23:52:32 183

原创 Android Studio编译报错:com.android.tools.aapt2.Aapt2Exception

错误提示如下:解决方法:在gradle.properties文件下添加一句android.enableAapt2=false我在网上搜一下,错误的原因是:Gradle 3.0后,AAPT工具默认开启,而AAPT工具不能够识别处理某些类型的文件,在错误提示中也可以看得出,出现错误发生在Gradle的处理资源任务中,所以直接将其关闭就可以避免错误的出现。...

2018-02-13 01:27:30 820

原创 解决Error:android-apt plugin is incompatible with the Android Gradle plugin问题

当Android Studio升级到3.0后,添加apt插件就会出现以下错误:解决方法就是:使用annotationProcessor进行配置1、将Project下的build.gradle中将对应插件的classpath注释掉2、同时也将app下的build.gradle下对应应用插件去掉,一般在前几行3、将依赖中的apt的改为annotationProcessor只需要以上三步就能完美解决问题

2018-01-18 00:45:06 8339

原创 结合服务端实现断点续传

本人第一次写博客,才疏学浅,希望大牛能指出不足,如有错,请勿喷什么是断点续传?    断点续传是指,支持从文件上次中断的地方开始传送数据,而并非是从文件开头传送。这样做的优点是,如果在传输一个比较大的文件,发生连接超时错误时,只要客户端记录下已经接受的文件的大小,下次连接时,告诉服务器上次接受了多少,服务器就能跳过你已经接受部分继续传输,而你客户端只要将其追加在上次保存文件位置之后

2018-01-07 22:41:34 2793

IInAppBillingService.aidl

Google应用内支付购买结算——IInAppBillingService.aidl

2018-08-02

空空如也

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

TA关注的人

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