自定义博客皮肤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)
  • 资源 (4)
  • 收藏
  • 关注

原创 JVM类加载机制

该文章中的文字大部分摘自于周志明版的《深入理解Java虚拟机》一、类加载的定义虚拟机把描述类的数据从.class文件加载到内存,并对数据进行验证、准备、解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制二、类加载的阶段类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括了:加载(Loading)、验证、准备、解析、初始化(Init...

2019-10-11 15:01:44 402

原创 自定义线程实现c++代码回调run方法

自定义线程

2022-12-04 21:01:12 909 1

原创 Thread类的start()方法创建线程的底层分析

Java中创建线程的底层实现

2022-12-02 21:49:16 2523

原创 对volatile关键字的学习总结

在并发编程中,有如下三大特性:可见性:当一条线程修改了变量的值,新值对于其他线程来说是可以立即得知的;有序性:JVM执行代码的顺序跟程序员编写代码的顺序一致;原子性:不可被拆分的操作,例如赋值语句:int i = 1;对于volatile修饰的变量,我们常说其具有可见性和有序性。在这篇文章中,先抛开这些概念,用几段代码先简单地对比下用volatile修饰和未用volatile修饰的变量有什么区别...

2020-08-09 12:27:45 226

原创 CPU Cache在Java中的简单应用

首先看如下代码public class CpuCacheTest { static final int LINE_NUM = 10240; static final int COLUM_NUM = 10240; public static void main(String[] args) { //定义一个10240*10240的二维数组 long[][] array = new long[LINE_NUM][COLUM_NUM];

2020-07-31 16:44:49 241

原创 线程Thread基础知识

在java中线程,

2020-07-02 15:59:08 388

原创 IP地址

相对于链路层的MAC物理地址(不可变),网络层的IP地址则是一种逻辑地址(可变)。在IPv4中,IP地址由32位组成,

2020-05-24 11:17:41 193

原创 早期(编译期)优化

从计算机程序出现的第一天起,对效率的追逐就是程序员天生的信仰。在Java语言中运行一个Java程序,包括:编译期:使用编译器如javac把*.java文件转换成*.class文件的过程; 运行期:使用虚拟机的运行期编译器(JIT编译器,Just In Time Compiler)如HotSpot VM的C1、C2编译器把*.class文件转换成机器码的过程(猜想:使用java *.cla...

2020-03-22 11:38:00 266

原创 Java虚拟机

前面写了几篇关于Java虚拟机和字节码的文章,由于没有进行系统的整理,导致在阅读的过程中很难有一个清晰的框架和思路,今天就在回顾的基础上以及加上新的理解,统一整理如下。一、Java虚拟机的概念Java虚拟机(Java Virtual Machine,JVM),一种能够运行Java字节码的虚拟机。作为一种编程语言的虚拟机,实际上不只是专用于Java语言,只要生成的编译文件匹配JVM对加载编译...

2020-03-07 17:10:38 177

原创 抽象类和接口

一、接口1、定义:接口是对行为的抽象,利用接口可以达到 API 定义和实现分离的目的。2、特性不能实例化。 所有属性在定义时必须赋值,如:int i = 1;且在编译后会自动加上前缀public static final,保证其是公共的静态常量。 方法包括两种:静态方法和非静态方法。前者可以有方法体且编译后会自动加上前缀public;后者不可以且编译后会自动加上前缀public a...

2020-02-21 13:13:32 157

原创 汇编语言对i++和++i的分析

++:自加,这是个单目运算符,i++表示先把操作数放入表达式中运算,然后才把操作数加1;++i表示先把操作数加1,然后才把操作数放入表达式中运算。我们已经知道了含义,下面通过几段代码来对其进行更深入的分析public class Test { public static void main(String[] args) { int i = 0; in...

2019-10-20 15:13:08 729

原创 Java数组、集合之分析对比

一、数组数组,可以简单的理解为一组数据,Java中的任何类型(基本类型和引用类型)都可以声明为一个数组首先介绍下基本类型的数据声明方式,以int类型为例,按需选择如下其中一种方式public static void main(String[] args) { //初始化 int[] array = new int[3]; //再赋值 array[0] ...

2019-09-27 15:54:53 433

原创 Java字节码

我们通常将.java文件通过javac命令编译后的.class文件称为字节码,是由于.class文件是由十六进制的值组成,而JVM以两个十六进制值(即一个字节)为一组进行读取,因此称之为字节码下面看一下字节码的内容格式,以如下Test.java为例public class Test { public static void main(String[] args) { ...

2019-09-07 16:36:06 219

原创 Java虚拟机内存划分

简介:Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束而建立和销毁如下介绍各个内存区域的用途以及创建和销毁时间1、程序计数器作用:保存当前线程所执行的字节码的行号,即该字节码执行到了哪一行;字节码解释器工作时就是通过改变这个...

2019-08-05 08:46:42 183

原创 Java数据类型

一、整型:byte、short、int、long1、bytebyte类型有8位,第1位作为符号位,0为正数,1为负数,剩余7位,有2*7=128种组合,因此负数有128个,正数也有128个,但由于0属于正数,因此取值范围是:-128~127二、字符型:char1、首先char采用unicode编码,每个字符对应一个唯一的编号2、其次char类型占两个字节,存放单个字符,需加上单...

2019-07-16 23:22:19 190

原创 FileInputStream中read()及read(byte b[])的用法

编码1、ANSI编码:American National Standards Institute,即美国国家标准协会。当记事本或者软件采用Windows代码页中对应的"ANSI"编码时,在不同地区"ANSI"编码是不同的,在中国,"ANSI"就是GBK编码2、ASCII编码:American Standard Code for Information Interchange,即美国信息交换...

2019-07-11 19:14:38 9603

原创 Android中userId的作用

每个应用在安装成功后,系统都会为其分配一个用户Id(userId),一个应用对应一个userId,而一个userId可以对应多个应用。当多个应用的userId相同时,可以访问对方的私有目录,如/data/data/包名下的文件,下面以shared_prefs目录下的文件为例进行说明下面是项目的目录结构app中通过SharedPreferences保存一个变量App2中获取该变量注意红色框里的代码,...

2018-05-14 22:12:30 9647

原创 Android中的消息处理机制

一般使用Handler发送消息的流程是这样的://新建Handler对象Handler h = new Handler() { @Override public void handleMessage(Message msg) { //处理逻辑 }};//发送消息h.sendMessage(msg);使用无参构造方法创建...

2018-03-02 11:37:20 213

原创 Android主线程中的消息处理机制

首先从应用的主线ActivityThread类的main方法开始ActivityThread.javapublic static void main(String[] args) { //省略部分代码 Looper.prepareMainLooper(); //省略部分代码 Looper.loop(); }先看Loo

2018-02-06 17:01:29 401

原创 Android中关于“UI只能在主线程中更新”说法的理解

首先该说法不严谨,正确的说法是,UI只能在创建它的线程中更新。如下代码说明这个问题1、MainActivitypackage cn.test.uitest;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import a

2018-01-29 16:43:37 1112

原创 关于Activity的onCreate方法是如何被执行的

首先要明确,一个应用真正的入口是ActivityThread的main方法,其中关键的代码如下public static void main(String[] args) { //......省略部分无关代码...... ActivityThread thread = new ActivityThread(); thread.attach(false); //......省...

2018-01-24 10:00:37 5613 4

原创 Android Intent.FLAG_ACTIVITY_NEW_TASK的个人理解

首先分四部曲简单做一下说明 1.What(是什么):Intent类中的一个静态标志属性public static final int FLAG_ACTIVITY_NEW_TASK = 0x10000000;2.Why(为什么要使用):在特殊情况下,如果不加这个标志,会报错(下文详细说明) 3.When(什么时候使用):当调用startActivity启动一个Activity时 4.How(如何

2017-11-17 10:40:28 56365 10

原创 如何使用Git Bash Here,将本地项目传到github上

1.在将要上传的文件目录内,右键Git Bash Here,打开git bash命令工具 2.输入命令:git init,回车 3.输入命令:git add .,此命令为添加当前目录下的所有文件到github上,也可以将.换成别的文件或者文件夹名字单个上传,回车 4.输入命令:git commit -m “first commit”,回车 5.输入完邮箱和姓名后,接着输入命令:git com

2017-05-23 17:48:47 1265

原创 android项目中的遇到的关于system image的问题

system image大致分为5种 1.armeabi 2.armeabi-v7a 3.arm64-v8a 4.x86 5.x86_64

2017-05-19 11:12:27 5824

原创 Android签名打包的作用

手机上安装了一个签名的apk后,当再次安装同样包名的签名的apk时,如果两次签名一样,则可以成功覆盖安装,如果签名不一样,则安装失败。 作用: 1.防止开发商通过使用相同包名的应用来覆盖你的应用(两次签名不一致) 2.正常更新(签名一致)

2017-05-10 15:54:30 938

原创 gradle配置打包

1.首先创建一个签名文件2.拷贝到项目中,如下图 3.在module的build.grale中进行如下配置signingConfigs { release { keyAlias 'SignDemo1' keyPassword '111111' storeFile file('SignDemo1.jks')

2017-05-10 14:07:44 531

原创 各种dpi

各种文件夹对应的屏幕密度 启动图标大小

2017-03-29 16:12:39 1057

原创 APP内存优化

一、数据结构优化 1.频繁字符串拼接用StringBuilder(耗时短) 2.ArrayMap、SparseMap替换HashMap 二、对象复用 1.复用系统自带的资源 2.ListView、GridView中的convertView的复用 3.避免在OnDraw方法里创建对象 三、避免内存泄漏 定义:由于代码瑕疵,导致这块内存虽然是停止不用了,但依然被其他东西引用着,导致GC没

2017-03-27 12:11:35 447

原创 自定义View之measure、layout、draw

1.measure public final void measure(int widthMeasureSpec, int heightMeasureSpec) 此方法为final,只能重写onMeasure方法2.layout public void layout(int l, int t, int r, int b) 该方法有如下注释:Derived classes should not

2016-11-16 13:32:36 438

原创 View的一系列SYSTEM_UI_FLAG的作用

1.SYSTEM_UI_FLAG_LAYOUT_STABLE 从字面的意思来看,用作布局稳定的作用,看如下代码:布局文件<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activ

2016-11-02 14:30:55 13540 2

原创 android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParam

123

2016-10-20 11:08:12 1510

原创 android中的windowTranslucentStatus和fitsSystemWindows的作用

一.Android4.4版本才有windowTranslucentStatus属性,在res文件夹下创建一个新的文件夹value-v19并新建styles.xml文件给activity设置这个style,此时该页面可以拉伸到顶部状态栏,并且定义顶部状态栏透明。二.android:fitsSystemWindows这个属性,主要是通过调整当前设置这个属性的view的padding(paddingTop

2016-10-19 14:36:22 13511 1

原创 View测量模式:EXACTLY、AT_MOST、UNSPECIFIED

看了不少自定义View的文章,对onMeasure方法中的测量模式一直不理解,今天回顾了以前的知识,做了一个小例子来理解一下1:自定义一个Viewpublic class CustomView extends TextView { public CustomView(Context context) { super(context); } public Cust

2016-10-09 15:19:44 10565 2

原创 Android事件分发机制

阅读郭林的文章后,记录一下自己学到的知识 当触摸一个View的时候,会调用dispatchTouchEvent方法,该方法中最重要的代码如下if (li != null && li.mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED && li.mOnTouchListener.onTou

2016-09-30 15:49:37 499

原创 布局层次结构解析

参考Android中不得不谈的setContentView 一个简单的xml布局代码<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main"

2016-09-20 17:48:07 1605

原创 阅读Github上App之总结

一.Dota2Helper 1.android中如何设置控件的透明度如上图底部的透明样式,将背景颜色设置为#1affffff,其中前两位1a为透明度,后六位为颜色值(ffffff为白色,000000为黑色)。透明度分为256阶(0-255,完全透明-完全不透明),计算机上用16进制表示为(00-ff)。2.android:lineSpacingExtra该属性用来设置TextView等控件

2016-08-18 10:50:34 1743

原创 Android中的UI优化之<include/>、<merge>、<ViewStub/>

1.include 使用很简单,在项目中有重用xml代码的情况时,可以将这些代码放在一个单独的xml文件中,然后在需要的地方使用<include layout="@layout/title"/> 2.merge 该标签的作用是减少布局层级,我们知道,所有的xml文件的根布局都是FrameLayout。如果一个布局文件中使用FragmeLayout作为根布局的话,那就存在两个相同的Fra

2016-08-08 10:21:45 460

原创 Canvas和Paint的使用小结

一直想学习自定义View方面的知识,看的资料比较多,但是真正自己动手的实践很少,趁最近一段时间有点空闲,便查看AndroidAPI,照着上面的方法写点东西一.Canvas的方法1.drawArc(绘制弧形),代码如下 Paint paint = new Paint(); //抗锯齿 paint.setAntiAlias(true); //

2016-06-24 10:52:45 609

原创 android:android.content.res.Resources$NotFoundException: String resource ID #..

如下代码textView.setText(entity.getProName());出现以下错误android.content.res.Resources$NotFoundException: String resource原因是entity.getProName()的值为int类型,这样Android系统就会去资源文件中寻找该值对应的Id,显然是找不到的,所以要将代码改成如下形式将int类型转换为

2016-05-09 12:39:52 475

原创 Fragment中的onActivityResult方法不调用

1.MainActivity的布局文件<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="ver

2016-05-08 22:16:45 573

gradle use guide 中文版

gradle use guide的中文版,文字很清晰,有目录,方便阅读

2017-09-29

无懈可击的WEB设计

这是一本非常好的WEB设计书籍,作者先从一些著名的网站设计思路出发,讲解为何这样是无懈可击的,带领着我们跟随着作者的思路一步步前进

2014-01-05

经典算法大全

此资源讲诉了算法基本结构和使用时注意的地方

2013-04-21

空空如也

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

TA关注的人

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