yhao的博客

最怕庸碌无为,还安慰自己平凡可贵

排序:
默认
按更新时间
按访问量

再见 2017,你好 2018

觉得有必要写一份年终总结,审视一下过去,规划一下未来。敲完上面这句话,发现用到了两个“一下”,有点累赘,重新组织一下语言吧,可就在重新组织的过程中,突然就不想写了,我想做的是总结,不是写诗,不想咬文嚼字。敲完上面这句话,考虑自己是不是有点浮躁,一句话都懒得修改,爱咋咋地吧,这篇非技术文章就来一次真...

2017-12-19 00:17:27

阅读数:734

评论数:3

Android 集成 FFmpeg (三) 获取 FFmpeg 执行进度

在以命令方式调用 FFmpeg 的时候,可能会执行一些比较耗时的任务,这时如果没有进度展示,用户可能会以为程序崩溃了,体验十分不好.能不能在以命令方式调用 FFmpeg 时实时获取执行进度呢?谷歌关键词 "Android FFmpeg 命令" 可以得到很多教程,但加上关键词 &...

2017-12-17 22:03:26

阅读数:1176

评论数:2

Android 应用内悬浮控件实践总结

在工作中遇到一个需求,需要在整个应用的上层悬浮显示控件,目标效果如下图:首先想到的是申请悬浮窗权限,OK~ 打开搜索引擎,映入眼帘的并不是如何申请,而是“Android 悬浮窗权限各机型各系统适配大全、Android 绕过权限显示悬浮窗…”,为什么悬浮窗权限会有这么多坑呢?悬浮窗可以在桌面显示,被...

2017-11-16 19:33:11

阅读数:6410

评论数:43

一款纯 Kotlin 编写的开源安卓应用 "Smile"

我从对 Kotlin 一窍不通,到完整开发出此 App,共用了 9 天,其中有 4 天只在晚上开发,也就是说共计 5 天 + 4 个晚上。另外由于我对 ui 的挑剔,主题色的挑选及 logo 设计至少占去五分之一的时间。我并不是在炫耀我的自学能力,Smile 的内容并不算多,肯定有很多大牛比我快,...

2017-09-11 21:16:49

阅读数:3609

评论数:8

一句代码搞定 RecycleView 侧滑菜单、添加头部底部、加载更多

在动手打造史上最简单的 Recycleview 侧滑菜单中,萌生了将这种方案封装为一个开源库的想法,旨在实现调用方式最简单,且又不失可定制性。本库最大的特点的是采用了 Glide 简洁明了的链式调用方式,一句代码即可添加侧滑菜单、头部底部等。

2017-09-08 10:14:35

阅读数:4040

评论数:38

Android 集成 FFmpeg (二) 以命令方式调用 FFmpeg

网上教程实现 FFmpeg 内部日志输出到 logcat 的并不多,但这一步是十分有必要的。很多教程中需要将 ffmpeg 中的 main 方法名字修改为 "run" 、"exec" 等等,其实完全没必要,为什么要对方法名这么在意,乃至不惜徒增新手学习的复杂...

2017-08-29 12:00:50

阅读数:6444

评论数:35

动手打造史上最简单的 Recycleview 侧滑菜单

Recycleview 侧滑菜单大多的实现思路是:通过自定义 Recycleview 或 Adapter 提供创建菜单方法,然后内部再关联到各个 item 改变其布局,从而使 item 具有侧滑功能,优点是使用简单,但是不够灵活,比如开始提到的三个局限性。本文实现方法直接在 item 布局中进行设...

2017-08-19 11:27:06

阅读数:42521

评论数:35

Android 集成 FFmpeg (一) 基础知识及简单调用

本系列第二篇:Android 集成 FFmpeg (二) 以命令方式调用 FFmpeg 前言 网上关于 Android 集成 FFmpeg 的文章很多,但大多数都只介绍了步骤,没有说明背后的原理,若之前没有集成底层库的经验,那就会“神知无知”的走一步看一步,出错几率很大,出错了也不知道原因...

