自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 资源 (3)
  • 收藏
  • 关注

翻译 JNI官方文档翻译7-Java线程和Native线程

在写这篇文章之前,我还是先简单概括一下第七章的内容:对于java程序而言,native是我们需要访问的库。但是对于一个单纯的c程序而言,我们可以使用一个特殊的c库来创建虚拟机。刚好相反。在C程序里创建一个java虚拟机,然后加载类,找到类里的main方法,然后执行,这样一个虚拟机就跑起来了。事实上,我们在命令行里输入java 命令,其实就是执行类似这样的程序。而java命令是个C程序,负责创建虚拟

2016-05-27 10:25:18 4159

翻译 JNI官方文档翻译6-异常

我们之前遇到了很多调用JNI函数抛异常的情形,我们通过检查返回值NULL的情况。这一节我们介绍怎么发现异常并且从这些错误情况中恢复。我们主要关注于JNI调用产生的异常,如果JNI系统调用发生了异常,我们可以检查返回值,但是,如果我们调用java层回调函数callback,那么接下来的内容你就需要注意了,我们需要遵循以下几个步骤。      我们通过几个例子,介绍JNI处理异常的函数。

2016-05-17 09:09:30 1331

翻译 JNI官方文档翻译5-局部和全局引用

时间过得好快,一转眼写到了第五章,JNI对于许多java程序员来说一般是很陌生的,因为,要想使用JNI必须使用C,然而很多Java程序员都不会C,其实实际上不是这样的。项目中应该是分工协作才是,JNI作为一种粘合剂,将Java代码和C代码粘合在一起。作为一个java程序员,你至少应该会一点点C。      JNI暴露给程序员的并不是真正的引用,而是不透明引用,文档当中称之为opaque

2016-05-16 17:30:55 1535

翻译 JNI官方文档翻译4-属性和方法的访问

本篇文章介绍如何访问任意对象的属性和方法,当然是在native层访问,方法的访问一般作为java层的回调来访问。我们先从 属性的访问和回调函数的访问开始,接下来再讨论一下使用一种高效简单的缓存技术来提高效率。最后我们讨论native访问java层属性和方法的性能特点。属性的访问:Java语言支持两种属性,每个实例都有自己独立的属性,所有实例共享同一份静态属性。JNI提供get se

2016-05-16 15:00:07 4442

翻译 JNI官方文档翻译3-基本数据类型 字符串 数组

在使用JNI的时候,你问的最多的问题莫过于 Java的数据类型和C/C++的数据类型怎么一对一映射。在我们的HelloWord例子当中,我们并没有传入任何参数给我们的java层print方法,native方法也并没有返回任何数据而是void,本地方法只是简单的打印一个字符串,然后就返回了。实际开发中我们都需要传入参数,返回参数,本章就会讨论如何从java层向底层传数据,以及如何从底层向java层返

2016-05-16 10:41:45 4015

翻译 JNI官方文档翻译2-Getting Started

第一个Java调用C程序的HelloWord由下面几步构成:1. 创建HelloWord.java 并声明Native方法 2. 使用javac编译HelloWord源文件生成HelloWord.class 3.使用javah -jni生成C头文件HelloWord.h, 这个头文件包含本地方法的原型声明 4.编写本地方法的HelloWord.c实现,应当包含HelloWord.h 5.编译Hel

2016-05-16 09:57:02 1064

翻译 JNI官方文档翻译1-开篇

JNI :  Java Native Interface, 是Java调用C/C++的接口协议。写本系列文章的目的是让更多Java的程序员熟悉JNI,至少知道JNI怎么用。网上很多教程,无外乎一个helloword就结束了,对JNI的一些列API的使用介绍甚少,这也是大多数人停留的层次。本文试图对JNI系列文档做翻译,当然不会逐字逐句的翻译,而是经过了我的理解和消化,做出一个满足 “信“, ”达“

2016-05-16 09:43:07 1189

原创 Android MVP设计模式的理解

做Android开发久了会有一种感觉,那就是业务逻辑总是伴随大量UI更新操作,最后我们的代码中UI更新伴随业务逻辑,业务逻辑发生伴随UI更新。如此纠缠,当一个类的代码越来越多的时候,过些日子再回头看,很乱很乱。作为一个长期运营的项目,这种做法是不可取的,当项目交到下一个人的手里,我只想说God will be with you. 所以从今以后,我们必须采取新的开发模式,尽管看起来繁琐一些,但是理解

2016-05-19 18:06:09 2726

原创 HorizontalListView源码解读之自己动手写ListView

