自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

jsyjst的博客

人生就像一盒巧克力,你永远不知道下一颗是什么味道!

  • 博客(48)
  • 收藏
  • 关注

原创 Android之NDK开发入门

注意:本文操作环境为mac,Android Studio版本3.5前言NDK全称Native Development Kit,是Android的一个工具开发包,能够快速开发C,C++的动态库,并自动将so和应用打包成APK。而NDK的使用场景就是通过NDK在Android中使用JNI,那么JNI又是啥呢?JNI全称是Java Native Interface,即Java的本地接口,JNI可以使得Java与C,C++语言进行交互。这么一来,通过NDK和JNI,就可以很方便的在Android的开发环境中.

2020-05-11 14:21:51 7175 2

原创 ijkplayer的编译和使用

前言ijkplayer是一个基于FFmpeg的轻量级Android/iOS视频播放器。是一个很优秀的库,但是如果要使用它并不是那么的简单。首先要对ijkplayer进行编译后才能使用。因此下面将分享自己从编译到使用的整个过程,如果有错误欢迎在评论区指出!一、下载并配置Ubuntu虚拟机根据下面的安装教程,安装Ubuntu虚拟机温馨提示:在安装过程中为虚拟机分配内存时,最好选择4GB,...

2020-03-31 17:49:14 2402

原创 Java集合之HashMap 1.8 源码解析

本文源码基于HashMap 1.8,下载地址:Java 8另外本文不分析红黑树相关的源码前言在对HashMap进行源码解析前,我们很有必要搞清楚下面这几个名词,这对于下文的阅读有很大的帮助。哈希表:这里指的就是HashMap哈希桶:HashMap的底层数据结构,即数组链表:哈希桶的下标装的就是链表节点:链表上的节点就是哈希表上的元素哈希表的容量:元素的总个数哈希桶的容量:数...

2019-12-06 15:56:23 914

原创 OkHttp 3.14.x 源码解析-拦截器

本文OkHttp源码基于3.14.x,版本下载地址:okHttp 3.14.x前言上一篇文章OkHttp 3.14.x 源码解析-执行流程我们分析了OKHttp的整体执行流程,也从中提到了OKHttp会调用各拦截器来获取响应数据,但是并没有展开来讲,所以这篇文章我们将来详细分析各个拦截器的职责。从上篇文章我们知道OKHttp有七大拦截器,按添加顺序为:应用拦截器:可在构造okHttp...

2019-11-19 21:10:00 898

原创 MD5算法全解析

前言这段时间刚好正在做软件安全的实验和课设,学习了各种加密算法,比如对称加密算法的DES,AES;非对称加密算法的RSA,再如今天要讲的主角-单向加密算法的MD5。为什么这么多算法,MD5成为了今天的猪脚呢?,这是因为个人感觉在目前Android开发中MD5算是比较常用的,所以很值得一讲。所以今天让我带你们来全面认识我们的主角MD5。一、基本概念1. 单向加密算法在介绍MD5算法前,很有必...

2019-11-13 15:48:38 4109 4

原创 View的工作原理

文章中出现的源码均基于8.0一、知识储备1. ViewGroup.LayoutParams作用: 指定View的高度(height)和宽度(width)等布局参数,用来子视图向父视图传达自己意愿的一个东西具体使用:参数说明fill_parent强制性使子视图的大小扩展到父视图大小相等(不含padding),现在几乎不怎么使用match_parent与fi...

2019-11-04 10:06:20 952

原创 OkHttp 3.14.x 源码解析-执行流程

本文OkHttp源码基于3.14.x,版本下载地址:okHttp 3.14.x前言OkHttp是一个非常优秀的网络请求框架,使用方便,操作简单,并且目前比较流行的Retrofit也是默认使用OkHttp。因此从源码深入理解OkHttp是非常有必要的。故今天这篇首先将介绍OkHttp请求的执行流程。另外由于OkHttp从4.x版本开始使用Kotlin来编写,因此今天的源码解析是基于Java版...

