自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

_StriveG的专栏

Android Coder-new Object

  • 博客(118)
  • 资源 (4)

原创 Android JNI学习笔记(五)-这两篇,足够了解jni

我学jni就是通过两篇文档来学的,我相信通过仔细阅读这两篇,绝对可以了解jni。Android jni tips JNIToc 官方文档我会乱说?剩下的就是c&c++的学习,以及其他方面了。

2016-12-03 10:07:58 748 1

原创 脚本打怪-shell学习

shell脚本1.什么是shell什么是shell呢?我们这里说的shell是指shell脚本,和window下的bat批命令处理类似,shell用于linux/unix系统,用来方便我们的操作,试想一下,原来需要一堆的命令,我们将其写成一个shell脚本,轻松搞定,是不是很带感。2.shell能干什么shell能干什么?shell能干的就是简化我们的操作,将我们从繁琐、单一的操作中解放出来。3.s

2016-12-03 00:58:28 1865

原创 Android JNI学习笔记(四)-数据类型映射以及native调用java

1. 前言前几篇学习了jni开发的基本流程、动态注册native函数以及相关编译文件的编写,咱们也算是知道了jni开发,但是还不够,今天咱们来学习下,java和jni的数据类型映射(说白了就是对应关系),以及如何在jni层调用java层的一些东西。偷偷告诉你们,这些全在jni.h文件里。2. 数据类型映射首先是我们的基本数据类型,其关系如下表描述这样。上面关系的相关代码在jni.h的44-51行,如

2016-11-30 00:03:18 4649

原创 Android JNI学习笔记(三)-编译文件Android.mk、Application.mk 与camke

1. 前言在android2.2中,加入了cmake编译,而以前都是用Android.mk、Application.mk的,今天就来记录下,他们的配置选项。2. Android.mkAndroid.mk在jni目录下,用于描述构建系统的源文件以及 shared libraries 。文件格式如下:以LOCAL_PATH变量开始 LOCAL_PATH := $(call my-dir)紧接着是C

2016-11-28 17:28:51 12869 5

原创 Android JNI学习笔记(二)-动态注册native函数

1.前言在很久之前的一篇Android 开发艺术探索的笔记当中,学习了简单的jni开发流程,但是那会的步骤极其繁琐复杂,而且生成的头文件函数太长,那么,有没有方法能解决呢,让开发过程变得简单易懂。当然是有的,那就是今天的主角。JNI_OnLoad函数。顺便说一下,现在as对 jni开发的支持是越来越好了。2. 首先声明native函数现在,我在activity里声明了一个native函数。publi

2016-11-26 11:07:49 4256 2

原创 深入理解java虚拟机笔记(三)-类加载机制

图片来自网络。 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。1. 类加载的时机类从被虚拟机加载到内存,到卸载出内存为止,他的整个生命周期为:加载、验证、准备、解析、初始化、使用、卸载七个过程,其中验证、准备、解析统称为连接。 2. 加载加载是类加载过程的第一个阶段,在这个阶段,虚拟机

2016-11-22 22:42:08 670

原创 深入理解java虚拟机笔记(二)-垃圾回收

ps:文中的图片都来自网络。部分图片来源1. 前言作为一种高级语言,比起c和c++来,很进步的一点就是垃圾回收机制。这省去来了我们很多的工作,不过,我们仍然需要了解垃圾回收,这对我们的成长很有帮助。2. 引用计数法引用计数法在很多高级语言都有,如python,java也不例外。对象内部维护有一个被其他对象引用的引用计数,当这个引用计数为0的时候,表示对象可以被回收。引用计数法存在一个问题,就是循环引

2016-11-19 19:20:27 1712 3

原创 深入理解java虚拟机笔记(一)-java内存区域与内存溢出

1. 前言这是深入理解java虚拟机一书的笔记,来自第二章。因为这本书讲的比较深奥,这是第二次看,需要记录一下笔记。2. 运行时数据区域java虚拟机所管理的内存分为以下几个区域。ps:图片来自网络2.1 程序计数器程序计数器是一块较小的内存空间,他可以看做是当前线程所执行字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选去下一条要执行的字节码指令,分之、循环、跳转、异常处理、线程

2016-11-17 22:15:45 2254 1

原创 说说Realm在Android上的坑

