自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java虚拟机剖析之内存区域,内存的溢出,泄漏

本博文是在读了“兰亭风雨”的博文之后,加上自己的个人理解所写。在此先感谢“兰亭风雨”的分享。如有错误或者不好之处还望指出,一起成长。在之前我的一片博文“多线程之原子性,可见性,有序性,并发问题解决”中也有提到内存区域的分配,其中的一些从属关系是不全面,但是那篇文章主要的思想是为了讲解线程之间数据共享的问题。跟这篇文章中大同小异,对于刚接触Android开发不久,对线程理解不是很深的网...

2019-04-02 11:28:02 473

原创 Java 线程和进程,并发解决之synchronized

什么是进程?程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。 在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行。这是这样的设计,大大提高了CPU的利用率。进程的出现让每个用户感觉到自己独享CPU...

2019-04-02 11:26:07 1509 2

原创 多线程之原子性,可见性,有序性,并发问题解决

在Android开发或者Java开发中,遇到并发的问题的时候很多。并发带给我们的问题就是,当多个线程操作同一个数据的时候,往往不能得到我们预期的结果。造成这个问题的原因是什么呢?其实就是该数据对这多个线程没有可见性,这些线程就不能有序性的去操作共同数据,还不是原子操作,所以导致预期结果不一样。这之间的一些细节的问题是啥呢?下面我们举例说明: 在说例子之前我们来看一下,...

2019-04-02 11:25:20 4156 1

原创 设计模式之Builder设计模式(可替代性)

转载请申明出处:http://blog.csdn.net/qq_24692041/article/details/79277901开篇引言 在开发中尤其注重代码的可迭代性,这就侧重了功能解耦和类之间的解耦。因为在一个功能更改或者新功能加入的时候,我们尽量不修改之前的类,而是增加新类中实现新的功能,或者只需要更改指定的类来实现新功能。所以在功能更改的时候,代码的可替换性就显得十分重要,在旧的逻辑代码...

2018-02-08 12:00:17 399

原创 并发编程<五>并发处理之synchronized

序言-几个基本概念在本系列中第四篇文章中已经讲述了并发产生的不可控结果,和结果不可控的根本原因。现在来说说Java所提供的并发处理方式之一的synchronized关键字。学习synchronized关键字之前,我们需要了解一下一下几个概念。临界资源多个线程共同访问的资源我们称之为临界资源。对象锁synchronized引入了锁的概念,每个对象都有一个锁标记,我们称其为对象

2017-11-13 10:45:39 248

原创 并发编程<四>并发不可预期结果的根本原因

提出问题说到并发,我们应该给自己提出下面这三个问题:产生并发的根本原因是什么?会造成什么后果?怎么去控制,处理并发达到我们预期的结果。提出这三个问题之后,我们慢慢来看看一下几个知识点,这三问题自然迎刃而解。解答上面3个问题之前,我们需要对JVM的内存模型有所了解,在《JVM内存模型》一文中已经将JVM内存模型讲的很清楚了,对JVM内存模型不了解的同学可以先去看看,然后继续本文。

2017-11-09 15:06:51 424

原创 JVM内存模型

之前看了很多JVM相关的文章,资料,写了一篇JVM内存相关的文章,现在回过头来,发现理解又不一样了,故而删除了之前的文章,现在完全根据自己的理解写下本文,JVM相关的文章已经太多了,写得都很好,也都大同小异,这儿权当是给自己梳理一下脑中的乱流了!JVM从大的方向来说将内存分为6个部分:java堆,方法区,虚拟机栈,本地方法栈,程序计数器,直接内存。对于我目前接触的领域跟我目前的开发功底来说,需

2017-11-09 14:23:41 251

原创 并发编程<三>线程实现方式Thread,Runnable

Thread,Runnable的区别我们创建线程的方式一般来说有两种,首先我们来看看两种启动线程方式的具体实现。第一种继承Thread类,实现run方法,最后调用start方法启动线程。第二种实现Runnable接口,实现run方法,然后调用Thread的有参构造方法,将Runnable的子类对象作为构造方法的参数创建一个Thread对象,最后调用start方法启动线程。从

2017-11-08 15:58:21 220

原创 并发编程<一>线程5大状态切换时机分析及sleep,join,wait,notify,notifyAll,yield剖析

线程5大状态分析上图是线程从创建到消亡的一个切换过程。下面我们简单类分析每一个状态。新建状态:新建状态具体是指调用new Thread()创建出线程对象,但是还没有调用start方法的这段时间。前面的一篇文章《Java虚拟机剖析之内存区域,内存的溢出,泄漏》一文中有说到,每一个线程都会有自己的私有内存区域。处于新建状态下的线程,此时还未分配系统资源,也即是还没有分配到私有内

2017-11-08 11:05:30 991