这篇文章的标题可能并不像你想的一样,但是当你看完这篇文章后,你一定能够找到如何实现一个ListView的思路,下面的代码我做了注释,是来自于一个开源项目的。这个项目很简单,你可以到GitHub上搜HorizontalListView就能找到它,在这里就不贴链接了。 我推荐大家从头到尾看完源码,我已经在必要的地方做了中文注释。源码中命名也被我改了,目的是更好的理解源码,见名知意。当然,自定义View

2016-05-18 18:02:33 2914 1

原创 UniversalImageLoader源码解读07-内存泄漏和bug

UIL使用单例模式 private volatile static ImageLoader instance; /** Returns singleton class instance */ public static ImageLoader getInstance() { if (instance == null) { synchronized (ImageLoader.cl

2016-05-12 14:43:09 1544

原创 UniversalImageLoader源码解读06-任务调度

在介绍了一些基本组件后,我们越来越接近核心逻辑,任务调度设计一些数据结构,这些数据结构决定了任务如何调度。    在开始之前,笔者建议如果读者还不知道ReentrantLock Condition如何使用,建议先查一下,否则理解线程如何调度有些困难    双端队列:既可以当栈使用,又可以当做队列使用, LIFO LIFO两种    框架使用的接口/** * I

2016-05-12 09:27:40 1043

原创 UniversalImageLoader源码解读05-磁盘缓存

磁盘缓存对于UniversalImageloader也是至关重要的,我们总不能每次显示图片都要去网络获取吧,即使有内存缓存,当重启手机,或者内存缓存被清理,那么还是要从网络上去获取,这就是磁盘缓存的意义。     框架中对于磁盘缓存的抽象是DiskCache ,我们先看一下定义:public interface DiskCache { /** * 返回缓存文件夹 */ File

2016-05-11 19:28:58 787

原创 UniversalImageLoader源码解读04-内存缓存

写到这里,我们越来越接近UniversalImageLoader的核心的,内存缓存和磁盘缓存是它的主要功能, 此外还有调度功能,也是很重要的一部分在com.nostra13.universalimageloader.cache.memory 包和com.nostra13.universalimageloader.cache.memory.impl 下核心接口:public in

2016-05-11 18:40:31 898

原创 UniversalImageLoader源码解读03-一些无关紧要的小类

在继续向下解读源码之前,我想介绍一下一些无关紧要的小类,这些类对于理解源码的主干帮助并不大,但是,了解这些类做到心中有数,对于源码的阅读速度是至关重要的。笔者就是通过阅读这些无关紧要的小类开始,逐步深入到主干。1,一些listener ,在com.nostra13.universalimageloader.core.listener包下, 主要的作用是监听图片的加载,以及控制图片的加载如果

2016-05-11 18:04:16 609

原创 UniversalImageLoader源码解读02-图片处理和显示

好了,有了ImageAware,我们知道是谁包装了我们的ImageView, 图片在哪里显示,现在我们把目光转向Bitmap的处理。    BitmapProcessor, 这个接口非常简单,只有一个方法Bitmap process(Bitmap bitmap); 可惜的是,框架并没有给我们提供默认实现,我们需要自己实现。比如我们想在图片的右下角加个水印,或者将图片变成灰度图,或者做个高斯

2016-05-11 17:09:17 1027

原创 UniversalImageLoader源码解读01-用来显示图片的ImageAware

Android平台下有一个著名的图片加载框架叫UniversalImageLoader,这个框架经过几次重构才有今天,有良好的扩展性。如果你曾经在ListView中加载图片出现过图片错乱,如果你曾经因加载图片过多而遇到OOM,那么你应该考虑使用UniversalImageLoader了。    UniversalImageLoader支持二级缓存,内存+磁盘缓存,图片一旦从网络下载后会

2016-05-11 16:02:22 1930

使用LiveData的MVP模式Demo

使用LiveData的MVP模式Demo,解决了传统MVP模式接口爆炸的问题,新的MVP设计模式耦合性更低,不强制用户必须实现大量接口

2018-07-04

基于LiveData的MVP设计模式Demo

基于LiveData的MVP设计模式Demo,没有大量的接口,业务逻辑给予状态机,而状态是被观察的对象,在观察者里更新UI

2018-07-04

Android使用ffmpeg和MediaCodec解码h265裸流(没解码的代码))

具有硬解的能力,但是需要android 4.1以上才能支持。 这个demo主要是测试硬解和软解h265裸流的能力,有一些手机可能不支持硬解,因此硬解和软解的效率是大致相当的。硬解H265使用的是MediaCodec+ffmpeg方案,ffmepg负责拆包,MediaCodec负责解码和渲染,祝你愉快

2017-03-31

空空如也

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

TA关注的人

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