1.前言新项目使用了大名鼎鼎的realm,在网络上看到大量安利realm的文章,但是在使用的过程中却遇到了很多问题,这里记录下两个多月以来遇见的问题。希望大家能够理性选择,不要人云亦云。当然,,realm文档中也给出了一些当前的限制,但是,我们今天要说的,不仅仅是这些。realm-java文档地址2.线程的限制通常来讲,我们查询数据库会开一个子线程查询,这次,我们也没例外,简简单单的写两行代码,如下

2016-11-13 13:03:50 12789 5

原创 学习Android Architecture Blueprints(四)-databinding分支

1. 前言上一篇博客中,简单的学习了下databinding的用法,我自己也是爱上了他。咱们今天继续学习Android Architecture Blueprints。2. 架构图我们能够看到,在vp和model之间,多了viewmodel这一层,这一层就是用们的databinding来实现的。从图上来看,是mvpvm的形式。有兴趣的同学可以看下大帅的这片文章。链接地址3. 如何使用从架构图上的关系

2016-11-06 14:20:20 763

原创 Android DataBinding 学习笔记

学习自Google文档以及大帅的博客,文末地址链接。1. DataBinding自从Google加入了DataBing,还是很受开发者喜爱的,所以,咱也来学习下DataBinding是什么鬼东西。在gradle文件的android节点下。添加如下配置,就开启了DataBinding。 dataBinding { enabled = true }下面有几点说明:下文所

2016-11-01 00:04:43 2137

原创 学习Android Architecture Blueprints(三)-contentproviders分支

1. 前言因为我项目中没用过Dagger2,所以todo-mvp-dagger分支就暂且放一放,先来看contentproviders分支.2. 架构图从中我们可以看到,比todo-mvp-loaders分支,在loader和model之间,多处了ContentProvider。而我们要用的就是Loader框架中的CursorLoader。CursorLoader 文档废话不多说,直接上代码。3.

2016-10-27 22:15:38 853

原创 学习Android Architecture Blueprints(二)-rxjava 和 loader 分支

1. 前言今天咱们继续,看下todo-mvp-rxjava分支与todo-mvp-loaders分支。rxjava分支引入了很火的rxjava。loaders分支引入了3.0就加入进来的Loader框架。2. rxjava分支不知道大家有没有用rxjava,rxjava用起来真的很不错,尤其是用rxandroid做线程调度的时候,配合上RxAndroid 全家桶,真的爽翻了。RxJava Esse

2016-10-26 21:58:48 1481

原创 学习Android Architecture Blueprints(一)-mvp分支

1. 前言在几个月前,google sample组织下,创建了一个叫做android-architecture的仓库,第一时间引爆了Android圈,这个项目在于指导使用不同的架构指导我们如何解决测试、维护以及扩展的难题,让我们一一学习下。项目地址2. todo-mvp分支在去年的时候,mvp火了起来,然而,在国内的文章当中,大多是的试讲m-v-p分开来写,我今年毕设使用这种模式,发现一个很严重的问

2016-10-25 23:17:54 1803

原创 走进设计模式(四)-行为型模式(下)

命令模式备忘录模式状态模式访问者模式中介者模式解释器模式0. 命令模式 将一个请求封装成一个对象,从而让用户使用不同的请求把客户端参数化,对请求排队或者记录请求日志,以及支持可撤销的奥做。Receiver 接受者角色 Command 命令类抽象接口 ConcreateCommand 具体命令角色 Invoker 请求者角色 Client 客户端public class Re

2016-10-24 22:11:13 497

原创 走进设计模式(三)-行为型模式(上)

行为型模式:策略模式模板方法模式观察者模式迭代器模式责任链模式1. 策略模式 定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换。策略模式让算法独立于使用它的客户而独立变化。Context 用来操作策略的上下文环境Stragety 策略的抽象ConcreteStragetyA、B 具体的策略实现我们先定义一个接口Stragetypublic interface

2016-10-23 18:56:21 514

原创 两点技巧-给TextView添加Tag,点击空白收起键盘