2019-10-30 17:34:02 654

原创 Glide 4.9源码解析-缓存策略

本文Glide源码基于4.9,版本下载地址如下:Glide 4.9前言在分析了Glide的图片加载流程后,更加发觉到Glide的强大,于是这篇文章将继续深入分析Glide的缓存策略。不过今天的文章的源码很多基于上一篇加载流程的基础之上,因此还没有看上一篇的小伙伴,建议先去阅读Glide4.9源码解析-图片加载流程效果会更佳哟!一、设计1. 二级缓存内存缓存:基于LruCache和弱...

2019-10-24 15:52:20 493

原创 Glide 4.9源码解析-图片加载流程

本文Glide源码基于4.9,版本下载地址如下:Glide 4.9前言由于Glide源码真的很复杂,因此本文只分析和贴出与图片加载流程相关的功能以及代码。另外本文Glide源码基于4.9,与3.x的源码还是存在差异的,但是整体流程变化不大。对于Glide这个强大的Android图片加载开源框架,相信大家并不陌生吧,反正笔者的话,正常项目中用的图片加载框架大多数都是它,因为用起来真的很...

2019-10-18 16:31:10 604 1

原创 2019最新QQ音乐Api

下面的请求中如果参数有songmid,都是得经过搜索歌曲或歌手后才能获得songmid,然后进行请求。不能获取到qq音乐的vip或者付费歌曲的播放地址,Api是通过fiddler4爬取网页端qq音乐获取的,如失效,请在评论指出前言最近重构了自己的安卓版的音乐播放器,主要是因为之前使用的音乐相关Api都失效了,索性自己来找Api,于是利用fiddler4爬取网页端qq音乐获取到了项目所需要的...

2019-10-09 12:48:08 16447 26

原创 Android自定义View-简约风歌词控件

前言最近重构了之前的音乐播放器(音乐播放器的源码地址在文章底部),添加了许多功能,比如歌词,下载功能等。这篇文章就让我们聊聊歌词控件的实现(歌词控件也已经开源,地址也在文章底部),先上效果图,如果感觉海星,就继续瞧下去!看到这里,估计你对这个控件还有点感兴趣的吧,那接下来就让我们来瞧瞧实现这个歌词控件需要做些什么!(如果想直接使用就直接点击文末中的开源库地址,里面会有添加依赖库的说明)一、...

2019-10-09 00:00:30 1486

原创 Android之9.0Activity启动流程(二)

注:下列源码均基于9.0,可通过下列方式下载本文相关源码到本地:git clone https://aosp.tuna.tsinghua.edu.cn/platform/frameworks/base参考博客:如何下载和阅读Android源码前言在上一篇文章Android之9.0Actvitiy启动流程(一)中我们已经分析了根Activity启动时所需的应用进程是如何创建的,并且当...

2019-08-23 10:34:40 1630 5

原创 Android之9.0Activity启动流程(一)

注:下列源码均基于8.0,可通过下列方式下载本文相关源码到本地:git clone https://aosp.tuna.tsinghua.edu.cn/platform/packages/apps/Launcher3git clone https://aosp.tuna.tsinghua.edu.cn/platform/frameworks/base参考博客:Android 8.0 :...

2019-08-06 17:21:46 2634 3

原创 Android之Handler机制

注:下列所涉及的源码均基于8.01. 背景经历过开发的我们应该都知道当有耗时操作,比如网络请求等的时候要开启线程,在子线程中进行耗时操作,然后耗时操作完后返回到主线程进行UI更新操作。这时候你可能会有疑问了,为什么不能再子线程中操作UI呢?其实这是因为Android的UI控件并不是线程安全的,这就意味着如果子线程能够操作UI的话,就很可能出现多线程并发操作UI导致UI控件出现各种未知的错误...

2019-08-01 21:35:54 779

原创 Android之事件分发机制