2017-08-12 23:28:19

阅读数:12510

评论数:19

全面掌握 Java 内部类

一直以来以为自己对 java 基础甚是清楚,然而面试时却连内部类和静态内部类的区别都无法回答圆满,so~重新学习一遍,彻底掌握内部类。内部类是一种非常有用的特性,它可以把一些逻辑相关的类组织在一起,并控制位于内部的类的可视性,下文中内部类均指非静态内部类。内部类的学习分为以下10个知识点: 1.创...

2017-05-24 16:20:16

阅读数:2791

评论数:0

Ubuntu16.04 Caffe 安装步骤记录(超详尽)

历时一周终于在 ubuntu16.04 系统成功安装 caffe 并编译,网上有很多教程,但是某些步骤并没有讲解详尽,导致配置过程总是出现各种各样匪夷所思的问题,尤其对于新手而言更是欲哭无泪,在我饱受折磨后决定把安装步骤记录下来,尽量详尽清楚明白,避免后来小白重蹈覆辙。安装硬件: intel i5...

2017-05-19 19:09:11

阅读数:78968

评论数:146

Android 带你彻底理解 Window 和 WindowManager

任何 View 都是附属在一个 Window 上面的,Window 表示一个窗口的概念,也是一个抽象的概念,Window 并不是实际存在的,它是以 View 的形式存在的。WindowManager 是外界也就是我们访问 Window 的入口,Window 的具体实现位于 WindowManage...

2017-04-05 23:31:39

阅读数:24390

评论数:28

Android 基于TCP的 Socket 编程实现(结合 okio)

两个进程如果要进行通讯最基本的一个前提就是能够唯一的标识一个进程,在本地进程通讯中我们可以使用 PID 来唯一标识一个进程,但 PID 只在本地是唯一的,网络中两个进程 PID 冲突几率很大,这时我们就需要通过其他手段来唯一标识网络中的进程了,我们知道 IP 层的 ip 地址可以唯一标示主机,而 ...

2017-03-31 16:35:17

阅读数:13390

评论数:3

DataBinding 与 mvvm 模式(二)其他类型数据绑定

本文介绍绑定颜色数据、绑定本地图片资源以及绑定网络图片三个案例,对于除了文本类型数据之外的其他类型数据,我们可以通过改造 getXxx 和 @BindingAdapter 注解两种方法实现绑定,推荐使用 @BindingAdapter 注解方式,因为它更加灵活易用。当然实际开发中会涉及到 List...

2017-03-29 21:01:57

阅读数:1622

评论数:0

DataBinding 与 mvvm 模式(一)文本类型数据绑定

Google 说:世界上已经31个 findViewById 的插件了,不过 Google 推出了最后一个那就是 DataBinding。数据绑定的主创甚至说了:我们发布得太晚了,这个东西应该在7,8年前我们发布 Android 的时候就推出的。所以,还在犹豫什么呢?快在你的项目中使用起来吧!

2017-03-29 16:17:31

阅读数:1608

评论数:0

由Android属性动画原理联想到DataBinding

看到这个标题的时候你可能会有疑问,属性动画和 DataBinding 之间有什么关系?我个人理解的是:它们内部的实现思想有相似之处。这篇文章主要对 Android 属性动画的知识通过文字进行整理记录,内容参考于《Android开发艺术探索》,在最后会给出我如此理解属性动画和 DataBinding...

2017-03-22 21:35:35

阅读数:1022

评论数:0

自定义View的套路

自定义View是综合的技术体系,它涉及View的层级结构、事件分发机制和View的工作原理等技术细节。自定义View的分类1.继承View重写onDraw方法 这种方法主要用于实现一些不规则的效果,需要通过绘制的方式实现,即重写onDraw方法,采用这种方式需要自己支持wrap_content,...

2017-03-13 21:33:57

阅读数:1878

评论数:3

事件分发机制与滑动冲突

