6 new洪彬

尚未进行身份认证

亮出你的锟斤拷

等级
TA的排名 19w+

Binder学习之旅(二)

前段时间用AIDL模板写了一个简单的进程间通信demo,并且也成功完成了进程间通信,今天就顺着demo来看看模板文件做了些什么事儿。Service回顾demo,用了两个app来进行实验,ServiceApp和ClientApp。ServiceApp启动了一个BookService,ClientApp绑定Bookservice,进而进行进程间通信。在onServiceConnected回调中,可以拿到Ibinder,通过asInterface就可以获取到ServiceApp中我们想要的东西,在代码中如下

2020-05-30 18:06:18

Binder学习之旅(一)

最近在看一些framework方面的东西,但是最后都绕不过binder,于是我再转向去了解binder的知识,但是看得我一头雾水。唉,仔细想想,我好想都没有正儿八经的写过跨进程通信的代码,那么,我就来手写一个跨进程的demo玩玩,同时也正好记录所遇到的问题。AIDLAndroidStudio对AIDL开发支持真的很好啊,在新建文件的时候可以直接选择AIDL文件编写,AS会自动帮我们生成对应的java接口文件。我是从《Android开发艺术探索》上看到的AIDL编程,所以案例也用了同一个。首先定义Boo

2020-05-28 17:02:40

APP全局色彩饱和度修改

