Fork me on GitHub
Wakaka

路漫漫其修远兮,吾将上下而求索


  • 首页

  • 关于

  • 标签

  • 归档

Android-Binder机制

发表于 2018-07-31

什么是Binder

  1. Binder 是 Android 的一个子类,继承于IBinder接口
  2. Binder是Android 中的一种IPC方式,可以将Binder理解为一种虚拟的物理设备,设备的驱动是 /dev/binder
  3. 从Android Framework 角度来讲,Binder 是 ServiceManager 连接各种 Manager 和相应的 ManagerService 的桥梁
  4. 从应用层的角度来讲, Binder 是客户端和服务端进行通信的媒介,当你在使用 bindService 的时候,服务端会返回一个包含服务端业务调用的 binder 对象,通过这个 Binder 对象,客户端就可以获取服务端提供的服务或数据

为什么要是用Binder

目前linux支持的IPC包括传统的管道,System V IPC(消息队列/共享内存/信号量),以及socket。但是Android有大量的服务端/客户端的方式,这个时候就只有 Socket 可以被采用,但是由于 Socket 这种通信方式传输的效率低下而且需要很大的开销。

同时 Android 在安全性方面有较高的要求,传统的 IPC 方式并没有提供任何安全措施。所以 Android 提供了 Binder 这种进程间通信的方式。Binder基于 Client-Server 通信模式,传输过程只需一次拷贝,为发送发添加 UID/PID 身份,既支持实名 Binder 也支持匿名 Binder,安全性高。

阅读全文 »

Android性能优化

发表于 2018-07-22

性能优化的目标

  • 流畅的体验
  • 稳定
  • 省电/流量
  • 安装包小

如何达到目标

当然是性能优化啦!

布局优化

  1. 如果父控件有颜色,同时也是自己需要的颜色,那么就不必在子控件加背景颜色
  2. 如果每个子控件的颜色不太一样,而且可以完全覆盖父控件,那么就不需要再父控件上加背景颜色
  3. 尽量减少不必要的嵌套
  4. 能用LinearLayout和FrameLayout,就不要用RelativeLayout,因为RelativeLayout控件相对比较复杂,测绘也想要耗时
  5. 使用include和merge增加复用,减少层级
  6. ViewStub按需加载,更加轻便
  7. 复杂界面可选择ConstraintLayout,可有效减少层级
阅读全文 »

Glide-3

发表于 2018-07-20

本系列文章是在郭霖的文章基础上进行写作的

一个问题

首先我们尝试使用Glide来加载一张图片,图片URL地址是:

1
https://www.baidu.com/img/bd_logo1.png
阅读全文 »

Glide-2

发表于 2018-07-20

本系列文章是在郭霖的文章基础上进行写作的

Glide缓存简介

Glide的缓存设计分为两个模块,一个是内存缓存,一个是硬盘缓存。

  • 内存缓存作用是防止应用重复将图片数据读取到内存中
  • 硬盘缓存的作用是防止应用重复从网络或其他地方重复下载和读取数据
阅读全文 »

Glide-1

发表于 2018-07-20

一篇分析主流图片加载框架很好的文章

本系列文章是在郭霖的文章基础上进行写作的

在使用Glide的时候我们经常就下面的一句语句就完成了图片加载的工作,那么你是否知道里面究竟发生了什么事情?

1
Glide.with(context).load(URL).into(ImageView);
阅读全文 »

OkHttp3-4

发表于 2018-07-20

背景

Android中原生的网络请求方法

类型 优点 缺点
HttpURLConnection API简单,体积较小,因而非常适用于Android项目。压缩和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用 2.2版本以下存在bug
HttpClient 实现比较稳定,bug数量也很少 API数量过多、维护成本高、用法复杂
Volly 处理小文件的http请求、 数据量不大 通信频繁的网络操作 大数据量的网络操作表现糟糕
OkHttp 高效 支持SPDY、连接池、GZIP和HTTP缓存 自动处理常见的网络问题(重连、SSL握手)
Retrofit 性能最好,处理最快、使用REST、API时非常方便、 传输层默认就使用OkHttp、支持NIO、拥有出色的API文档和社区支持 如果你的应用程序中集成了OKHttp,Retrofit默认会使用OKHttp处理其他网络层请求、默认使用Gson
阅读全文 »

Java基础-面试

发表于 2018-07-19

来源见水印,侵删

注:以下内容只是作为面试的准备,如果有不够详细的地方,还希望你自己在网络、书籍或其他方式自行查找。

阅读全文 »

Java并发编程的艺术(3)

发表于 2018-07-17

Java并发编程基础

线程:现在操作系统调度的最小单元,在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。

线程的状态

状态名称 说明
NEW 初始状态,线程被构建,但是还没有调用start()方法
RUNNABLE 运行状态,Java线程将操作系统中的就绪和运行状态合并称为”运行中”
BLOCKED 阻塞状态,表示线程阻塞于锁
WAITING 等待状态,表示线程进入等待状态,进入该状态表示当前线程需要等待其他线程做出一些特定动作(通知或中断)
TIME_WAITING 超时等待状态,该状态不同于WAITING,它是可以在指定的时间自行返回的
TERMINATED 终止状态,表示当前线程已经执行完毕
阅读全文 »

Java并发编程的艺术(2)

发表于 2018-07-16

Java内存模型

  • Java内存模型的基础
  • Java内存模型中的顺序一致性
  • 同步原语(synchronized、volatile、final)
  • Java内存模型的设计

Java内存模型的基础

并发编程中的两个关键问题:

  • 线程之间如何进行通信
  • 线程之间如何同步

命令式编程中,线程之间的通信机制有两种:共享内存和消息传递

阅读全文 »

Java并发编程的艺术(1)

发表于 2018-07-15

并发编程的挑战

上下文切换

CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下一次切换回这个任务时,可以再加载这个任务的状态,所以任务从保存到再加载的过程就是一次上下文切换。

如何减少上下文切换

  1. 无锁并发编程。多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,可以用一些办法来避免使用锁,如将数据的 ID 按照 Hash 算法取模分段。不同的线程处理不同段的数据。
  2. CAS 算法。Java 的 Atmoic 包使用 CAS 算法来更新数据,而不需要加锁
  3. 使用最少线程。避免创建不需要的线程,比如任务很少,但是创建了很多线程来处理,这样会造成大量线程都处于等待状态
  4. 协程。在单线程里实现多任务的调度,并在单线程里维持多个任务的切换。
阅读全文 »
12…9

Wakaka

84 日志
25 标签

© 2018 Wakaka
本站访客数:
本站总访问量次 |
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.3