在界面中内外两层同时可以滑动,就产生了滑动冲突,如何解决滑动冲突呢?其实这是一件非常简单的事,因为滑动冲突的解决有固定的套路,只要知道了这个固定套路,问题就十分容易解决了。常见的滑动冲突场景可分为以下三种:场景1:外部滑动方向和内部滑动方向不一致 ViewPager和Fragment组成的页面中...

2017-03-12 21:13:43

阅读数:989

评论数:0

Android网页爬虫

静态页面 需求:获取http://blog.csdn.net/yhaolpz?viewmode=contents页面的title 首先通过okhttp以get方式请求页面: final String url = "http://blog.csdn.net/yhaolpz?vie...

2017-03-03 17:34:33

阅读数:3585

评论数:0

Okio源码分析

square在开源社区的贡献是卓越的,这里是square在Android领域贡献的开源项目。1. okio概念 okio是一个由square公司开发的开源库,它弥补了Java.io和java.nio的不足,能够更方便快速的读取、存储和处理数据。 okio有自己的流类型Source和Sink,对应于...

2017-02-16 17:24:54

阅读数:9149

评论数:1

ListView(2)SimpleAdapter与SimpleCursorAdapter详解

SimpleAdapter官方定义: An easy adapter to map static data to views defined in an XML file. 一个简单的适配器,将静态数据映射到一个XML文件中定义的视图。 上面定义有两点引起了我的注意:简单、静态数据。我...

2016-06-11 19:14:31

阅读数:6766

评论数:12

ListView(1)控件架构与ArrayAdapter详解

ListView是Android开发中比较常用的一个组件,它以列表的形式展示信息,并能根据信息的长度自适应显示。比如说我们手机里的通讯录就用到了ListView显示联系人信息。在大量的场合下,我们都需要使用这个控件。虽然在Android 5.0时代,RecyclerView在很多地方都在逐渐取代L...

2016-06-10 23:56:33

阅读数:5157

评论数:0

Java中的反射机制

在我的上篇文章模拟JDK动态代理实现中涉及到了反射机制,学无止境,在此系统的学习一下Java中的反射机制。首先给出Java反射机制的定义: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以...

2016-06-03 12:50:49

阅读数:8132

评论数:1

模拟JDK动态代理实现

JDK动态代理 在JDK1.3以后提供了动态代理的技术,允许开发者在运行期创建接口的代理实例。在Sun刚推出动态代理时,还很难想象它有多大的实际用途,现在动态代理是实现AOP的绝好底层技术。 JDK的动态代理主要涉及java.lang.reflect包中的两个类:Proxy和Invocatio...

2016-06-01 19:46:37

阅读数:7966

评论数:0

与接口相关的设计模式(2):代理模式、标识类型模式及常量接口模式

在上文 与接口相关的设计模式(1) 中,详细介绍了定制服务模式和适配器模式,下面我们来看第三种与接口相关的模式:代理模式。代理模式定义:为对象提供一种代理,以控制对这个对象的访问。分类: 远程代理(Remote Proxy)—为不同地理的对象提供局域网代表对象。(类似于客户端和服务器端) 虚拟代理...

2016-05-23 22:01:24

阅读数:7137

评论数:0

与接口相关的设计模式(1):定制服务模式和适配器模式详解

在Java中我们通常把接口作为系统与外界交互的窗口,接下来我们来考虑以下问题: 如何设计接口? 当两个系统之间接口不匹配时,如何处理? 但系统A无法便捷的引用系统B的接口的实现类实例时,如何处理? …… 为了解决以上问题,需要引入与接口相关的设计模式,接下来介绍定制服务模式、适配器模式、默...

2016-05-20 20:16:19

阅读数:1569

评论数:0

整数类型变量赋值与码制

如果一个整数值在某种整数类型的取值范围内,就可以把它直接赋给这种类型的变量,否则必须进行强制类型的转换。例如整数66在byte类型的取值范围(-128~127)内,因此可以把它直接赋给byte类型变量。byte b = 66;但是如果不在byte类型的取值范围(-128~127)内,则必须进行强制...

