自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 资源 (31)
  • 收藏
  • 关注

原创 LeetCode 83. 删除排序链表中的重复元素

一、题目分析 && 整体思路如题所述,原题中给定的是一个排序的链表,所以它重复的元素都一定是相邻的;如果采用遍历的方式,那就可以:1、把这个链表从头到尾遍历一遍,找到相邻的重复元素节点;2、再把重复的元素节点删掉,只保留一个元素节点。二、如何删除重复节点,或者说如何在相同节点中只保留一个要保证连续多个元素相同的情况下都能适应,我们把这个题分成了两种情况:一种是连续两个元素相同的情况、另一种是连续三个元素相同的情况。1、两个元素相同当发现当前节点的值与...

2020-06-15 23:45:58 539

原创 LeetCode 203. 移除链表元素

一、题目分析与整体思路在这个示例中,给定的val值是6,就将输入链表中的所有是6的节点给删除了。整体思路:1、将这个链表从头到尾遍历;2、如果能找到值与val值相等的节点,就把该节点删除。二、删除链表节点的操作当我们遍历到需要删除的节点之后,这时候已经不能删除该节点了,所以,需要遍历到需要删除节点的前一个节点的时候,才能把这个节点删除。因为想要删除该节点,就必须对该节点前面的指针进行操作,也只有current在被删除节点前一个的时候,才能对该指针进行操作。删除...

2020-06-14 22:29:42 454

原创 Binder的基本原理

多进程有哪些优点?多进程一般在webView、图片加载、推送、闹钟之类的比较常见,还有比如在使用getSystemService获取系统服务的时候,虽然在自己写的代码中没有发现多进程,其实在内部实现中也是多进程。它们为什么需要被做成多进程的呢?1、解决手机内存问题虽然现在手机的运行内存是很大的,但是手机的APP是运行在独立的虚拟机中的,虚拟机会为每一个进程分配运行内存是有限的,一般只有32M、48M、64M,所以经常会发生一些内存不足的问题,就像加载一个大的图片,可能就直接OOM。2、其

2020-06-04 23:34:27 545

原创 Handler中Looper死循环为什么不会导致应用卡死?

ANR所产生的原因?1、5秒钟之内没有响应输入的事件,比如按键、屏幕触摸等。2、广播接收器在10秒内没有执行完毕。

2020-05-27 23:50:44 2305

原创 Handler往MessageQueue中添加数据,消息队列是怎样变化的?如何保证线程安全的?

