- 博客(51)
- 资源 (4)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 JVM类加载机制
该文章中的文字大部分摘自于周志明版的《深入理解Java虚拟机》一、类加载的定义虚拟机把描述类的数据从.class文件加载到内存,并对数据进行验证、准备、解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制二、类加载的阶段类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括了:加载(Loading)、验证、准备、解析、初始化(Init...
2019-10-11 15:01:44
471
原创 对volatile关键字的学习总结
在并发编程中,有如下三大特性:可见性:当一条线程修改了变量的值,新值对于其他线程来说是可以立即得知的;有序性:JVM执行代码的顺序跟程序员编写代码的顺序一致;原子性:不可被拆分的操作,例如赋值语句:int i = 1;对于volatile修饰的变量,我们常说其具有可见性和有序性。在这篇文章中,先抛开这些概念,用几段代码先简单地对比下用volatile修饰和未用volatile修饰的变量有什么区别...
2020-08-09 12:27:45
245
原创 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
263
原创 早期(编译期)优化
从计算机程序出现的第一天起,对效率的追逐就是程序员天生的信仰。在Java语言中运行一个Java程序,包括:编译期:使用编译器如javac把*.java文件转换成*.class文件的过程; 运行期:使用虚拟机的运行期编译器(JIT编译器,Just In Time Compiler)如HotSpot VM的C1、C2编译器把*.class文件转换成机器码的过程(猜想:使用java *.cla...
2020-03-22 11:38:00
280
原创 Java虚拟机
前面写了几篇关于Java虚拟机和字节码的文章,由于没有进行系统的整理,导致在阅读的过程中很难有一个清晰的框架和思路,今天就在回顾的基础上以及加上新的理解,统一整理如下。一、Java虚拟机的概念Java虚拟机(Java Virtual Machine,JVM),一种能够运行Java字节码的虚拟机。作为一种编程语言的虚拟机,实际上不只是专用于Java语言,只要生成的编译文件匹配JVM对加载编译...
2020-03-07 17:10:38
191
原创 抽象类和接口
一、接口1、定义:接口是对行为的抽象,利用接口可以达到 API 定义和实现分离的目的。2、特性不能实例化。 所有属性在定义时必须赋值,如:int i = 1;且在编译后会自动加上前缀public static final,保证其是公共的静态常量。 方法包括两种:静态方法和非静态方法。前者可以有方法体且编译后会自动加上前缀public;后者不可以且编译后会自动加上前缀public a...
2020-02-21 13:13:32
164
原创 汇编语言对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
763
原创 Java数组、集合之分析对比
一、数组数组,可以简单的理解为一组数据,Java中的任何类型(基本类型和引用类型)都可以声明为一个数组首先介绍下基本类型的数据声明方式,以int类型为例,按需选择如下其中一种方式public static void main(String[] args) { //初始化 int[] array = new int[3]; //再赋值 array[0] ...
2019-09-27 15:54:53
443
原创 Java字节码
我们通常将.java文件通过javac命令编译后的.class文件称为字节码,是由于.class文件是由十六进制的值组成,而JVM以两个十六进制值(即一个字节)为一组进行读取,因此称之为字节码下面看一下字节码的内容格式,以如下Test.java为例public class Test { public static void main(String[] args) { ...
2019-09-07 16:36:06
244
原创 Java虚拟机内存划分
简介:Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束而建立和销毁如下介绍各个内存区域的用途以及创建和销毁时间1、程序计数器作用:保存当前线程所执行的字节码的行号,即该字节码执行到了哪一行;字节码解释器工作时就是通过改变这个...
2019-08-05 08:46:42
192
原创 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
207
原创 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
10012
原创 Android中userId的作用
每个应用在安装成功后,系统都会为其分配一个用户Id(userId),一个应用对应一个userId,而一个userId可以对应多个应用。当多个应用的userId相同时,可以访问对方的私有目录,如/data/data/包名下的文件,下面以shared_prefs目录下的文件为例进行说明下面是项目的目录结构app中通过SharedPreferences保存一个变量App2中获取该变量注意红色框里的代码,...
2018-05-14 22:12:30
9704
原创 Android中的消息处理机制
一般使用Handler发送消息的流程是这样的://新建Handler对象Handler h = new Handler() { @Override public void handleMessage(Message msg) { //处理逻辑 }};//发送消息h.sendMessage(msg);使用无参构造方法创建...
2018-03-02 11:37:20
224
原创 Android主线程中的消息处理机制
首先从应用的主线ActivityThread类的main方法开始ActivityThread.javapublic static void main(String[] args) { //省略部分代码 Looper.prepareMainLooper(); //省略部分代码 Looper.loop(); }先看Loo
2018-02-06 17:01:29
418
原创 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
1131
原创 关于Activity的onCreate方法是如何被执行的
首先要明确,一个应用真正的入口是ActivityThread的main方法,其中关键的代码如下public static void main(String[] args) { //......省略部分无关代码...... ActivityThread thread = new ActivityThread(); thread.attach(false); //......省...
2018-01-24 10:00:37
5647
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
57103
11
原创 如何使用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
1295
原创 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
5889
原创 Android签名打包的作用
手机上安装了一个签名的apk后,当再次安装同样包名的签名的apk时,如果两次签名一样,则可以成功覆盖安装,如果签名不一样,则安装失败。 作用: 1.防止开发商通过使用相同包名的应用来覆盖你的应用(两次签名不一致) 2.正常更新(签名一致)
2017-05-10 15:54:30
961
原创 gradle配置打包
1.首先创建一个签名文件2.拷贝到项目中,如下图 3.在module的build.grale中进行如下配置signingConfigs { release { keyAlias 'SignDemo1' keyPassword '111111' storeFile file('SignDemo1.jks')
2017-05-10 14:07:44
557
原创 APP内存优化
一、数据结构优化 1.频繁字符串拼接用StringBuilder(耗时短) 2.ArrayMap、SparseMap替换HashMap 二、对象复用 1.复用系统自带的资源 2.ListView、GridView中的convertView的复用 3.避免在OnDraw方法里创建对象 三、避免内存泄漏 定义:由于代码瑕疵,导致这块内存虽然是停止不用了,但依然被其他东西引用着,导致GC没
2017-03-27 12:11:35
454
原创 自定义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
444
原创 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
13750
2
原创 android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParam
123
2016-10-20 11:08:12
1536
原创 android中的windowTranslucentStatus和fitsSystemWindows的作用
一.Android4.4版本才有windowTranslucentStatus属性,在res文件夹下创建一个新的文件夹value-v19并新建styles.xml文件给activity设置这个style,此时该页面可以拉伸到顶部状态栏,并且定义顶部状态栏透明。二.android:fitsSystemWindows这个属性,主要是通过调整当前设置这个属性的view的padding(paddingTop
2016-10-19 14:36:22
13573
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
10619
2
原创 Android事件分发机制
阅读郭林的文章后,记录一下自己学到的知识 当触摸一个View的时候,会调用dispatchTouchEvent方法,该方法中最重要的代码如下if (li != null && li.mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED && li.mOnTouchListener.onTou
2016-09-30 15:49:37
512
原创 布局层次结构解析
参考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
1614
原创 阅读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
1788
原创 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
468
原创 Canvas和Paint的使用小结
一直想学习自定义View方面的知识,看的资料比较多,但是真正自己动手的实践很少,趁最近一段时间有点空闲,便查看AndroidAPI,照着上面的方法写点东西一.Canvas的方法1.drawArc(绘制弧形),代码如下 Paint paint = new Paint(); //抗锯齿 paint.setAntiAlias(true); //
2016-06-24 10:52:45
625
原创 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
482
原创 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
581
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人