- 博客(23)
- 资源 (2)
- 收藏
- 关注
原创 Binder学习之旅(二)
前段时间用AIDL模板写了一个简单的进程间通信demo,并且也成功完成了进程间通信,今天就顺着demo来看看模板文件做了些什么事儿。Service回顾demo,用了两个app来进行实验,ServiceApp和ClientApp。ServiceApp启动了一个BookService,ClientApp绑定Bookservice,进而进行进程间通信。在onServiceConnected回调中,可以拿到Ibinder,通过asInterface就可以获取到ServiceApp中我们想要的东西,在代码中如下
2020-05-30 18:06:18
277
原创 Binder学习之旅(一)
最近在看一些framework方面的东西,但是最后都绕不过binder,于是我再转向去了解binder的知识,但是看得我一头雾水。唉,仔细想想,我好想都没有正儿八经的写过跨进程通信的代码,那么,我就来手写一个跨进程的demo玩玩,同时也正好记录所遇到的问题。AIDLAndroidStudio对AIDL开发支持真的很好啊,在新建文件的时候可以直接选择AIDL文件编写,AS会自动帮我们生成对应的java接口文件。我是从《Android开发艺术探索》上看到的AIDL编程,所以案例也用了同一个。首先定义Boo
2020-05-28 17:02:40
238
原创 APP全局色彩饱和度修改
APP全局色彩饱和度修改对以下两篇鸿洋大神的博文进行了实践,并记录对应的问题。App 黑白化实现探索,有一行代码实现的方案吗?App 黑白化实现探索2, 发现了一种更方便的方案,我被锤了!第一篇第一篇采用是比较常规的方法,即在View绘制的时候改变色彩饱和度,以ImageView为例,代码如下:public class MyTextView extends ImageView { ...
2020-04-09 16:00:01
1087
原创 从Glide中学习生命周期管理
最近也看了许多介绍glide的文章,很多流程相关的源码讲解都很详细,看完后也很有收获,不过我想写一点细节,对自己的日常开发有点启发的东西,比如说今天的图片加载的生命周期管理。 一般来说,图片是显示在Activity上的,当Activity结束了,那些正在显示和即将显示的图片的工作也可以准备结束了,所以Glide加载图片和显示图片要与Activity的生命周期同步。Glide与Ac...
2019-11-12 20:06:57
210
1
原创 从Glide中学习WeakReference
项目开发了三年多了,图片加载库用的是ImageLoader,这期间也遇到了很多特殊的需求,在ImageLoader源码的基础上不断的修修改改,倒也能满足。不过要想使用gif,imageloader就要借助别的控件了,而且在处理超大图的问题上,也会发生OOM。基于这两个点,我决定选择另一个图片加载库glide,它能够同时满足我的这两个要求。在正式替换之前我也花了一段时间来阅读源码,在阅读的过...
2019-11-05 17:15:43
469
原创 我应该标记一下的java同步知识
synchronizedsynchronized使用起来非常的方便,但是方便不等于简单,里面涉及的知识点还是挺多的,这里简单记录一点笔记。首先记录一下我所认识的锁,任何对象在头信息里都有一个锁标记,类也是特殊的对象(class对象),同一时刻只能有一个线程能持有这个锁,当用synchronized时,线程会获取锁,别的线程想要获取这个锁时只能等待这个线程释放锁。这两天看了很多人的文章...
2019-07-10 13:56:42
154
原创 ThreadLocal · 源码解读
第一次知道ThreadLocal是在看Looper源码的时候知道的,那时候只知道它的作用是让数据在各个线程单独保持一份,互不干扰,也一直没有去研究它的具体实现。昨天下班前粗略地看了一遍,我心里想的是“这玩意儿真的是太麻烦了,要是我的话,直接在线程里维护一个Object数组就能实现这个功能啊”。然后下了班回到家,我又仔仔细细的看了一遍,果然大佬还是你大佬,我还是太天真了。 ...
2018-06-01 11:26:39
448
原创 一点一点啃RxJava(四#背压#)
emmmm......本来我以为Rxjava应该写完了,但是仔细想想,还有一个比较重要的概念还没有涉及到,那就是“背压”。 一开始看RxJava的文档时看到背压这个概念的时候我是拒绝的,因为,你不能说这是背压,我就能理解这就是背压,我要自己试一下,我试过之后再告诉你们,我试过之后知道这是背压,你们看完之后也会知道。 想象一个经典的生产者消费者模型,生产者...
2018-05-14 14:10:20
286
原创 一点一点啃RxJava(三#操作符#)
本文将分析RxJava2中常见的操作符。· justjust的作用是将参数依次发射出来,而且有很多的重载方法除了单参数的之外,别的方法都会调用fromArray,这个放到后面说。 just单参数方法返回ObservableJust对象:public final class ObservableJust<T> extends Observable<T> impl...
2018-04-25 17:11:01
290
原创 一点一点啃RxJava(二#线程调度#)
用RxJava实现线程切换是非常方便的,而且线程切换也是RxJava最大的特点之一。 依旧是先上一段示例代码和执行结果Observable .create(new ObservableOnSubscribe<Object>() { @Override ...
2018-04-24 10:18:20
357
原创 一点一点啃RxJava(一#观察者模式实现#)
项目里的网络库替换成RxJava+Retrofit也已经大半年了,之前因为时间紧,也一直没有来得及去看具体的实现原理,现在打算打算完整地梳理一遍RxJava,好东西当然要学习学习。 扔物线的给 Android 开发者的 RxJava 详解这篇文章对刚开始接触RxJava的同学非常友好,建议像我一样的可以先去了解一下,不过他那篇文章是基于RxJava1.0的,本文涉及到...
2018-04-19 18:05:21
279
原创 Activity启动模式的那点事
要说Activity是Android四大组件最重要的一点也不为过,因为用户最能直观感受的也就是Activity。在讲启动模式之前有两个概念要先理一理,Stack和Task。TaskActivity是显示以及用户直接进行交互的组件,我们可以简单理解为许多个Activity组合在一起就是一个app。而这么多的Activity就在一个或多个Task中。StackActivity存在于Ta
2017-07-31 18:53:07
395
原创 Android广播的源码解析
最近打算把Android基础的一些知识再深入一点,所以就打算从四大组件开始入手,广播是经常使用的,但是也仅仅只停留在会用,却不知其原理,就着这个机会把源码给撸一遍吧。public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) {
2017-03-29 14:03:19
899
原创 Android SQLite使用
数据库是Android的一种数据存储方式,但是SQLiteOpenHelper是抽象类,我们需要自己写一个实现类来实现onCreate方法和onUpgrade方法,这两个方法分别会在数据库创建和更新的时候调用到。getWritableDatabase方法和getReadableDatabase方法分别返回一个可写的数据库和一个可读的数据库。如果发现数据库不存在,就会调用onCreate方法创建一个数据库,如果版本号升级就调用onUpgrade升级数据库。创建的数据库在/data/data/xxx(pac
2017-03-06 14:37:32
375
原创 TCP UDP、Socket
TCP(Transmission Control Protocol 传输控制协议)优点在于信息传输的稳定性、可靠性,传输前进行三次握手确定连接;缺点在于效率相对较低,且头部较大。UDP(User Data Protocol,用户数据报协议)优点在于传输速度较快,指定地址和端口号就能直接传输数据;缺点在于传输前没有连接确认,有可能会出现丢包的现象。TCP和UDP都是传输层的协议,区别在传输前
2016-12-23 17:18:40
359
原创 adb 命令
命令 解释 adb shell 启动adb logcat -c 清除所有log日志 logcat *:e 查看所有错误 logcat -s xxx 查看log“xxx”的信息 cat /proc/meminfo 查看手机内存情况 ps 查看所有进程 ps|grep xxx 过滤显示 “xxx” 的进......
2016-11-29 13:20:00
361
原创 base64 加密方式详解
base64 加密方式详解base64编码表 命名 base64是用于传输8Bit字节代码,由上图的编码表可以知道,编码后的内容只包含这64个字符类型,所以称为base64编码(不足四个字符的时候会用 ‘=’ 来补足,下面会说明)。编码过程 首先将待编码的内容转换成8位二进制,每3个字符为一组;如果编码前的长度是3n+1,编码后的内容最后面补上2个 ‘=’,如果编码前的长度是3n+2,编码
2016-11-24 15:09:42
6843
原创 线程、多线程、线程池
· 线程线程是操作系统能够进行运算调度的最小单位,线程被包含在进程中,一个进程至少包含一个线程,进程也可以并发的执行多个线程。线程的生命周期:新建状态(New) 新创建了一个线程,还没有调用.start()启动。就绪状态(Runnable)调用.start()方法,启动了该线程,等待CPU的调度。运行状态(Running)获取到了CPU使用权,执行代码。阻塞状态
2016-05-24 10:29:32
349
原创 HttpURLConnection发送Get和Post请求
HttpURLConnection是java的标准类,可发送get请求和post请求。关于Get和Post的区别,这里就不细说了,网上普遍的说法是:1、GET请求是从服务器上获取数据,POST请求是向服务器传送数据。2、GET的请求参数放在URL链接中,POST的请求参数放在body中。3、GET的URL会有长度上的限制,则POST的数据则可以非常大。4、POST比GET安全,因为数据在地址栏上不可见。5
2016-05-17 18:07:29
18870
原创 Parameter must be a descendant of this view 错误
Parameter must be a descendant of this view 相关最近做的项目,有ListView的嵌套问题,但是在某些机型上面会崩溃,报Parameter must be a descendant of this view异常,我查了很多资料,都说是在移除一个View的时候没有把这个View的焦点一起移除。我也不能解释得很清楚,有类似问题的可以查阅以下两个链接http:/
2016-05-06 12:37:14
706
原创 AsyncTask注意事项
昨天看《Android开发艺术探索》的时候,对AsyncTask中的几个点比较感兴趣:先贴源码注释截图1、AsyncTask不适合特别耗时的任务 AsyncTask的生命周期和Activity的生命周期不同步,Activity销毁了但是AsyncTask中的任务还是会继续执行完毕,一个最典型的例子就是Activity的横竖屏切换,AsyncTask中引用的Act
2016-03-30 10:07:37
776
原创 Android中从ImageView中取出图片bitmap注意事项
最近在工作中遇到一个需求,是在做视频播放器时,要求中间的播放按钮是毛玻璃效果。这就要在这个图片的相应位置取出bitmap对象,然后进行模糊处理再设置回去。这张图片是从服务端异步获取的,所以在获取图片完成时会设置完整个控件的大图,然后我再从空间中取出我需要的那一小块bitmap.bitmap = Bitmap.createBitmap(imageVie
2016-03-26 15:28:04
4943
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人