APP全局色彩饱和度修改对以下两篇鸿洋大神的博文进行了实践,并记录对应的问题。App 黑白化实现探索,有一行代码实现的方案吗?App 黑白化实现探索2, 发现了一种更方便的方案,我被锤了!第一篇第一篇采用是比较常规的方法,即在View绘制的时候改变色彩饱和度,以ImageView为例,代码如下:public class MyTextView extends ImageView { ...

2020-04-09 16:00:01

从Glide中学习生命周期管理

最近也看了许多介绍glide的文章,很多流程相关的源码讲解都很详细,看完后也很有收获,不过我想写一点细节,对自己的日常开发有点启发的东西,比如说今天的图片加载的生命周期管理。 一般来说,图片是显示在Activity上的,当Activity结束了,那些正在显示和即将显示的图片的工作也可以准备结束了,所以Glide加载图片和显示图片要与Activity的生命周期同步。Glide与Ac...

2019-11-12 15:40:41

从Glide中学习WeakReference

项目开发了三年多了,图片加载库用的是ImageLoader,这期间也遇到了很多特殊的需求,在ImageLoader源码的基础上不断的修修改改,倒也能满足。不过要想使用gif,imageloader就要借助别的控件了,而且在处理超大图的问题上,也会发生OOM。基于这两个点,我决定选择另一个图片加载库glide,它能够同时满足我的这两个要求。在正式替换之前我也花了一段时间来阅读源码,在阅读的过...

2019-11-05 11:16:10

我应该标记一下的java同步知识

synchronizedsynchronized使用起来非常的方便,但是方便不等于简单,里面涉及的知识点还是挺多的,这里简单记录一点笔记。首先记录一下我所认识的锁,任何对象在头信息里都有一个锁标记,类也是特殊的对象(class对象),同一时刻只能有一个线程能持有这个锁,当用synchronized时,线程会获取锁,别的线程想要获取这个锁时只能等待这个线程释放锁。这两天看了很多人的文章...

2019-07-10 13:56:42

ThreadLocal · 源码解读

        第一次知道ThreadLocal是在看Looper源码的时候知道的,那时候只知道它的作用是让数据在各个线程单独保持一份,互不干扰,也一直没有去研究它的具体实现。昨天下班前粗略地看了一遍,我心里想的是“这玩意儿真的是太麻烦了,要是我的话,直接在线程里维护一个Object数组就能实现这个功能啊”。然后下了班回到家,我又仔仔细细的看了一遍,果然大佬还是你大佬,我还是太天真了。      ...

2018-06-01 11:26:39

一点一点啃RxJava(四#背压#)

        emmmm......本来我以为Rxjava应该写完了,但是仔细想想,还有一个比较重要的概念还没有涉及到,那就是“背压”。        一开始看RxJava的文档时看到背压这个概念的时候我是拒绝的,因为,你不能说这是背压,我就能理解这就是背压,我要自己试一下,我试过之后再告诉你们,我试过之后知道这是背压,你们看完之后也会知道。        想象一个经典的生产者消费者模型,生产者...

2018-05-14 14:10:20

一点一点啃RxJava(三#操作符#)

本文将分析RxJava2中常见的操作符。· justjust的作用是将参数依次发射出来,而且有很多的重载方法除了单参数的之外,别的方法都会调用fromArray,这个放到后面说。        just单参数方法返回ObservableJust对象:public final class ObservableJust<T> extends Observable<T> impl...

2018-04-25 17:11:01

一点一点啃RxJava(二#线程调度#)

        用RxJava实现线程切换是非常方便的,而且线程切换也是RxJava最大的特点之一。        依旧是先上一段示例代码和执行结果Observable .create(new ObservableOnSubscribe<Object>() { @Override ...

2018-04-24 10:18:20

一点一点啃RxJava(一#观察者模式实现#)

        项目里的网络库替换成RxJava+Retrofit也已经大半年了,之前因为时间紧,也一直没有来得及去看具体的实现原理,现在打算打算完整地梳理一遍RxJava,好东西当然要学习学习。        扔物线的给 Android 开发者的 RxJava 详解这篇文章对刚开始接触RxJava的同学非常友好,建议像我一样的可以先去了解一下,不过他那篇文章是基于RxJava1.0的,本文涉及到...

2018-04-19 18:05:21

Activity启动模式的那点事

要说Activity是Android四大组件最重要的一点也不为过,因为用户最能直观感受的也就是Activity。在讲启动模式之前有两个概念要先理一理,Stack和Task。TaskActivity是显示以及用户直接进行交互的组件,我们可以简单理解为许多个Activity组合在一起就是一个app。而这么多的Activity就在一个或多个Task中。StackActivity存在于Ta

2017-07-31 18:53:07

Android广播的源码解析

最近打算把Android基础的一些知识再深入一点,所以就打算从四大组件开始入手,广播是经常使用的,但是也仅仅只停留在会用,却不知其原理,就着这个机会把源码给撸一遍吧。public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) {

2017-03-29 14:03:19

Android SQLite使用

数据库是Android的一种数据存储方式,但是SQLiteOpenHelper是抽象类,我们需要自己写一个实现类来实现onCreate方法和onUpgrade方法,这两个方法分别会在数据库创建和更新的时候调用到。getWritableDatabase方法和getReadableDatabase方法分别返回一个可写的数据库和一个可读的数据库。如果发现数据库不存在,就会调用onCreate方法创建一个数据库,如果版本号升级就调用onUpgrade升级数据库。创建的数据库在/data/data/xxx(pac

2017-03-06 14:37:32

TCP UDP、Socket

TCP(Transmission Control Protocol 传输控制协议)优点在于信息传输的稳定性、可靠性,传输前进行三次握手确定连接;缺点在于效率相对较低,且头部较大。UDP(User Data Protocol,用户数据报协议)优点在于传输速度较快,指定地址和端口号就能直接传输数据;缺点在于传输前没有连接确认,有可能会出现丢包的现象。TCP和UDP都是传输层的协议,区别在传输前

2016-12-23 17:18:40

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

base64 加密方式详解

base64 加密方式详解base64编码表 命名 base64是用于传输8Bit字节代码,由上图的编码表可以知道,编码后的内容只包含这64个字符类型,所以称为base64编码(不足四个字符的时候会用 ‘=’ 来补足,下面会说明)。编码过程 首先将待编码的内容转换成8位二进制,每3个字符为一组;如果编码前的长度是3n+1,编码后的内容最后面补上2个 ‘=’,如果编码前的长度是3n+2,编码

2016-11-24 15:09:42

线程、多线程、线程池

· 线程线程是操作系统能够进行运算调度的最小单位,线程被包含在进程中,一个进程至少包含一个线程,进程也可以并发的执行多个线程。线程的生命周期:新建状态(New) 新创建了一个线程,还没有调用.start()启动。就绪状态(Runnable)调用.start()方法,启动了该线程,等待CPU的调度。运行状态(Running)获取到了CPU使用权,执行代码。阻塞状态

2016-05-24 10:29:32

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

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

查看更多

勋章 我的勋章
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。