文章中出现的源码均基于8.0一、View的事件分发机制1. 基本认识1.1 事件分发的本质将点击事件(MotionEvent)传递到某个具体的View处理的整个过程1.2 事件分发的对象点击事件(Touch事件):当用户触摸屏幕时,将产生点击事件事件类型:类型说明MotionEvent.ACTION_DOWN手指刚接触屏幕,一般为事件的开始Motio...

2019-07-30 14:00:27 833

原创 JVM之垃圾收集器

1、概述垃圾收集器(Garbage Collection),大部分我们都喜欢称之为GC。GC的职责主要围绕三个问题:哪些内存需要回收什么时候回收如何回收在Java中GC是系统自动完成的,并且在Java中GC只关注Java堆和方法区,因为在这两个区域只有在程序运行期间才知道创建了哪些对象,内存分配和回收都是动态的。而Java虚拟机栈,程序计数器,本地方法栈这几个区域由于内存分配和回收都...

2019-07-23 16:33:02 150

原创 JVM之内存区域

一、运行时数据区域1. 程序计数器当前线程所执行的字节码的行号指示器。每个线程都有一个独立的程序计数器,各计数器互不影响,独立存储,从而实现线程切换后能够恢复到原来的位置。如果线程执行Java方法,则计数器记录正在执行的字节码指令地址,若是native方法,则为空。唯一一个没有任何OutOfMemoryError情况的区域2. Java虚拟机栈描述Java方法执行的内存模型。在每个方法...

2019-07-22 21:54:37 122

原创 Android之Binder机制

1. 简介Binder,中文即粘合剂,意思是粘合了两个不同的进程。从IPC角度来说,Binder是Android中的一种跨进程通信方式。2. 基础概念介绍2.1 进程隔离&跨进程通信进程隔离:为了保证安全性和独立性,一般情况下,一个进程不能直接操作或访问另外一个进程。即Android中的进程是相互隔离,独立的进程通信:即IPC,不同进程需要进行数据的交互和通信2.2 内核空...

2019-07-09 17:27:34 254

原创 AlertDialog源码解析

注:下列源码版本为8.0AlertDialog的使用首先回顾下AlertDialog简单使用方法。设置图片,标题,内容,确认和取消按钮,最后调用show()显示出来。 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.mipmap.ic_launche...

2019-07-03 22:11:55 611

原创 Activity的启动模式

任务栈在谈启动模式之前,让我们来了解下什么是任务栈?其实Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈就是任务栈,也被称为返回栈。当一个App启动时,如果当前环境不存在该App的任务栈,那么系统就会创建这个任务栈,此后,这个App所启动的Activity都将在这个任务栈中被管理。值得一提的是,一个任务栈中的Activity可以来自不同的App,...

2019-05-08 11:59:03 273

原创 Activity的生命周期分析

典型的生命周期的分析Activity生命周期是指一个Activity从创建到销毁的全过程。下图是Activity经典的生命周期模型。生命周期的四种状态运行状态:当一个活动位于返回栈的栈顶时,这时活动就位于运行状态。系统最不愿意回收的就是处于运行状态的活动。暂停状态:当一个活动不再位于栈的栈顶时,但仍然可见时,这时活动就进入了暂停状态。比如对话框形式的活动。处于暂停的活动仍然是完全存活的...

2019-05-06 13:42:10 378

原创 设计模式学习 - 抽象工厂模式

抽象工厂模式介绍抽象工厂模式(Abstract Factory Pattern),也是创建型设计模式之一。抽象工厂模式源于以前对不同操作系统的图形化操作方案,对于每一个操作系统,其本身构成一个产品类,而文本和按钮控件也构成一个产品类,两种产品类两种变化,各自有自己的特性。抽象工厂模式的定义为创建一组相关或者是相互依赖的对象提供一个接口,而不需要指定他们具体类抽象工厂模式的使用场景一个对象...

2019-04-06 16:16:13 256

原创 设计模式学习-工厂方法模式

