自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 资源 (1)
  • 收藏
  • 关注

原创 Android8.1源码编译

编译须知:1.本次编译平台Ubuntu18.04。使用的虚拟机来完成的源码编译,本次编译的是android8.1版本。2.虚拟机的虚拟硬盘最好在150g以上,我的虚拟中分配了268g内存,只安装了Android编译需要的库,编译完Android磁盘占用54%,环境搭建1.安装虚拟机Ubuntut虚拟机,为了方便查找编译过程中的资料,我选择了Ubuntu18.4的版本ubu...

2019-07-02 23:23:04 4155

原创 五分钟学习---kotlin在Android中的使用。

五分钟学习---kotlin在Android中的使用。扩展函数:展示和影藏view。fun View.show(){ this.visibility = View.VISIBLE}​fun View.hide() { this.visibility = View.INVISIBLE}​fun View.remove(){ this.visibility = View.GONE}view.show()view.hide() view.remove()​...

2021-06-28 08:21:33 375

原创 五分钟学习kotlin-基本特性

关键字lateinit :延迟初始化 lateinit var a : String a = "hello" println(" lateinit a = $a");单一抽象方法,可以使用lambda表达式,无需重写方法,直接在大括号中写对应的实现即可。​fun interface SayHello{ fun say(str:String):String}fun testSam(){ //普通写法 var str = object : ...

2021-06-27 22:07:23 182

原创 网页转pdf

(function () { function removeClass(str) { var paras = document.getElementsByClassName(str); for (i = 0; i < paras.length; i++) { if (paras[i] != null) { paras[i].parentNode.removeChild(paras[i]); } } } function ..

2021-06-14 12:52:21 193

原创 我的mvvm学习

mvc:- View:XML布局文件。-Model:实体模型(数据的获取、存储、数据状态变化)。- Controller:对应于Activity,处理数据、业务和UI。缺点:view表现力比差,activity会承担一些view和controller的角色。导致代码臃肿。MVPView: 对应于Activity和XML,负责View的绘制以及与用户的交互。Model: 依然是实体模型。Presenter: 负责完成View与Model间的交互和业务逻辑。优点:解...

2020-09-15 08:30:06 163

原创 喊得乐的知识点图

handler知识点概览阻塞唤醒的过程基本上时底层来实现的,不用纠结太细。

2020-09-14 08:52:26 86

原创 宝藏库

1.https://www.jianshu.com/u/7f26e9b137312.http://gityuan.com/archive/

2020-04-16 13:06:34 9855

原创 Rxjava简要分析

Rxjava是一个可观察的异步的基于事件的库,现在已经到了3.0.1版本了本片文章会分析一下rxjava部分源码,主要看看大体的流程,不会拘泥于细节,让人对rxjava有一个基本的认识。我们都知道,Rxjava是可以链式调用的,Observable可以通过很多的操作符转化成另外一种Observable。来看一个基本的例子 。 public void testInt(){ ...

2020-04-15 08:39:57 227

原创 小问题汇总1-5

1.动态代理可以用来干什么?可以干预接口的执行方式,能够在调用时刻对方法的参数修改(运行前),或者修改方法的执行过程(运行时)。举个例子,在一次网络请求中,有一个方法中有一个回调接口,网络访问的结果都会在这个接口中传递出去,网络访问是耗时任务得开新线程,所以接口也在新线程中运行。可以通过代理,使接口在执行的时候发生在主线程,然后访问方法的参数。这样通过代理省略了线程切换功能。...

2020-04-14 16:45:16 115

原创 Retrofit基本结构

Retrofit基本问题1.retrofit的基本实现原理是什么?retrofit是基于okhppt框架封装的以套易用的网络框架,通过注解+动态代理的方式代理创建Call对象、request对象,网络请求的调用过程。其中注解主要是定义请求url,请求参数。代理的过程也可以自定义,自己实现CallAdapterFactory就行了。返回结果参数可以自定义,自己实现ConverFactory就...

2020-04-09 21:16:35 272

原创 pluantUML的使用

找到了两个比较详细的教程类图:https://www.cnblogs.com/Jeson2016/p/6837017.html时序图:https://blog.csdn.net/zh_weir/article/details/72675013

2020-04-04 16:27:46 236

原创 Okhttp结构解析

okhttp是一个老牌的网络请求框架,这里是它的官网地址具体的使用方法也可以参考官网地址​​​​​​​官网说默认的http客户端他有下面几个特点HTTP / 2支持允许对同一主机的所有请求共享一个套接字。 连接池可减少请求延迟(如果HTTP / 2不可用)。 透明的GZIP缩小了下载大小。 响应缓存可以完全避免网络重复请求。今天就来看看什么个它。首先还是来看看它的整体架...

2020-04-04 00:39:56 429 1

原创 Volley结构解析

Volley是google官方发布一个网络请求框架。它具有高效并发,易扩展的特点。首先我们来看一下总体的设计图。构建RequestQueue时,会调用它的start()方法,默认开启了一个缓存请求派发器,和4个网络请求派发器分别来处理RequestQueue中的缓存队列mCacheQueu和网络请求队列(mNetworkQueue)中的请求数据。以上的这两类个派发器会一直轮询缓存队列和网络...

2020-03-31 14:52:49 205

原创 应用层的binder

java服务框架构成。java层ipc调用使用aidl进行跨进程通讯极大的简化了应用层的开发流程。阅读完《Android框架揭秘》的7、8两章,可以提高对binder的认知。再来看aidl的生成文件就容易多了。...

2020-03-26 17:15:36 137

原创 binder通讯过程

这一个过程在《android框架解密》中有细致的讲解。binder中设计到的类如下图所示。Binder服务中的类结构图可以看到从RefBase中派生下来重要有三类,- IBinder系,是Android中binder抽象数据结构,负责接收rpc数据和代码,生成binder节点。-ProcessState系,是一些支持binder通信的类和数据结构。- Inte...

2020-03-25 12:59:06 343

原创 Binder摘要

binder是android中的一种跨进程的通信方式通常一次跨进程调用现它包含四个对象,客户端,服务端,ServiceManager,binder驱动。其中客户端、服务端、ServiceManager都是位于不同的进程,他们都是通过binder进行跨进程调用的。原理是通过内核空间来完成代码调用、数据交换;每个进程的用户空间都有一小块内存区域映射了一个内核内存区域,通过映射用户就能够获得到...

2020-03-24 23:12:59 141

原创 Android中的类

1.主线程的looper.loop()是个死循环,为什么ui线程不会出现anr。首先,其次在ActivityThread中如果looper执行结束了,应用程序的主线程就结束。anr核心也是通过looper处理超时消息来实现的。就那广播的10s未执行完,然后出现anr这来举例。在发送广播的时候会发送一条广播消息,和一条延迟的广播超时消息,如果广播执行完成就从messagequeue中删除...

2020-03-23 14:40:30 498

原创 Android系统启动摘要

1.Android中init进程主要做了什么事情?a.解析init.rc文件。b.根据配置文件创建属性服务和zygote进程。2.zygote进程主要做了什么事情?zygote进程是根据init.rc文件中的配置创建的。启动位置在App_main.cppa.在AndroidRuntime::start()中创建虚拟机、注册jni,并通过jni调用java类ZygoteIni...

2020-03-23 12:07:29 133

原创 计算机基础知识

1.为什么计算机进行小数运算的时候会出错?首先来看一下二进制数1011.0011转化成10进制数的方式,如下图所示。该转换方式同样适用于16进制转10进制。小数运算出错的原因在于,一些小数无法转化成2进制,比如0.1就无法用2进制表示。十进制数0.1转换成二进制后,会变成0.00011001100…(1100循环)这样的循环小数这和无法用十进制数来表示1/3是一样的道理。1...

2020-03-20 21:04:36 155

原创 操作系统哲学原理笔记

1.用户程序和操作系统又什么关系呢?操作系统为用户程序提供各种服务,用户程序通过调用操作系统提供的服务来完成任务。2.用户态和内核态用户态和内核态是cpu的状态(根据cpu中的一个标志位来判断当前状态),当cpu处于内核状态的时候能够获得更多系统的资源,而处于用户态是获得的系统资源相对较少。、操作系统对进程的管理是通过进程表来是实现的,...

2020-03-20 19:49:06 286

原创 为什么Android驱动程序不开源?

Android的底层采用的是linux kernel, linux kernel采用的是GPL(通用公共许可证)。采用GPL许可证的软件是开源的,简单讲这样的程序需要公开源码,任何人都能获得能够进行下载,修改源码,但是修改后的程序也必须采用GPL许可证,就是说不能进行私有化。linux kernel驱动程序是GPL许可证,如果google直接使用linux kernel的话,手机厂商的驱动...

2020-03-18 13:43:44 1206

原创 模板方法

模板方法在框架中常用,通常是我们编写一套完整的代码流程,然后保留几个未实现的方法,再开发的时候我们只需要重写一下预留空方法,就能得到整个的运行过程。这个就不用画uml图了举个例子再android种随处可见模板方法模式的运用,比如AsyncTask中。onPreExecute() -> doInBackgroud()->onPostExecute()这三个方法就是在Asy...

2019-12-12 23:24:02 132

原创 装饰者设计模式

装饰者设计模式的主要用是给子类增加功能,使生成的子类更加灵活。我们来看一下Android中使用的到装饰者模式,首先来看一下uml图。我们可以看到从Context派生出了很多的子类,每个子类的功能和方法都在增强。通过使用装饰者模式,可以产生更加强大的子类。在上图中核心的类是ContextWrapper类,这个类除了继承自Context之外,还保存了一个ContextImpl类的引用。...

2019-12-10 22:40:36 88

原创 策略模式

策略模式很常用,最常用的情况就是通一个接口,但是业务上会有不同的实现,这些实现会出现交叉调用的情况,如果采用一般的方式就会用很多的if来实现,这样的话代码就不漂亮、不实用。这个时候可以考虑用策略模式来实现。策略模式简单来说分为三个部分,业务接口,多个实现业务接口的类,持有业务接口的对象的环境类(上下文对象)。上下文对象可以任意的切换业务实现类,而不需要很多的if来区分具体的对象。...

2019-12-10 00:17:15 99

原创 uml插件

有些时候需要绘制uml图,并且希望能够方便的修改自己的mul图。我尝试过很多很多作图软件之后选择了PlantUML这个插件,这个插件在vscode,idea,AndroidStudio中都有,安装起来很简单。这个插件是采用编码的方式来渲染图片,只需要做一些简单的配置,就能生成一副漂亮的uml。所以很方便保存和修改,满足我的使用要求。配置方式请参考https://plantuml.com/...

2019-12-09 22:55:21 468

原创 深入理解HashMap

HashMap解析在做java开发的时候经常需要用到保存键值对的数据集合HashMap。HashMap使用起来很简单,但是它内不得实现时怎样得呢?先来看一下HashMpa得类图,和Android中的装饰着谋士座椅下对比,虽然HashMap的类图结构和Android中装饰者模式有几分相似,但是并不是装饰者模式,主要是因为AbstaractMap中没有引用到AbstractMap...

2019-12-02 22:54:59 160

原创 为什么不推荐使用Executors?

为什么不推荐使用Executors提供的生成线程池的方法呢?主要是因为这些线程池都存在内存溢出的可能。其实就是构建线程池的几个参数设置的不好,具体分析如下Executors生成线程池的方法都是调用的ThreadPoolExecutor的构造方法,只不过提供了一些默认的参数,让我们使用起来更加方便。public ThreadPoolExecutor(int corePoolSize,...

2019-11-18 23:41:57 1639

原创 Flutter后端服务搭建

使用dart搭建一个返回数据的服务器开发工具使用的是vscode,手动编写dart文件和配置文件pubspec.yaml,最大程度上减少外部代码的依赖。pubspec.yamlname: flutter_web_app_serverdescription: A new Flutter application.dependencies: http_server: ^0.9.8...

2019-11-18 08:29:53 5420

原创 android截图脚本

因为需要写操作手册,需要使用大量的app截图,但是也没有效果图可以直接使用的,如果直接用adb截图然后再导入到电脑,需要敲大量的命令,感觉很繁琐,就写了一个bat脚本,方便截图。脚本有三个部分,1.setting.txt,配置文件。2. capScreen.bat, 3.changName.jarsetting.txt中是一串json文件,{"waitModfyName":"C:\\...

2019-11-17 18:46:22 334

原创 flutter环境搭建

搭建Flutter环境flutter程序可以使用多种开发工具来开发,本着不折腾的原则,我就使用AS来搭建环境第一步就是在AS中安装Dart插件和Flutter插件。点击 File=>Settings=>Plugins, 然后依次查找并安装上面两个插件,安装完成后重启AS第二步下载并配置FlutterSDK,下载地址在这里https://flutter.dev/doc...

2019-11-13 23:11:12 98

原创 计数排序

计数排序今天看到一篇文章讲讲到计数排序和计数排序两种算法。文章写得很简洁、清晰,文章在这里计数排序计数排序的定义这里暂时去理会,这里先通过一个案例来看计数排序的原理。有一组数据,在这一组的数据中有20个整数,其中数组中每个整数都大于等于0,小于等于9,请用计数排序的方式给这组数据排序。思路: 这里直接给出实现思路,定义一个大小为10的数组,数组的角标是从0到9,对应的题目中数组...

2019-11-05 07:57:33 193

原创 Android 中NDK编程

Android 中NDK编程本篇文章主要用来解决下面几个问题什么是jni?jni适用的场景是什么?怎样开发一个jin程序?有哪些学习资料可以用?1.什么是JNI? 它的适用场景有哪些JNI 是Java Native Interface的缩写,翻译过来就是java本地接口,它是java和其他语言(通常是c\c++)沟通的桥梁。用一句大白话来讲,就是在java程序种定义一些本地接...

2019-09-11 20:28:55 238

原创 AndroidStudio生成SO文件

AndroidStudio生成SO文件生成so的方式可能有多种,这里说一种简单的方式。具体由如下三步下载配置ndk,编写java调用so的native方法;生成.h头文件夹,编写c/c++文件,编写Android.mk,Application.mk文件;编译并使用SO文件;1.下载配置NDK,编写java方法下载NDK: 在 file->settings->Androi...

2019-09-07 11:02:16 5428

原创 一些命令

1.判断apk是否签名jarsigner.exe -verbose -certs -verify /xxx/your.apk如果在gradle中配置了签名,但是生成的pak依旧是没有签名的,那就要检查一下project structure中的buildType中对应签名版本的sign config 有没有勾选相应的配置。2.git打tag//在当前提交上打taggit tag...

2019-09-03 10:37:34 101

原创 剑指offer39,数组中出现次数超过一半的数字

package com.company;public class FindNumber { public static int[] array = {1,2,3,4,2,2,2,2,0}; public static void main(String[] args){ int a = getNumber(array); System.ou...

2019-07-29 15:19:57 101

原创 查找二叉树中和为某一值的路径

package com.company;import java.util.List;import java.util.Stack;public class FindSumTree { static class BinaryTreeNode{ int value ; BinaryTreeNode left = null; B...

2019-07-17 18:09:02 218

原创 根据后续遍历判断是否是二叉搜索树

package com.company;public class CheckTree { public static int[] array = {5,7,6,9,11,10,8}; public static int[] array2 = {7,4,6,5}; public static void main(String[] args){ bo...

2019-07-17 16:25:01 158

原创 二叉树的三种遍历方式

package com.company;import java.util.Stack;public class PrintTreeNode2 { static class BinaryTreeNode{ public BinaryTreeNode(int value){ this.value = value; } ...

2019-07-15 16:45:09 113

原创 IDEA打可执行jar包

第一步先编写一个有运行界面的java程序,方便查看后期jar包是否运行。这里有一个弹框展示的代码package com.company;import javax.swing.*;public class Main { public static void main(String[] args) { int res = JOptionPane.showCon...

2019-07-11 22:46:23 152 1

原创 对称二叉树

package com.company;public class TreeMirror { static class BinaryTreeNode{ int value ; BinaryTreeNode left = null; BinaryTreeNode right = null; public Binary...

2019-07-11 13:53:32 109

changeName.jar

截图改名工具类,需要配合bat文件,以及配置文件使用,默认配置文件要放在d盘的根目录。具体看看文章就可以了。

2019-11-17

空空如也

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

TA关注的人

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