1. 前言这篇给大家带来两个开发中用到的东西,地址如下:全局点击空白收起键盘TextView 带标签希望大家star一下。2. 点击空白收起键盘大家有没有被测试提这种bug,我要点击空白收起键盘!!!其实很简单,代码如下。 private static void setTouchListener(final Activity context){ context.getWi

2016-10-23 13:37:18 2678

原创 走进设计模式(二)-结构型模式

1.前言结构型模式有以下几种。适配器模式装饰模式代理模式外观模式桥接模式组合模式享元模式下面一一学习。2. 适配器模式 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。结构如下:Target 目标角色Adaptee 需要适配的接口Adapter 适配器举个例子,我们手机充电器接口 就充当这这一角色。

2016-10-20 21:39:51 511

原创 走进设计模式(一)-创建型模式

设计模式很抽象,结合代码才比较清楚。1. 前言设计模式无处不在,我们也需要简单了解下设计模式。设计模式中,创建型模式有以下几种。工厂方法抽象工厂单例模式建造者模式原型模式2. 工厂方法 用工厂方法,代替new操作AbsFactory 是一个抽象类Factory 是工厂类,实现了抽象类的方法QCar、Q2Car 是具体的对象Factory代码如下我们传入Class,通过反射生成

2016-10-18 23:13:46 833

原创 了解EventBus 3.0 (二)-发送事件

虽然我在这里写下Eventbus,但是,还是觉得老司机教你 “飙” EventBus 3 才是很完美的文章。1. 我们能发送哪些事件post发送普通事件postSticky 发送粘性事件粘性事件,当有订阅者订阅的时候,会从粘性事件列表中取出最后(最新)的事件,发送出去。2. EventBus#postcurrentPostingThreadState是ThreadLocalPosting

2016-10-15 21:42:35 2090

原创 了解EventBus 3.0 (一)-订阅流程

虽然我在这里写下Eventbus,但是,还是觉得老司机教你 “飙” EventBus 3 才是很完美的文章。1. 前言EventBus是平常开发中很常用的框架,用了简直爱不释手。在这里,以Eventbus3.0 为例,来了解一下。首先了解点简单的用法。gradle文件中引入compile 'org.greenrobot:eventbus:3.0.0'注册与解注//注册EventBus.g

2016-10-15 18:13:13 1829

原创 Android DeepLink框架-DeepLinkDispatch源码浅析

1. 前言-什么叫DeepLinkDeepLink,该网址可能需翻墙。最常见的应用就是在网页中跳转到App的某个页面,电商类应用可是都用了的。用法如下:来自文档 我们通过如下代码获取data信息。 Intent intent = getIntent(); String action = intent.getAction(); Uri data = intent.getData();额,这里就不

2016-10-12 22:32:48 5801 3

原创 Android网络开源库-Retrofit(六)源码浅析-上

Retrofit配置RxJava真的很好用。 希望亲们看的时候,自己也看下代码,这样效果最好了。1. 初始化过程一般来说,我们通过Builder去初始化Retrofit。我们看看支持我们配置那些呢。如下图: platform 平台信息(java,android,ios)callFactory 进行实际请求的(一般为okhttpclient)baseUrl baseUrlconvertFac

2016-10-10 23:53:02 2175

原创 Java并发基础(九)-Fork/Join框架

1. 什么是Fork/Join框架Java 1.7 中提供了Fork/Join框架,实现了work-stealing算法(工作窃取算法),什么意思呢?就是说,我可以把当前任务分割成多个小任务,让空闲的线程也进行工作,是不是很赞,这样,就能最大限度的利用资源,从而提升效率。哈,这里就补全线程池基础那篇文章了,java 1.8 提供的newWorkStealingPool,就是用这个实现的。2. 包括哪

2016-10-08 22:42:17 1195

原创 Java并发基础(八)-locks包

1. 前言Java锁的种类 java中的锁种类是真的多。而locks包下也有一些。包结构如下: AbstractOwnableSynchronizer 一个线程拥有的同步器,这个类提供了创建锁和相关同步器的基础AbstractQueuedLongSynchronizer 所有的同步状态都是用long变量来维护的,而不是int,在需要64位的属性来表示状态的时候会很有用AbstractQueu

2016-10-07 23:07:26 1459

原创 Java并发基础(七)-原子类和并发集合类

灌水文1. 原子类 java.util.concurrent.atomic包下面提供了许多原子类,这些类是通过CAS实现的。关于CAS,大家可以google,详细学习下。图中Atomic开头的是 jdk1.5开始提供的原子类。而其他则是在jdk1.8中新增加的。Atomic开头的类中,大多都用了Unsafe类。这个类提供了硬件级别的原子操作。1.8中增加的都是Striped64的子类,St

2016-10-07 16:20:49 1272

原创 Java并发基础(六)-Exchanger和Semaphore

1. Exchanger Exchanger提供了 一个同步点 , 在这个同步点,两个线程可以交换数据,每个线程通过exchange()方法的入口提供数据给另外的线程,并接收其它线程提供的数据,并返回。看个简单的例子: public static void main(String[] args){ final Exchanger exchanger = new Excha

2016-10-07 15:28:14 833

原创 Java并发基础(五)-CountDownLatch、CyclocBarrier、Phaser的使用

1. CountDownLatch 一个同步工具,允许一个或多个线程去等待其他线程中执行的一系列操作完成。什么意思呢?就是说,允许这个线程阻塞,直到,其他线程的所有操作都完成之后,在继续执行。举个例子。 public static void main(String[] args) throws InterruptedException { final CountDownL

2016-10-07 14:19:37 934 3

原创 Java并发基础(四)-volatile和synchronized

0. 内存可见性Java中,所有的变量都是存在主存中,这对所有的线程都是共享的,而且每个线程都有自己的工作内存。当线程与其他线程共享一个变量时,便会把主内存的变量复制到线程内存中去。当发生对变量的修改时,会同步到主内存,主内存再同步到其他线程内存中去。可见性,指的是线程之间的可见性,一个线程的修改状态对另一个线程也是可见的。1. volatile volatile 修饰的成员变量在每次被线程访问

2016-10-06 11:08:50 422

原创 Java并发基础(三)-线程安全

1. 什么是线程安全 如果一个对象可以安全的被多个线程同时使用,那么它就是线程安全的 当多个线程访问一个对象的时候,如果不考虑这些线程在运行时环境下的调度和交替执行,也不需要额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。2. Java中的线程安全根据线程安全的安全程度由强至弱来排序,可以分为5类:不可变绝对线程安全相对

2016-10-05 21:58:46 793

原创 Java并发基础(二)-线程池基础

1. 前言从Java 1.5 开始,并发包里面提供了Executors类,这个类提供了几种线程池的实现。下面对ExecutorService以及几种线程池进行说明。2.ExecutorServiceExecutorService 接口继承自 Executor 接口,它提供了更丰富的实现多线程的方法。ExecutorService的生命周期有三种状态:运行 创建之后便进入运行状态关闭 当调用shu

2016-10-05 19:50:02 933

原创 Java并发基础(一)-线程基础

只要涉及到线程,其运行结果就是不确定的,虽然说java很早就提供了线程以及并发的支持,但是我们需要知道,线程是完全交给调度器的。

2016-10-05 12:30:13 978

原创 Android网络开源库-Retrofit(五)简易封装

1.前言Rrtrofit的扩展性很强,如果对retrofit不熟悉的话,是很难应对各种各样的需求的。因此,在这里,做一下简单的封装。主要为了下面三点需求:使用简单加密处理错误处理2.怎样才能简单使用为了简单粗暴,我做了以下工作。使用单例Retrofit引入RxJava在这里,如何Retrofit单例化,就不多说了,大致代码如下:Retrofit.Builder builder = ne

2016-10-04 15:12:46 2948

原创 Android网络开源库-Retrofit(四)文件相关

以前写过一些retrofit的相关文章,当时只是自己学习研究的,最近项目,加入了retrofit,因此遇到了一些问题,需要记录一下。1.前言在以前,写过retrofit上传文件相关,但是,需求总是变化的。前面的,介绍了上传进度的监听,但是,那时候是监听单文件进度。虽然能满足我们大多数需求,但是,需求总是变化的。我们现在需要监听统一的进度。2.尝试用Retrofit来现在,我们改变以前的的做法,现在以

2016-10-03 17:57:13 1294

原创 Android WebView的两点技巧-资源拦截与js注入

1.前言WebView是个很常用的控件,但是缺不是那么简单,那么,今天来给大家介绍下最近在做的时候,遇见的几个问题。注意,并不是所有的情况下,webview加载的都是自适应的网页。比如说,加载<p></p><img></img> 。2.资源拦截问题 问题描述 网页的某些资源在手机上不合适,比如说css资源过于庞大,客户端加载太慢,比如说,你的这个css放在客户端不合适,等等。那么,我们怎么解

2016-10-02 23:21:03 4738

原创 Android基础-Android中的HashMap浅析

以下源码基于Java 1.80.HashMap中的关键变量MINIMUN_CAPACITY = 4 (最小容量)MAXIMUN_CAPACITY = 1 << 30 ; (最大容量)private static final Entry[] EMPTY_TABLE= new HashMapEntry[MINIMUM_CAPACITY >>> 1]; 这里的这个就是hash表,是一种数组链表结构(

2016-08-22 00:00:23 5714

原创 Java基础-LinkedList源码浅析

0.LinkedListLinkedList即实现了List接口,也实现了Deque接口,其底层实现为双向链表。链表的特点就是在中间插入数据快,而查询数据慢。1.LinkedList中的Node private static class Node<E> { E item; Node<E> next; Node<E> prev; No

2016-08-20 18:34:45 1144 2

原创 Java基础-ArrayList源码浅析

以Java8为版本分析1.认识ArrayList的关键变量在ArrayList中,关键变量有两个。//存储对象的数组transient Object[] elementData;//数组长度private int size;之所以用transient关键词修饰,就是为了防止其被序列化。当然,还有下面的一些变量//默认容量private static final int DEFAULT_C

2016-08-19 22:55:45 1246 2

原创 Java基础-理解散列与散列码

1.从HashMap说起我们知道Map以键值对的形式来存储数据。有一点值得说明的是,如果要使用我们自己的类作为键,我们必须同时重写hashCode() 和 equals()两个方法。HashMap使用equals方法来判断当前的键是否与表中的键相同。equals()方法需要满足以下5个条件自反性 x.equals(x) 一定返回true对称性 x.equals(y)返回true,则y.equa

2016-08-16 23:28:48 10498 3

原创 Java基础之-容器类概述

0.容器类Java中,按照保存对象的不同,分为Collection和Map两种。其中Collection是一个独立元素的序列,又按照一定的规则,分为一下三类:List 按照插入的顺序保存对象Set 不能有重复元素Queue 按照队列规则来确定对象产生的序列。而Map,是一组成对的键值对 对象。1.添加元素在Java.util包中的Arrays和Collections有一些方法,可以在一个Co

2016-08-15 20:58:29 1074

php微信公众号开发入门教程

微信公众号入门级教程,相信能带很多新人进入微信公众号开发的世界里,加油吧!

2015-10-06

微信token验证

这个是微信token验证的代码,但是官方不知道给搞哪里去了,我就来发一份吧、

2015-09-02

Android流量统计

/** * 返回所有有互联网权限的应用的流量信息 */ public List<TrifficInfo> getTrifficInfos(){ //获取到配置权限信息的应用程序 List<PackageInfo> packageInfos=pm.getInstalledPackages(PackageManager.GET_PERMISSIONS); //存放有Internet权限信息的应 List<TrifficInfo> trifficInfos=new ArrayList<TrifficInfo>(); for (PackageInfo info:packageInfos){ String [] permissions=info.requestedPermissions; if (permissions!=null && permissions.length>0){ for (String permission:permissions){ if ("android.permission.INTERNET".equals(permission)){ //找到应用程序里面又网络权限 TrifficInfo trifficInfo=new TrifficInfo(); trifficInfo.setPackname(info.packageName); trifficInfo.setAppname(info.applicationInfo.loadLabel(pm).toString()); trifficInfo.setIcon(info.applicationInfo.loadIcon(pm)); int uid=info.applicationInfo.uid; trifficInfo.setRx(TrafficStats.getUidRxBytes(uid)); trifficInfo.setTx(TrafficStats.getUidTxBytes(uid)); trifficInfos.add(trifficInfo); trifficInfo=null; break; } } } } return trifficInfos; }

2015-08-31

Qt做的一个员工管理系统

qt做的一个员工管理系统,数据库时mysql,里面一套课程设计齐全,文档什么的都有。可以直接拿来改下数据库,就是你的课程设计了,很方便吧

2015-05-10

空空如也

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