
Android
229836277
https://chengang.plus/
展开
-
RxJava源码学习
个人主页:https://chengang.plus/文章将会同步到个人微信公众号:Android部落格1 RxJava使用RxJava是响应式数据流驱动框架,Retrokit提供了对RxJava的支持。1.1 接入在app module的build.gradle中添加依赖:implementation "com.squareup.retrofit2:adapter-rxjava2:2.3.0"implementation "io.reactivex.rxjava2:rxjava:2.0..原创 2020-08-12 21:03:05 · 287 阅读 · 0 评论 -
Retrofit源码学习
个人主页:https://chengang.plus/文章将会同步到个人微信公众号:Android部落格1 基本使用@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_retrofit); new Thread(new Runnable() { @O.原创 2020-08-12 20:56:19 · 344 阅读 · 0 评论 -
Android jni知识点
个人主页:https://chengang.plus/文章将会同步到个人微信公众号:Android部落格1、创建jni环境https://developer.android.com/studio/projects/gradle-external-native-buildshttps://developer.android.com/training/articles/perf-jnihttps://www.jianshu.com/p/127adc130508https://www.jians.原创 2020-07-01 19:41:10 · 876 阅读 · 0 评论 -
Android项目总结5
个人主页:https://chengang.plus/文章将会同步到个人微信公众号:Android部落格1、项目需求项目整体的需求是Android盒子支持上下左右控制云台摄像头,还要能相对和绝对控制摄像头的位置。相对控制,意思就是按着左方向键不放,摄像头一直往左边转,到最大值为止,反之亦然;绝对控制,意思是每次按一下方向键,就转一个角度就停下来。2、需求实现最终选择通过定制Android kernel层的uvc代码,编译kernel,打包固件,刷机,编写上层App,从上到下打通控制流程。3、.原创 2020-07-01 19:40:21 · 614 阅读 · 1 评论 -
Android项目复盘4
个人主页:https://chengang.plus/文章将会同步到个人微信公众号:Android部落格UVC协议文档网址:https://www.usb.org/documents?search=&type%5B0%5D=55&items_per_page=50主要下载USB Video Class 1_5,关注下载zip包中的UVC 1.5 Class specification.pdf文件,里面有接口相关的解释。Android盒子控制摄像头项目已经差不多4年了,很多知识点.原创 2020-07-01 19:39:24 · 351 阅读 · 0 评论 -
Android项目复盘3
个人主页:https://chengang.plus/文章将会同步到个人微信公众号:Android部落格3、健康数据记录项目这个项目遇到的主要问题是应用使用时长和使用次数不准确的问题。原因要从应用的业务逻辑以及源码中去查找。一般我们获取应用使用数据详情的方法是:@TargetApi(Build.VERSION_CODES.LOLLIPOP)private ArrayList<AppLaunchInfoBean> getAppLaunchInfoBean(long start, l.原创 2020-06-16 11:10:14 · 340 阅读 · 0 评论 -
Android项目复盘2
个人主页:https://chengang.plus/文章将会同步到个人微信公众号:Android部落格2、系统数据检查2.1 dex更新我们开发的java代码通过编译生成.class文件,然后通过dx工具生成机器可以识别的dex文件。Android中采用ClassLoader加载dex文件,加载完成之后可以通过反射调用其中的方法,适合那些不依赖文件等资源的业务,而打点恰好比较适合使用dex加载的方式。Android中有PathClassLoader和DexClassLoader ,他们都继.原创 2020-06-16 11:09:21 · 226 阅读 · 0 评论 -
Android项目复盘1
个人主页:https://chengang.plus/文章将会同步到个人微信公众号:Android部落格1、商城项目1.1 RecyclerView首页加载商品item内存占用过高原因:首页包含了精选,banner,秒杀,热卖列表,但是每一个ViewType没有在RecyclerView中设置各自的类型,导致缓存的时候当做一整ViewHolder缓存,从而整体内存占用过高。尤其底部的热卖列表上拉加载的时候,显得尤为显著。1.1.1 源码追溯RecyclerView.Recycler.原创 2020-06-16 11:07:37 · 355 阅读 · 0 评论 -
Android RecyclerView源码学习
文章篇幅较长,文末有总结和流程图。个人主页:https://chengang.plus/文章将会同步到个人微信公众号:Android部落格1、用法一个比较简单的用法如下:class AndroidDeepLearnActivity : Activity() { lateinit var dlRecyclerView: RecyclerView lateinit var context: Context## 4、总结 private val images = ar.原创 2020-06-03 21:00:29 · 356 阅读 · 0 评论 -
Android OKHttp系列5-ConnectInterceptor
文章将会被同步至微信公众号:Android部落格概述选定连接接口,并开始连接目标流程图如下:1、找RealConnection选择合适的HttpCodec,为什么要选择呢?因为涉及到Http版本的问题,此处需要兼容,先看代码:boolean doExtensiveHealthChecks = !request.method().equals("GET");HttpCodec...原创 2019-05-17 17:32:25 · 310 阅读 · 0 评论 -
Android OKHttp系列1-流程总结
源码地址:https://github.com/square/okhttp1、 调用示例同步方式:new Thread(new Runnable() { @Override public void run() { try { OkHttpClient client = new OkHttpClient(); ...原创 2019-05-13 15:51:09 · 191 阅读 · 0 评论 -
Android Bitmap内存占用及缓存
文章图片来自于https://blog.youkuaiyun.com/happylishang/article/details/80404966一、衡量单位1) dpi,dip,dp,sp,pxdpi,dots per inch,单位英寸上的像素点数dip,device independent pixels,设备独立像素dp,与dip相同,名称不一样而已sp,scale pixels,缩放像...原创 2019-05-15 20:11:08 · 1011 阅读 · 0 评论 -
Android OKHttp系列4-CacheInterceptor
概述处理缓存策略流程图如下:(1) 初始化Cache对象在最开始初始化各个拦截器的时候,到CacheInterceptor对象创建的时候初始化了Cache。getResponseWithInterceptorChain();interceptors.add(new CacheInterceptor(client.internalCache()));在开始请求的时候需要初始化C...原创 2019-05-15 19:35:53 · 297 阅读 · 0 评论 -
Android OKHttp系列6-CallServerInterceptor
文章将会被同步至微信公众号:Android部落格概述开始写入request body数据,并读取服务端返回的数据上一篇文章说到有两个Http协议兼容处理请求,因此有两个流程图,基本是相似的处理流程:Http1CodecHttp2Codec1、Http1Codec(1)写请求头@Override public void writeRequestHeaders(Re...原创 2019-05-20 19:33:54 · 371 阅读 · 0 评论 -
Android OKHttp系列3-BridgeInterceptor
概述用来整理请求和响应的数据流程图如下:(1)Request.Builder请求Header被封装在这个Builder类中,针对不同的情况填写不同的Header值。Http Header请求字段列表如下:Header解释示例Accept指定客户端能够接收的内容类型Accept: text/plain, text/htmlAccept-Charset...原创 2019-05-14 17:19:10 · 486 阅读 · 0 评论 -
Android OKHttp系列2-RetryAndFollowUpInterceptor
概述失败重试以及重定向流程图如下:(1)StreamAllocation在RetryAndFollowUpInterceptor的intercept方法中初始化了一个StreamAllocation对象。StreamAllocation streamAllocation = new StreamAllocation(client.connectionPool(), crea...原创 2019-05-14 14:26:23 · 316 阅读 · 0 评论 -
Android-Fresco系列6 图片解码
文章将会被同步至微信公众号:Android部落格先看看流程图:一、MultiplexProducer从EncodedMemoryCacheProducer传递来的数据,来到了 MultiplexProducer.ForwardingConsumer中。1) 初始化回去看看producer初始化的地方看看其中初始化顺序:EncodedCacheKeyMultiplexProduce...原创 2019-06-06 19:24:58 · 1044 阅读 · 4 评论 -
Android SSH反向连接实践
方案实现依靠以下几篇文章:http://blog.163.com/leekwen@126/blog/static/3316622920118144927681/http://www.cnblogs.com/whltingyu/p/4083448.htmlhttps://segmentfault.com/a/1190000002718360在android系统中移植ssh服务是基于实时维...原创 2019-04-25 11:19:03 · 1107 阅读 · 0 评论 -
Android OKHttp系列7-HttpURLConnection
文章将会被同步至微信公众号:Android部落格Android Http请求一个典型的请求方式是:private fun getContent(url: String): String? { var connection: HttpURLConnection? = null var info: String? = null try { connec...原创 2019-05-23 11:09:19 · 568 阅读 · 0 评论 -
Android-Fresco系列3 Producer
文章将会被同步至微信公众号:Android部落格先看流程图:一、发起请求记得在AbstractDraweeController的submitRequest方法中先获取一个DataSource对象(getDataSource()),然后定义了一个DataSubscriber对象,是以内部类的方式初始化的,最后调用mDataSource.subscribe().1) Controller...原创 2019-06-06 09:43:56 · 568 阅读 · 0 评论 -
Android-Fresco系列2 加载资源
文章将会被同步至微信公众号:Android部落格流程图如下:一、SimpleDraweeView加载图片val draweeView = findViewById<SimpleDraweeView>(R.id.my_image_view)draweeView.setImageURI("http://ww1.sinaimg.cn/large/610dc034ly1fjaxh...原创 2019-06-04 20:37:32 · 479 阅读 · 0 评论 -
Android-Fresco系列1 初始化
文章将会被同步至微信公众号:Android部落格先看流程图:一、开始使用在工程的app目录下的build.gradle添加引用:implementation 'com.facebook.fresco:fresco:1.12.0'Application类中的onCreate方法中添加初始化:Fresco.initialize(this)layout xml文件中添加...原创 2019-06-04 17:58:17 · 572 阅读 · 0 评论 -
Android-Fresco系列9 图片展示与释放
文章将会被同步至微信公众号:Android部落格先看流程图:一、回到起点起点是AbstractProducerToDataSourceAdapter,因为ImagePipeline的submitFetchRequest最终调用了CloseableProducerToDataSourceAdapter.create方法,发起了整个请求图片到解码图片的流程,而CloseableProduc...原创 2019-06-10 18:32:33 · 824 阅读 · 0 评论 -
Android-Fresco系列8 读缓存数据
文章将会被同步至微信公众号:Android部落格看流程图:一、读取解码内存缓存1. BitmapMemoryCacheProducer之前加载图片资源的时候有说到过,从缓存取数据,讲的是从内存取,在AbstractDraweeController的submitRequest方法中,先从缓存取数据,getCachedImage方法://PipelineDraweeController...原创 2019-06-10 16:05:26 · 493 阅读 · 0 评论 -
Android-Fresco系列7 解码数据内存缓存
文章将会被同步至微信公众号:Android部落格一、BitmapMemoryCacheProducer从第三篇文章中可以看到Producer的初始化顺序是BitmapMemoryCacheProducer->DecodeProducer,由此看到解码成功的图片还要经过内存缓存,等于是说光内存缓存就有两份,一份编码的,一份解码的。这边文章讲解码之后的数据缓存。经过DecodePro...原创 2019-06-10 15:21:17 · 482 阅读 · 0 评论 -
Android-Fresco系列5 编码数据内存缓存
文章将会被同步至微信公众号:Android部落格流程图如下:一、EncodedMemoryCacheProducer1) 数据来源从返回的数据流读取数据网络请求返回InputStream,按照常规思维,从这个stream里面读取数据到byte[]再保存就行了,但是sdk里面的处理更好。在NetworkFetchProducer中有数据返回之后,开始新建一个返回数据大小的输出数...原创 2019-06-06 15:49:30 · 583 阅读 · 0 评论 -
Android-Fresco系列4 磁盘缓存
文章将会被同步至微信公众号:Android部落格先看流程图:一、DiskCacheWriteProducer从NetworkFetchProducer传递过来的数据是EncodedImage类型,里面的未解码数据是CloseableReference类型。1) produceResults定义了一个DiskCacheWriteConsumer用于消费接收到的消息。//DiskCa...原创 2019-06-06 09:45:39 · 690 阅读 · 0 评论 -
UVC系列5-编写Android jni代码实现控制PTZ
在Android kernel层完成定制之后,需要写app实现对摄像头的控制,主要通过jni代码实现。在jni代码中主要定义这几个函数:jintArrayJava_com_chuck_android_uvccamera_MainActivity1_startControlCamera(JNIEnv*env,jobject thiz , jint controlId ,jint value)实...原创 2019-04-24 20:32:01 · 1231 阅读 · 1 评论 -
UVC系列4-定制Android kernel UVC部分支持相对和绝对参数
在熟悉了android uvc控制参数和UVC协议之后,现在可以着手定制android UVC协议了,添加相对控制参数。第一步,添加相对控制pan和tilt修改的文件是:drivers\media\usb\uvc\uvc_ctrl.c在uvc_control_info uvc_ctrls[]结构体中添加:{ .entity = UVC_GUID_UVC_CA...原创 2019-04-24 20:07:52 · 1251 阅读 · 0 评论 -
UVC系列3-研究UVC控制协议
上一篇文章主要讲述了在android kernel层的控制参数,并没有讲这些参数的具体含义,为什么是这些参数。这里主要深入了解一下UVC协议,是一份PDF文档。{.entity =UVC_GUID_UVC_CAMERA,.selector = UVC_CT_PANTILT_RELATIVE_CONTROL,.index =12,.size ...原创 2019-04-24 19:55:20 · 6624 阅读 · 1 评论 -
Android UsageStatsManager get data
1、Register service(binder client)ContextImplcontext.getSystemService(“usagestats”)SystemServiceRegistrypublic static Object getSystemService(ContextImpl ctx, String name) { ServiceFetcher<?...原创 2019-03-27 21:18:34 · 459 阅读 · 0 评论 -
UsageStatsManager write data
Interface initActivityManagerServicepublic void setUsageStatsManager(UsageStatsManagerInternal usageStatsManager) { mUsageStatsService = usageStatsManager;}SystemServerIt is invoked in Syste...原创 2019-03-29 11:19:12 · 387 阅读 · 2 评论 -
Android Activity启动流程
一上来就总结吧,源码看的累,文末有流程图。一、总结Activity启动流程总结起来就两条线:1、要启动的Activity在不在栈里面,不在顶部新建一个,在的话拉起来复活;2、要启动的Activity所在进程在不在,不在的话新建进程并新建Activity;进程在,但是Activity不存在就新建一个。二、在Activity启动过程中需要注意几个点:1、在server端创建Activity...原创 2019-04-15 16:46:30 · 219 阅读 · 0 评论 -
UVC系列2-探索Android UVC协议
文章选取android下linux-3.10作为分析对象,具体的UVC初始化过程可以参考csdn大神写的博客,地址是:http://blog.youkuaiyun.com/orz415678659。uvc加载摄像头的过程无非是初始化设备,加载设备,获取设备相关参数并加载相关参数到buffer,此时就已经将视频和控制参数加载到buffer了,这篇文章主要关注的是控制相关的参数。需要关注的两个核心文件是:...原创 2019-04-24 19:38:33 · 3020 阅读 · 0 评论 -
UVC系列1-Android盒子控制云台摄像头系列
Android作为host端控制云台摄像头整个实现过程中涉及了Android kernel底层UVC部分,Android kernel代码的编译,USB协议,Android JNI方面的知识。刚开始项目提出这个需求的时候,想到的是通过Android原生的USB API 去控制外接的USB PTZ摄像头,因为大多数的云台摄像头支持pelco-d或是pelco-p协议,而Android提供的接口可以...原创 2019-04-24 18:00:08 · 1345 阅读 · 0 评论 -
工作过程中积累的书签(链接)
http://www.cppblog.com/guojingjia2006/archive/2013/02/20/197955.html(Android root权限获取大揭秘(转))http://www.infoq.com/cn/articles/android-accessibility-installing(使用Android Accessibility实现免Root自动批量安装功能)...原创 2019-04-24 17:56:26 · 361 阅读 · 0 评论 -
Android数据库更新
最近在写一个android开发框架的时候用到了ormlite,也稍微封装了一下。但是如果已经存在一个数据库,我要在其中一个表中插入某一列可怎么办呢?不止如此,我想删除某一列,修改某一列的数据类型,修改某个表的名字,这些需求在数据库需要经常修改字段的时候经常用到。而google一下发现其实数据库的一些语句其实是可以做到的,就是alter。下面贴上相关代码片段:/** * 更新升级数据库,包括删...原创 2019-04-24 17:54:44 · 3014 阅读 · 0 评论 -
Android EventBus源码学习
1、Register(注册过程)会调用private synchronized voidregister(Object subscriber, boolean sticky, int priority)其中Object subscriber是注册代码所在函数的对象,就是消息的订阅者(subscriber),sticky指是否是粘性,priority是指订阅的优先级这个函数的源码是:List...原创 2019-04-24 17:46:54 · 119 阅读 · 0 评论 -
Android单手指控制图片的缩放及旋转
文章参考:https://github.com/ryanch741/android-view-rotate-zoom-single-fingerhttp://stackoverflow.com/questions/5256421/how-to-perform-zoom-in-out-rotation-together-in-android因为项目需要用到单手控制图片的放大缩小以及旋转,所...原创 2019-04-24 17:06:08 · 1212 阅读 · 0 评论 -
Android 新版个税计算小demo程序
去年10月份开始个人所得税支持专项扣除和上调了个税起征点,针对该项改变写了一个小demo,在新政策下计算个人所得税扣除,工资所得,然后将每个月的扣除额度和实际所得额度展示。计入如下:直接上源码:package com.chuck.taxcalculatorimport android.app.Activityimport android.os.Bundleimport andr...原创 2019-04-29 11:39:31 · 1755 阅读 · 0 评论