2016-05-13 21:22:45

阅读数:2627

评论数:0

Java设计模式之创建型模式

单例模式 应用场合: 在一个JVM中,该对象只需有一个实例存在 特点: 对于创建频繁的大型对象可以降低系统开销 减轻GC压力(Garbage collection) 安全(核心交易引擎) 实现方式: 加载类时直接创建类的实例(性能提前消耗 浪费) public class S...

2016-05-12 16:11:07

阅读数:2672

评论数:0

Android 定位服务(Location-Based Services)

Android定位服务融合了GPS定位、移动通信、导航等多种技术,提供与空间位置相关的综合应用服务。近些年来,基于位置的服务发展更为迅速,涉及商务、医疗、工作和生活的各个方面,为用户提供定位、追踪和敏感区域警告等一系列服务。 Android平台支持提供位置服务的API,在开发过程中主要使用Loc...

2016-05-08 18:47:11

阅读数:10491

评论数:1

android 远程服务传递自定义数据类型

在Android系统中,进程间传递的数据包括Java语言支持的基本数据类型和用户自定义的数据类型,为了使数据能够穿越进程边界,所有数据都必须是“可打包”。对于Java语言的基本数据类型,打包过程是自动完成的。但对于自定义的数据类型,用户需要实现Parcelable接口,使自定义的数据类型能够转换为...

2016-05-07 20:52:25

阅读数:2706

评论数:2

Android Service 远程服务

/* * 这个文件是自动生成的。不要修改 */ package com.example.remotemathservicedemo; /* 在这里声明任何非默认类型 所有使用AIDL建立的接口都必须继承 android.os.IInterface 基类接口 这个基类接口...

2016-05-07 17:01:18

阅读数:6126

评论数:4

Android Service 后台服务之本地服务

Service是Android系统的服务组件,适用于开发没有用户界面且长时间在后台运行的功能 - Service简介 因为手机硬件性能和屏幕尺寸的限制,通常Android系统仅允许一个应用程序处于激活状态并显示在手机屏幕上,而暂停其他处于未激活状态的程序。因此,Android系...

2016-05-07 15:53:58

阅读数:3236

评论数:0

Android ContentProvider 完全解析及简单DEMO

Android应用程序运行在不同的进程空间中,因此不同应用程序的数据是不能够直接访问的。为了增强程序之间的数据共享能力,Android系统提供了像SharedPreferences这类简单的跨越程序边界的访问方法,但这些方法都存在一定的局限性。 ContentProvider(数据提供者)是应...

2016-05-03 14:48:06

阅读数:16119

评论数:6

Android 6.0 SecurityException: Permission Denial

在写一个群发短信APP时涉及到获取系统的联系人信息,添加联系人的事件为下:mBtAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(Vie...

2016-05-01 13:56:00

阅读数:10372

评论数:1

Intent发送广播消息

Intent的另一种用途是发送广播消息,应用程序和Android系统都可以使用Intent发送广播消息,广播消息的内容是可以与应用程序密切相关的数据信息,也可以是Android的系统信息,例如网络连接变化、电池电量变化、接收的短信或系统设置变化等。如果应用程序注册了BroadcastReceive...

2016-04-29 12:16:12

阅读数:4096

评论数:0

Intent过滤器

隐式启动Activity时,并没有在Intent中指明Acitivity所在的类,因此,Android系统一定存在某种匹配机制,使Android系统能够根据Intent中的数据信息,找到需要启动的Activity。这种匹配机制是依靠Android系统中的Intent过滤器(Intent Filte...

2016-04-29 08:38:06

阅读数:1549

评论数:0

Java中的多线程与同步

一、进程与线程          进程是可并发执行的程序在一个数据集上的一次执行过程,它是系统进行资源分配的基本单位。          线程为进程所有,作为调度执行的基本单位,一个进程可以有一个或多个线程,他们共享所属进程所拥有的资源。 二、为什么要引入进程与线程         要探索这个...

2016-04-24 11:38:06

阅读数:3749

评论数:0

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