多个Handler往MessageQueue中添加数据,其内部是如何保证线程安全的?Handler是一个线程间通信的机制,很多消息都会从子线程发送至主线程,而主线程只有一个Looper,发送的消息都被放置在MessageQueue这个队列中来,如何保证队列的混乱(如何保证线程安全)?看入队列的方法enqueueMessage: boolean enqueueMessage(Message msg, long when) { if (msg.target == null

2020-05-25 23:09:58 1481 1

原创 子线程中:new Handler需要做哪些准备?消息队列中无消息的时候,Looper的处理方案是什么?

为什么主线程可以new Handler?在ActivityThread.java里有一个main()函数,它是Android每一个应用最早执行的函数。 public static void main(String[] args) { ..... Looper.prepareMainLooper(); ActivityThread thread = new ActivityThread(); thread.attach(fa

2020-05-19 00:00:59 2201

原创 Handler内存泄漏的原因是什么?为什么其他内部类没有这个问题?

Handler为什么会内存泄漏?内部类持有了外部类的引用。 Handler handler = new Handler() { @Override public void handleMessage(Message msg) { MainActivity.this.click(); //click(); } }; public void click(){ ...

2020-05-12 23:18:32 776

原创 一个线程中有几个Handler?几个Looper?怎么保证?

一个线程中有几个Handler?N个。因为Handler可以在Activity可以new,在Service里面也可以new,而Activity全部都跑在了主线程里面,这就证明了主线程中可以有多个Handler。一个线程中有几个Looper?1个。我们来到Looper初始化的地方Looper.prepare()。 /** Initialize the curr...

2020-05-10 23:46:44 2712

原创 Handler源码流程梳理

Handler的工作流程需要搞明白Handler的流程,就是从sendMessage一直到handleMessage的过程。Handler.sendMessage()首先来看sendMessage,从图中就可以看出来,它就是把货物放到了这个传送带上来。在Handler.java这个类里面,有很多函数用来发送消息。其中send开头的就有这些:然后还有post开...

2020-05-07 22:38:01 168

原创 算法 中的 散列表(哈希表)

散列表又叫做哈希表(Hash Table),是一种提供了键(Key)值(Value)映射关系的一种数据结构。只要给出一个Key值,就可以快速匹配出Value值。正是因为这个特性,比如有一本词典,它就可以给出一个单词,去快速找出它的解释。什么是哈希函数?首先,因为前面说过,数组的查询效率是最快的,数组可以根据数组的下标,直接对元素进行随机访问,所以,散列表想要查询快的话,其本质...

2020-03-22 00:07:53 205 19

原创 算法 中的 栈和队列

什么是栈?栈是一种线性的数据结构,只能遵循“先入后出”的原则。“先入后出”也就是First In Last Out,简称FILO,也就是最先进入栈的原则需要最后出栈的元素,这个最早进入栈的元素存放位置叫栈底,最后进入的元素存放的位置叫做栈顶。栈的基本操作入栈现有这样一个栈,需要将一个新元素入栈。将新的元素入栈。新的元素取代原来的栈顶,成为新的栈顶。...

2020-03-19 23:03:55 268 4

原创 Android 服务概要

在Android Framework或应用开发主要API都是以系统服务的形式存在的。像读感应器的值、获取终端的位置,都是在Framework中以服务的形式存在的。Android服务的种类Android 应用程序服务Android应用程序服务都是Android的一种应用程序组件。开发者可以通过以下两种方法来使用这些服务:1. 服务的启动和终止;2. 通过服务绑...

2020-03-15 12:37:27 185

原创 算法 中的 链表

链表

2020-03-08 00:16:09 157

原创 算法 中的 数组

什么是数组?

2020-03-04 00:10:48 269

原创 okhttp框架 同步请求流程和源码分析

创建Client的外部调用OKHttpClient client = new OkHttpClient.Builder().readTimeOut(5,TimeUnit.SECONDS).build();先来看下OkHttpClient的内部类Builder的构造方法: public Builder() { dispatcher = new Dispatcher(...

2020-02-23 18:39:59 279

原创 okhttp 同步/异步 请求方法

okhttp同步请求请求步骤1. 创建一个OkHttpClient类。代表着OKHttp请求的一个客户端类,在整个okhttp库中,这个OkHttpClient类是处于一个很核心的地位。很多功能需要通过这个客户端类进行转发,或者直接由这个客户端类进行实现。它的创建方式有两种:一、通过默认的,也就是直接通过new一个对象来实例OkHttpClient。二、考虑到现实网络情况下...

2020-02-11 21:36:51 10798 1

原创 网络安全基础

网络安全概述一、网络安全的基本概念及属性网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄漏,系统连续可靠正常地运行,网络服务不中断。网络安全通信所需要的基本属性有:机密性、消息完整性、可访问与可用性、身份认证。二、网络安全威胁网络主要面临的安全威胁有以下几个方面:(1)报文传输方面,主要包括窃听、插入、假冒、...

2020-01-18 12:03:38 3928

原创 无线与移动网络

无线网络一、无线网络基本结构无线网络基本组成主要包括以下几个部分:(1)无线主机。主机是运行应用程序的端系统设备。(2)无线链路。主机通过无线通信链路连接到一个基站或者另一台无线主机,不同的无线链路技术具有不同的传输速率和不同的传输距离。(3)基站。基站通常负责协调与之相关联的多个无线主机的传输。(4)网络基础设施。通常是大规模有线网络,如Internet、公司网络或电...

2020-01-17 23:38:56 3059

原创 物理层

数据通信基础一、数据通信基本概念1. 消息与信息信息是对事物状态或存在方式的不确定性表述。将人类能够感知的描述称为消息。2. 通信通信的本质就是在一点精确或近似地再生另一点的信息。3. 信号在通信系统,特别是电通信系统中,传递信息需要有适合的载体在传输通道中传播,这样的载体称之为信号,通常以电磁或光的形式存在,并利用电压、电流、频率、相位等物理量的变化来...

2020-01-17 00:10:32 559

原创 数据链路层与局域网

数据链路层服务数据链路层功能沿着通信链路连接的相邻结点的通信信道称为链路,数据链路层传输的数据单元称为帧。数据链路层通常提供的服务包括组帧、链路接入(物理链路可以分为点对点链路和广播链路两大类)、可靠交付、差错控制。差错控制一、差错控制基本概念差错控制是指通过差错编码技术,实现对信息传输差错的检测,并基于某种机制进行差错纠正和处理,是计算机网络中实现可靠传输的重...

2020-01-15 23:27:21 1475

原创 网络层

网络层服务一、网络层服务在计算机网络体系结构中,网络层位于数据链路层之上、传输层之下、位于提供端到端传输层服务的协议栈底层。网络层是网络核心的最高层,是实现大型网络互联的关键,是网络体系结构中最重要的一层。二、转发与路由的基本概念网络层需要实现两项重要功能:转发和路由选择。(1)转发。当通过一条输入链路接收到一个分组后,路由器需要决策通过哪条输出链路将分组发送出去,并...

2020-01-12 15:52:32 1725

原创 传输层

传输层的基本服务一、传输层的基本服务传输层的核心任务是为应用进程之间提供端到端的逻辑通信服务。为此,传输层主要实现如下功能:传输层寻址;对应用层报文进行分段和重组;对报文进行差错检测;实现进程间的端到端可靠数据传输控制;面向应用层实现复用与分解;实现端到端的流量控制;拥塞控制等。Internet网络有两种传输层协议,即TCP和UDP,TCP提供面向连接的、可靠的、有序的字节流传输服...

2020-01-11 13:42:32 2830

原创 网络应用

计算机网络应用体系结构一、客户/服务器(C/S)结构网络应用1. 客户/服务器(C/S)结构网络客户/服务器(C/S)结构的网络应用的通信双方分为服务器程序和客户程序,服务器程序需要先运行,做好接受通信的准备,客户程序后运行,主动请求与服务器进行通信。服务器计算机通常也称为服务器,一般具有固定的网络地址(比如IP地址),长期运行,以便服务器软件能随时被请求服务。客户软件通常运行在普...

2020-01-08 00:12:24 1246

原创 计算机网络概述

计算机网络的基本概念一、计算机网络的概念计算机网络是利用通信设备与通信链路或者通信网络,互联位置不同、功能自治的计算机系统,并遵循一定的规则实现计算机系统之间的信息交换,即:计算机网络是互连的、自治的计算机的集合。二、网络协议Internet中互连的端系统、分组交换设备或者其他网络设备在进行信息发送、接收或者转发的过程中,都需要遵循一些规则或约定,即网络协议。三...

2020-01-05 12:00:34 1735

原创 2019 下半年 总结

今晚就是圣诞节了,依然是自己一个人,加班,回家,躺那个冰冷的床上。这时候不如来做做这小半年的总结,展望下这个2020年。关于专业这下半年,一直在做5660和6886的工厂模块,虽然每天还是以解bug为主,但是每天都在做笔记,记录每天通过解问题,学到的一点一点,到这个圣诞节,已经记满了一个本子,感觉还是很充实的。这期间整理出来了写Mac,写Key,还有打ok的要做的事情,还通过一个因...

2019-12-26 00:11:05 234

原创 Android.mk 文件 之 入门语法介绍

一、Android.mk介绍Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。要掌握jni,就必须熟练掌握Android.mk的语法规范。它的基本格式如下:LOCAL_PATH:=$(callmy-dir) include$(CLEAR_VARS) ...

2019-12-23 23:29:16 208

原创 序列化 : Serializable 与 Parcelable ( 下 )

在看Parcelable之前需要先了解一下Parcel。ParcelParcel提供了一套机制,就是可以将序列化之后的数据写入到一块共享内存中,然后别的进程可以通过Parcel从这块共享内存中读出字节流,并反序列化成一个对象。Parcel在内存中的结构是一块连续的内存,会根据需要自动扩展大小。从上图就可以看出来,这个Parcel就是一个消息容器,消息就是数据和对象引用,这些对象...

2019-12-16 23:28:18 176

原创 序列化 : Serializable 与 Parcelable ( 上 )

序列化想要在intent上传输对象的时候,直接传输是做不到的,需要对这个对象处理一下,而这个处理的过程,就叫做序列化。关于序列化的定义,百度百科这样定义:序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。比如说内存中有一组的对象集合,我们想要把这里的数据持久的保存下来。而序列化,就是将对象保存成一连串字节描述的过程;相反,反序列化,就...

2019-12-03 00:06:39 111

原创 Android.mk 之 常用变量

一个Android.mk文件可以编译多个模块,每个模块属下列类型之一:APK程序-- 一般的Android程序,编译打包生成apk文件 JAVA库-- java类库,编译打包生成jar文件 C\C++应用程序--可执行的C\C++应用程序 C\C++静态库-- 编译生成C\C++静态库,并打包成.a文件 C\C++共享库-- 编译生成共享库(动态链接库),并打包成.so文,有且只有...

2019-11-24 22:18:10 424

原创 Android.mk 之 编译生成

如何使用Android.mk编译生成apk?LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)//all-subdir-java-files 把底层所有java文件取到LOCAL_SRC_FILES := $(call all-subdir-java-files)//使用这个做编译可以生成一个 LocalPackage.apkLOCA...

2019-11-20 00:54:08 565

原创 Android.mk 之 引入库

如何在代码中引入系统库?假如目前有这样一份文件:#include<stdio.h>#define LOG_TAG "Main"#include <utils/Log.h>int main(void){ ALOGE("test"); return 0;}在这份文件中,除了引用了<stdio.h>,还使用了<utils.L...

2019-11-18 00:22:29 1155

原创 Android.mk 之 静态库和动态库

如何将工程下的所有源码文件添加到变量中?关于这个问题可以有两种解决思路:1. 可以手动将每个文件添加到Android.mk中。LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := testLOCAL_SRC_FILES := test.c \ test1.cLOC...

2019-11-07 23:18:54 362

原创 分析第一个Android.mk

概述Android.mk这个文件可以放在Android的某一个目录下,就可以使用mm或者其他一些命令来对它进行编译。Android.mk的作用对于 C/C++ 来说,可以编译二进制的可执行文件、静态库、动态库;对于 Java 来说,可以编译生成Jar包、APK。分析第一个Android.mkLOCAL_PATH := $(call my-dir) //环...

2019-10-24 17:34:52 1080

原创 Java虚拟机 之 Class文件结构(魔数、class文件版本、常量池)[ 上 ]

魔数魔数存在于每个Class文件的前4个字节,其实在很多文件中都存在,像jpeg在文件头中都存在魔数,其目的是为了标识文件类型。可知虚拟机区分文件类型并不是通过区分文件扩展名,而是通过魔数。Class文件中的魔数叫做 CAFEBABE 。做一个实验:将Hello.java的后缀名改成class,然后去执行这个class文件,看jvm是否能识别出来。他说与class文件...

2019-10-18 00:05:08 204

原创 Java虚拟机 之 Class文件(初识)

说在前面当我们编写好一个.java文件,可以通过命令行用javac的命令来进行编译,javac是jdk自带的一个java的编译工具,像这样:javac Hello.java这是候就会生成一个名为 Hello.class 的文件,这个class文件就是我们现在要关注的。Class文件是为了保证运行的效率和安全性,我们把人所能看懂的代码,翻译成机器所能看懂的字节码。因为我们电...

2019-10-12 00:30:58 176

原创 回顾:《深入理解Java虚拟机》前半部分

该篇回顾的前半部分为“走近java”和“自动内存管理机制”部分,具体章节包括1~5章节。1. 原理Java虚拟机的运行时区域(详细链接)运行时区域主要分为两块:线程独占区、线程共享区。线程独占区包括:虚拟机栈、程序计数器、本地方法栈。虚拟机栈中有栈针和局部变量表;程序计数器是Java虚拟机规范中唯一没有被定义OutOfMemoryError的区域;本地方法栈是对于本地...

2019-10-10 23:25:15 85

原创 Java虚拟机 之 可视化虚拟机工具 JConsole

1. JConsole内存监控我们先来启动它,在命令行中输入jconsole,然后回车。如果是window电脑,需要装jdk,并且把环境变量配置完毕。打开界面是这样的:可以看到有一个本地进程,也就是JConsole本身的进程,我们试着连接它。这就可以很清楚的看到了JConsole本身内存的信息,线程的信息,类的信息和CPU的信息。一般我们查看内存泄露什么的还是得...

2019-10-10 00:04:24 299

原创 Java虚拟机 之 虚拟机工具

1. jps(Java Process Status)故名思义,就是Java进程的状态,就像是把j(java)去掉,就是ps命令,是Linux中查看进程状态的一样。这个就是在命令行中输入jps。现在两个进程,下面的PID685是jps,这个jps本身就是一个java进程;上面的332是eclipse,在活动监视器中可以看到332到底是什么。不过,这个332也叫做本地虚拟...

2019-09-30 00:48:29 153

原创 Android Framework 编译环境 分析

Android编译过程1. 初始化参数设置2. 检查环境变量和目标环境3. 选择lunch并读取目标配置和平台信息4. 清空输出目录5. 编译6.生成升级包1. .build/envsetup.sh 分析1. 加载编译命令在 .build/envsetup.sh 这个文件中,是将下面这些命令加载到终端上,也就是说,在还未执行 source .build/e...

2019-09-16 22:14:56 284

原创 使用 内存映像分析工具 Eclipse Memory Analyzer 进行 内存分析

Eclipse Memory Analyzer工具又被简称为MAT,是一种傻瓜式的堆转存储分析工具。为什么它是傻瓜式的呢?安装在这我所使用的Eclipse为这个,所以就以这个Eclipse为例。我们需要安装这个插件。首先在help -> Eclipse Marketplace可以进入一个页面。在输入框中搜索memory,install 红圈中的...

2019-09-08 23:31:14 1144

CallBack回调

这个资源解决了我很长时间不理解回调是什么,怎么用。

2018-12-13

重写CountDownTimer

重写CountDownTimer类,增加设置总时间和设置时间间隔功能。

2018-12-06

简单广播收发demo

简单的广播收发demo,适合初学者,简单清晰明了。自定义

2018-11-19

WindowManager弹窗

在App里的Demo2实现,使用WindowManager在Service实现

2018-11-16

定时任务和动态广播

此资源中有利用Handle实现计时,Android自带的计时,动态广播使用。注释起开就能用

2018-11-08

Service通过广播向多个Activity传值

Service通过广播向Activity传值,也可以多个Activity接收

2018-10-15

ExoDemo功能齐全

EXOPlayer播放器demo,播放暂停,进度条,全屏,快进快退,亮度音量等一系列功能

2018-09-13

VLC播放器demo

VLC播放器demo,有倍速播放,播放暂停,进度条,全屏,网络判断等一系列功能

2018-09-07

Service向Activity传值(kotlin)

Service向Activity传值,实现Count累加的效果。定时传值

2018-08-29

Service向Activity传值(java)

Service向Activity传值,实现Count累加的效果。定时传值

2018-08-29

IP地址输入框(Kotlin,Dialog)

用Activity写的Dialog,使用方便,ip四位输入框,ui还漂亮

2018-08-28

IP地址输入框

IP地址的输入框,把整个IP地址分成四部分,输完一个,焦点自动对齐下一部分。

2018-08-27

SocketioDemo(Kotlin)

一个用socketio实现长连接的demo,与官方的demo相比,该代码显得不这么多,杂。更适合Socketio初学者。kotlin编写

2018-08-27

简单自定义Toast

包括普通Toast,自定义的图片Toast,自定义位置的Toast

2018-08-25

计算网速工具类

调用: private val mHnadler = object : Handler() { override fun handleMessage(msg: Message) { when (msg.what) { 100 -> { transmission = msg.obj.toString() Log.e("transmissionaa",msg.obj.toString()) } } super.handleMessage(msg) } } private fun initSpeed() { //获取当前网速 NetWorkSpeedUtil(this, mHnadler).startShowNetSpeed() }

2018-08-24

Activity绑定Service(Kotlin)

Activity开启,绑定,解绑,关闭Service。Kotlin版本。适合初学者

2018-08-23

Activity绑定Service

Activity开启,关闭,绑定,解绑Service。代码清晰,适合初学者

2018-08-23

SocketioDemo

一个用socketio实现长连接的demo,与官方的demo相比,该代码显得不这么多,杂。更适合Socketio初学者。

2018-08-15

开机自动启动应用

这利用广播,接收到开机,然后意图传递到第一个页面,从而达到开机自动启动应用的效果,注意权限全都加上。

2018-08-13

ExoPlayer的kotlin例子

该资源为ExoPlayer的demo,基本功能都有,kotlin编写。

2018-08-11

ExoPlayerDemo

这是一个ExoPlayer的小栗子,简单实用,完全能满足点播系统的需求。

2018-08-11

RecycleView

该资源可以有添加,删除数据,并且有ListView,GridView任意切换的模式,是一个很好的demo,对于了解RecycleView,使用Kotlin编写。

2018-08-11

JiaoZiVideoPlayer

饺子播放器,又称节操播放器,该资源是官方的播放器demo。

2018-08-11

FlexBoxLayout流式布局

这是一个完整的FlexBoxLayout,如果加载数据直接改掉数据源就可以,方便简单。

2018-08-11

挺好看的Studio主题

好看的AndroidStudio主题,设置 Primary font:Consolas,Size:6,Line spacing 0.8 效果更佳

2018-08-11

修改app的图标及应用名

该资源只有修改app的图标和名字的功能,代码简单明了,通俗易懂。

2018-08-10

国内手机厂商设置跳转工具类

国内手机厂商设置跳转工具类,包括samsung,huawei,xiaomi,vivo,oppo,360,meizu,oneplus

2018-08-10

Binner轮播图(Kotlin)

此资源是Binner轮播图,可应用于广告位,类似于淘宝主页轮播。此资源用kotlin写的,我还有java版本在我的下载资源中。

2018-08-10

Binner轮播图(Java)

此资源是Binner轮播图,可应用于广告位,类似于淘宝主页轮播。此资源用java写的,我还有kotlin版本在我的下载资源中。

2018-08-10

VLCMediaPlayerDemo

VLC播放器的demo,里面包括so库,解压即用,不需要其他操作,代码简单明了,没有多余的功能混淆视听。

2018-08-08

DensityUtil

用来各种尺寸单位转换的Util工具类,主要有dp,sp,px之间的相互转换,使用非常方便。

2018-08-07

空空如也

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

TA关注的人

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