工厂方法模式介绍工厂方法模式(Factory Pattern),是创建型设计模式之一。是一种结构简单的模式,在平时开发中应用很广泛。如Android中Activity里的各个生命周期方法,以onCreate方法为例,它可以看作成一个工厂方法,我们在其中可以构造我们的view,并通过setContentView返回给framework处理。工厂方法模式的定义定义一个创建对象的接口,让子类决定实...

2019-04-06 16:13:26 137

原创 设计模式学习-单例模式

确保一个类只有一个实例,并且自行实例化并向系统提供这个实例关键点构造方法不对外开发,构造方法私有化通过一个静态方法或者枚举返回对象确保单例类的对象有且只有一个,尤其在多线程环境下反序列化时不会重新构造对象饿汉模式public class Singleton{ private static final mSingleton = new Singleton(); pr...

2019-03-24 14:05:48 115

原创 设计模式学习-Builder模式

Builder模式介绍Builder模式是一步一步创建一个复杂对象的创建型模式。该模式是为了将构造复杂对象的过程与它的部件解耦,使得构建过程和部件的表示隔离开。Builder模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示Builder模式的使用场景相同的方法,不同的执行顺序,产生不同的事件结果时。多个部件和零件,都可以装配到一个对象中,但是产生的结...

2019-03-24 14:02:22 154

转载 修改git之前已提交代码的用户名和邮箱

转:https://blog.csdn.net/hello5orld/article/details/51386218原文的link:http://dangzhiqiang.blog.51cto.com/7961271/1657864即:修改git所有commit中的用户名和email作为一名 Git 苦手,我一直使用的是傻瓜级的 Github 客户端,去年九月迁移到 OS X 后也...

2018-12-13 14:41:36 2600

原创 生活随记2

注:上星期有点忙,以后会尽量每周统一时间更博客时间:2018年11月13号周次:大二上学期第10周一周的主要事务基本上完成了招新app,基本看完《Android艺术探索》看完了村上春树的《寻羊冒险记》义教与发小聚餐体测工作室内建招新app上一周的日记有提到师兄要求我们15号之前完成招新app,今天算是基本上完成了,其实招新是下学期才招的,也行你们会纳闷,那为什么现在这么早...

2018-11-13 22:56:33 256

原创 生活随记1

注:这日记本来是想在11月4号发博客的,结果因为在有道云笔记写完后感觉有点晚了就没有马上上传到博客上,再加上上星期有点小忙,所以导致到今天才发博客,待会也会顺便把上星期的补上时间:2018年11月4号周次:大二上学期第9周感悟前端时间看了很多小巫的博客,看了很多他关于大学每周的记录,突然感悟,记录和总结真的挺重要的。看了小巫的人生感悟,觉得成功的人一定离不开努力与自律。所以我决定要向成功的...

2018-11-13 21:59:41 917 1

原创 Android中的线程池

线程池的好处重用线程池中的线程,避免线程的创建和销毁所带来的性能开销能有效控制线程池的最大并发数,避免大量的线程之间因互相抢占系统资源而导致的阻塞现象能够对线程进行简单的管理,并提供定时执行以及指定间隔循环执行等功能Android中的线程池概念来源于Java中的Executor,Executor是一个接口,真正的线程池的实现为ThreadPoolExecutor。由于Android 中...

2018-11-13 21:48:49 174

原创 Android的性能优化方法

布局优化布局优化的思想:尽量减少布局文件的层级。布局的层级少了,这就意味着Android的绘制工作量少了,那么程序的性能自然提高了。如何进行布局优化呢?删除布局中无用的控件和层级有选择地使用性能较低的ViewGroup,比如RelativeLayout。如果布局中既可以使用LinearLayout,也可以使用RelativeLayout,那么就采用LinearLayout,这是...

2018-11-13 21:42:42 175

原创 Android中的缓存策略

缓存策略的主要流程:当程序第一次从网络加载图片后,将其缓存到储存设备上,下一次就不用再次从网络上获取了。为了提高应用的用户体验,往往还会再内存中再缓存一份,这样当应用打算从网络请求一张图片时,首先从内存中读取,如果没有那就从储存设备中获取,如果储存设备也没有,那就从网络上下载这张图片。因为从内存中加载图片比储存设备加载要快,所以这样既提高程序的效率又为用户节约了不必要的流量开销。而这种缓存策略不...

2018-11-13 21:39:49 1248

原创 Bitmap的高效加载

核心思想:采用BitmapFactory.Options来加载所需尺寸的照片这里假设通过ImagView来显示图片,很多时候ImageView并 没有图片的原始尺寸大,故这时候显然没并要把整个图片加载进来。通过BitmapFactory.Options就可以按一定的采样率来加载缩小的图片,进而在ImageView中显示,这样就会降低内存占用从而在一定程度上避免OOM,提高Bitmap加载时的性能...

2018-11-13 21:35:17 204

原创 Java实现窗口退出确认框,确认框取消按钮问题

在Java学习GUI时难免会遇到点击框架退出时需要弹出确认提示框的需求,废话不多说,直接上代码,下面是主程序,MenuFrame是继承JFame的类public class Test_19 { public static void main(String[] args) { EventQueue.invokeLater(() -> { Men...

2018-10-13 17:42:47 14123 5

原创 Android 中 Bitmap 和 Drawable 相互转换简单的方法

一、Drawable 转换成 BitmapResources res = getResources();Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.ic_drawable);二、Bitmap 转换成 DrawableDrawable drawable = new BitmapDrawable(bmp);...

2018-09-09 17:47:34 9557

原创 Android顶部导航栏TabLayout+ViewPage

上一篇博客已经详细介绍了底部导航栏的实现,这篇是在上一篇的基础上加上顶部导航,不懂的可以看我的上一篇博客。地址如下:Android底部导航实现的简便方法RadioGroup+Fragment:https://mp.csdn.net/mdeditor/82504849因为很多app都是底部导航和顶部导航嵌套使用,所以现在我讲的也是在上一篇博客的代码基础下,在底部导航的Fragment...

2018-09-09 17:36:28 11792 15

原创 Android底部导航实现的简便方法RadioGroup+Fragment

底部导航栏RadioGroup+Fragemt(界面不能滑动切换,只能点击)1.首先在drawable中新建选择器selector文件,在drawable右键点击New->Drawable Resourse File,分别创建文字颜色选择器selector_text,和另外四个图片选择器selector_home_drawable,selector_phone_drawable,se...

2018-09-08 00:26:19 5345 15

原创 Eclipse中文注释字体变大方法

之前写java用的都是Intellj Idea,界面和使用都挺简便的,但由于上机课统一使用的是Eclipse,故下午的时候就下载了最新的Eclicpse,默认的代码字体都是比较小的,故可以用以下方法来设置解决办法:Window –> Preferences –> General –> Appearance –> Colors and Fonts –> Basic ...

2018-09-07 23:04:57 5901 5

转载 Serializable 序列化和反序列化的概念

转载于:https://blog.csdn.net/qq_27093465/article/details/78544505遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题a,什么叫序列化和反序列化b,作用。为啥要实现这个 Serializable 接口,也就是为啥要序列化c,serialVersionUID 这个的值到底是在怎么设置的,有什么用。有...

2018-09-06 20:40:10 535

原创 java获取当前日期是星期几的简便方法

使用SimpleDateFormat格式化日期Date date=new Date();SimpleDateFormat dateFm = new SimpleDateFormat("EEEE");dateFm.format(date);注:格式化字符串存在区分大小写 对于创建SimpleDateFormat传入的参数:EEEE代表星期,如“星期四”;MMMM代表中文月份,如“...

2018-09-06 20:35:04 3504

原创 Java:Date与String类型的互转

SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。 根据上面的的“日期和时间模式”,设定需要匹配的模式,可以实现String与Date类型的互转,例如:String类型的时间转换成Date类型时间,比较常用的几种时间格式转换如下:...

2018-09-06 20:29:52 151

空空如也

空空如也

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

TA关注的人

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