原创 并发编程<二>线程中断和线程中断标志

线程中断,interrupt方法 先看代码和输出结果 子线程代码:package com.example;/** * Created by PICO-USER on 2017/11/6. */public class ThreadA extends Thread { @Override public void run() { su

2017-11-06 15:53:12 772

原创 c#之委托

什么是委托?        如果我们需要把方法作为参数来传递的话,就需要用到委托。简单来说,委托就是一个类型,这个类型可以被赋值一个方法的引用(也即是说可以讲一个方法赋值给一个委托实例,这样的话,我们成这个委托实例指向这个方法)。委托声明和使用       在c#中,使用一个类型,分类两个部分。首先定义一个类型,这个过程会告诉编译器,这个类型由哪些变量和方法组成,其次就是通过类型实例化

2017-06-14 11:55:47 243

原创 Ubuntu成长记录(一)

最近在Linux环境下工作,还不是很熟悉,在此记录相关知识。Linux常用命令解压文件命令Zip包解压  unzip命令+特殊参数unzip file.zip将文件文件解压到当前文件夹unzip -d /目录 file.zip将文件解压到指定目录tar.gz包解压tar -zxvf file.tar.gz 将文件包解压到当前目录tar -zx

2017-05-18 10:29:18 340

原创 Android消息机制之Handler,MessageQueue,Looper源码剖析

Android线程间通讯方式有很多,但是大部分内部实现其实都是handler。今天我们就来看看handler的内部实现机制,实现原理,实现细节。角色分析:Handler进程间通讯主要关联了Thread,ThreadLocal,Handler,Message,MessageQueue,Looper,,这几个类在内。我们先看看这几个类各自在这个实现工程中扮演者什么样的角色!Thre

2017-03-30 17:00:32 2741

原创 Java集合之HashMap

HashMap是基于Hash Table实现的。通过实现Map接口,提过所有对map的操作。允许key值和value值为null。除了能允许为null和不保证线程安全之外,基本上等同于HashTable,并且HashMap不保证插入,取出的顺序。性能方面主要考虑capacity容量和load factor加载因子,这儿的HashMap 实现了Serializable接口,因此它支持序列化,实现了C

2017-03-25 18:58:44 511

原创 Java集合之集合框架

转载轻注明出处:http://blog.csdn.net/ns_code/article/details/35564663 Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。学习Java集合框架下大致可以分为如下五个部分:List列表、Set集合、Map映射、迭代器(Iterator、Enumeration)、工具类(Arr

2017-03-23 09:25:07 295

原创 设计模式之Observer(观察者)模式

观察者模式在我们Android中被广泛的应用,比如说我们平时常用到的监听器,适配器的实现等等。今天我们来具体讲一下Observer模式的具体实现思想。首先,观察者模式的初步角色应该有观察者,被观察者两个角色。我们再来看看这两者的任务或者说职责都是啥!还有他们扮演的具体角色。      被观察者:1.自己会有数据变化的功能。2.当数据变化的时候,他要通知观察者,所以应该有通知观察者的功能,要通知

2017-03-21 10:31:05 344

原创 数据结构之Java单链表反转

本文为数据结构基础,研究得不是很深。用Java实现单链表的反转,虽然本文研究得不是很深,但是因为是数据结构,所以必须是在对Java内存比较清楚的情况下才能真正的搞懂吃透,如果对Java内存不够清楚,那最多只能学形而不能学其内在。         首先我们要搞清楚链表是啥玩意儿?先看看定义:         讲链表之前我们先说说Java内存的分配情况:我们new对象的时候,会在java堆中为

2017-03-16 15:44:37 12300

转载 Android Service中一些你不知道的细节

Android 中的 Service 全面总结1、Service的种类  按运行地点分类:类别区别 优点缺点  应用本地服务(Local)该服务依附在主进程上, 服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外Local服务因为是在同一进程因此不需要IPC,也不需要AIDL。相应bindService会方便很多。

2017-03-15 14:29:15 392

原创 设计模式之单例模式

在开发中对于每一个类,一般来说我们要去调用这个类中的非静态方法,我们都需要new一个对象,然后去调用方法,这些实例所拥有的的属性值不一定都相同。比如说现在有一个猫Cat这个类,每一次我们要用到该对象我们都new一个对象,那我们new1000次就有1000个对象,就有1000只猫。分别都是:咖啡猫,懒猫,花猫,卖萌猫等等等等,一共有1000只,名字,毛的颜色,年龄等等属性都不一样。那如果现在在我们的

2017-03-13 17:00:34 274

转载 ArrayList源码解析

转载请声明出处:http://blog.csdn.net/ns_code/article/details/35568011ArrayList简介    ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。    ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.

2017-03-13 10:57:31 222

转载 IntentService用法及其详解

转载请申明出处:http://blog.csdn.net/lmj623565791/article/details/47143563由于这儿hongyang已经写过了,并且也挺全面,我就不再写了,直接转载过来引用下就好了。一 概述大家都清楚,在Android的开发中,凡是遇到耗时的操作尽可能的会交给Service去做,比如我们上传多张图,上传的过程用户可能将应用置于后台,然后干

2017-03-13 10:41:52 511

转载 Android的消息机制之ThreadLocal的工作原理

转载请申明出处:http://blog.csdn.net/singwhatiwanna/article/details/48350919 提到消息机制大家应该都不陌生,在日常开发中不可避免地要涉及到这方面的内容。从开发的角度来说,Handler是Android消息机制的上层接口,这使得开发过程中只需要和Handler交互即可。Handler的使用过程很简单,通过它可以轻松地将一

2017-03-13 10:39:03 215

转载 Android源码分析-消息队列和Looper

转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/17361775前言上周对Android中的事件派发机制进行了分析,这次博主要对消息队列和Looper的源码进行简单的分析。大家耐心看下去,其实消息队列的逻辑比事件派发机制简单多了,所以大家肯定会很容易看懂的。概念1. 什么是消息队列消息队列在android中

2017-03-13 10:37:14 194

原创 设计模式之Factory Method模式

之前在《设计模式之Template Method模式》一文中详细讲了Template Method的思想,今天我们来讲一片跟这种模式看上去很相似,但是却完全不同的一个设计模式Factory Method模式。     还是先说说这种模式的思想,这种模式注重“框架”二字,主要思想就是通过抽象类创建需要的实例,然后具体怎么创建交给子类去决定。还是用一个需求来作为例子说明。现在有这么个需求,我想要定

2017-03-10 11:04:15 367

原创 设计模式之Template Method模式

Template Method模式,模板方法模式。顾名思义,其定义就是在父类中定义处理流程的框架,在子类中实现具体的处理方式。先直接上代码,然后我们再来讨论这种模式。现在的大概需求是这样的。传入一个char型'A',打印如下结果:输入“Hello World !”打印出如下结果:在设计模式中我们用到的例子都是一些很简单的例子,主要阐述的是一种思想,然后在自己的项目中

2017-03-09 15:52:04 3422

原创 设计模式之Adapter模式

今天这篇文章,我们来讲将设计模式中的“Adapter模式”,中文就是“适配器模式”。先说说一个生活中适配器模式的案例,有助于理解。现在有一个100伏特的交流电源,我现在想给笔记本充电,但是笔记本只能用12伏特的直流电,那我们是不是不能用这个电源进行充电了?直接充肯定不行,但是我们可以有一个充电器,这个充电器的功能是将100伏特的交流电转化成12伏特的直流电给电脑用。请注意,这句话很重要:“电脑并不

2017-03-09 11:14:52 639

原创 设计模式之Iterator模式

在之前一篇文章《Java设计模式之六大设计原则》中说到了,设计模式是为了增强代码的可复用性,可拓展性,可维护性,灵活性。也说到几个设计模式的理论知识。这篇文章中主要讲一下Iterator设计模式,贯穿一种面向接口编程的思想,并且印证设计原则。       我们以一个书架的遍历为例子来讲解说明。现在,我希望定义一个简单的书架,这个书架上可以放书,还需要能遍历这个书架。我们先来看看传统的设计思想。

2017-03-08 15:25:43 1491 1

原创 Java设计模式之六大设计原则

       设计模式之所以存在,是为了提高代码的可复用性,可拓展性,可维护性,灵活性。总之一句话就是为了让我们开发更方便,更简洁,更省事儿。这些设计模式都是遵循设计原则而存在,但是不一定每一种设计模式都同时满足六大设计原则。下面我们先来谈谈六大设计原则。开闭原则 定义:一个软件实体,如类,模块,和方法应该对拓展开放,对修改关闭。 也即是说在有新需求增加的时候,跟该类相关的新功能不要通过修...

2017-03-07 21:40:08 424

转载 Android 属性动画ValueAnimator和ObjectAnimator的高级用法

尊重版权,转载请声明出处:http://blog.csdn.net/guolin_blog/article/details/43816093大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了。但是,正如上篇文章当中所说到的,属性动画对补间动画进行了很大幅度的改进,之前补间动画可以做到的属性动画也

2017-03-03 17:07:54 754

原创 C语言_指针随笔

指针:指针就是地址,地址就是指针。地址就是内存单元的编号。指针变量是存放地址的变量(例:int* p,这里的p就是指针变量,用于存放地址)    指针和指针变量是两个不同的概念:平时也把指针变量间读为指针,也就是说下面示例代码中的p既是我们所说的指针,也是我们所说的指针变量。    例:指针里面存放的是100:这句话中,指针就是地址指针里面存放的是地址:这句话中,指

2017-03-02 17:33:20 253

原创 Android屏幕尺寸,分辨率,屏幕适配剖析

屏幕尺寸:屏幕尺寸指的是手机对角线的长度,可以直接用尺子测量换算,不论电脑还是手机或者电视的屏幕尺寸都是这个定义。1英寸 = 2.54厘米屏幕分辨率:指的是手机屏幕上显示像素点的多少,比如160x128,指的是横向160个像素点,竖直方向128个像素点,不论是手机还是电脑或者pad的分辨率都是这个定义。px (pixels):图像元素即是我们所说的像素。像素是分辨率的尺寸单位,,每台设备中1p

2017-03-02 17:31:45 381

原创 Android studio NDK成长记录(二)ndk-build

Android studio NDK开发第二种方法 ndk-build:   首先环境配置必不可少,包括下载安装CMake,ndk-build插件,在上一篇“Android studio NDK成长记录(一)“中已经有详细介绍.创建.c或者cpp源文件,和头文件,这一步可以先只是创建出.c和.h文件,不用急着书写.c源文件,只需搭好架子即可,书写c代码可以放到将gradle和ndk-b

2017-03-02 17:30:57 369

原创 浅谈Java,面向对象,对象,引用

何为面向对象?个人理解面向对象:我们将具有共同属性,但是属性值却可能不一样的一类事物抽象成为一个类,进行研究的这种方式,称作为面向对象。以人类Person来举例:张三是一个人,李四也是一个人。他们有共同的属性,都有身高,都有年龄,都有性别,都有名字。但是他们具体的名字不同,具体身高也可能不同,具体的年龄也可能不同,性别都是男的,所以他们都是人类。何为对象?搞清楚什么是面

2017-03-02 15:33:33 303

原创 Android Acitivity启动模式

Activity启动模式对于我们很多应用中会有不同的要求,这儿简单说一下Activity的四种启动模式之间的差别1.standard默认启动模式,如果不在AndroidMainfest文件中配置,默认为这个模式。这种模式下,每次启动这个Activity都会调onCreate方法创建新的实例。示例代码:public class MainActivity extends

2017-03-02 15:29:56 317

原创 Android studio NDK成长记录(一)CMake

Android studio NDK开发支持CMake和ndk-build两种编译方式:第一种:CMake编译方式的开发步骤下载安装studio     下载地址:“http://www.android-studio.org/”新建项目下载安装ndk插件:File右键->setting->Android SDK->SDK Tool勾选CMake,LLDB,NDK,将这三个插件全

2017-03-02 15:29:20 762

原创 Android studio NDK成长记录(三)Java调用C的各种情况解析

Java调用C代码的各种情况下面NativeMethord类中的方法跟C代码里面的方法相对应。Java代码:public class NativeMethord { static { System.loadLibrary("native_jni"); } public static native int add(int x, int y

2017-03-02 15:28:11 201

原创 Android studio NDK成长记录(四)C调Java的各种情况解析

C调用Java的各种情况:C调用Java代码利用反射进行调用,jni.h中提供相应API,直接调用API进行调用。调用基本步骤如下:得到需要调用的类的字节码得到方法的ID得到方法ID的时候调用GetMethodID(env, jclass1, "add_number","(II)I");这个方法的最后一个参数是方法签名,对方法签名其实是对字节码进行签名,所以需要先在Java

2017-03-02 15:26:26 394

原创 Android自定义View(ImageView画圆)

在很多时候,原生控件不能满足我们的需求,就需要我们自定义View,下面以ImageView圆角为例讲一下个人自定义View经验。我们在自定义View的过程中,需要搞清楚下面几点: 首先想想生活中画圆的过程:我们需要工具:圆规,一张纸,圆规里面还必须要有笔,工具有了就可以画圆了。代码开发出来的功能肯定是为了服务生活,那就必须来源于生活。对应起来,就不那么麻烦了。 然后

2017-03-02 15:23:00 1071

原创 Android studio NDK成长记录(五)将C中的Log打到Logcat

在Android studio中编写C代码时,如果想用printf()方法打印log进行调试,正常情况下不能像VS2015那样或者像Android中那样打印到logcat上,所以需要一定的配置对ndk-bundle\platforms\android-16\arch-arm\usr\lib中的liblog.so进行调用来打印log。具体方法如下:下面的代码不能直接全抄,谨慎抄写!需

2017-03-02 15:17:47 363

原创 Android基础动画实现和剖析

在这儿先提供一些基础的Android动画开发技术,后续会再加一片高级的动画开发。如有不对之处,还请见谅,并欢迎指出,共同学习。

2017-03-01 14:52:55 212

SqlHelper.java

用于操作据库的一个工具类,可以用于连接数据库,查询数据库等等数据库的操作。

2015-05-28

空空如也

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

TA关注的人

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