自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wangcheng_的专栏

Android技术积累

  • 博客(32)
  • 资源 (4)
  • 收藏
  • 关注

原创 Android以太坊钱包全部功能-基于web3j实现

文章目录需要用到的工具GanacheMetamask钱包功能的具体实现引入依赖创建钱包第一种创建方式第二种创建方式keystore导入钱包助记词导入钱包私钥导入钱包Ganache环境链接infura第三方私链以太坊钱包转账监听交易查询余额查看交易详情智能合约查询交易记录这段时间学习了利用web3j来实现Android以太坊钱包的功能。所以这里做一些相关记录,方便以后查看。需要用到的工具用工具...

2018-09-19 22:42:20 9411 18

原创 RecyclerView常用功能全面总结

简介RecyclerView可以说是做Android应用开发使用最广的几个控件之一。它是在Android 5.0版本引入进来的,位于support-v7包中,可以通过在build.gradle中添加如下代码将它引入到项目中: implementation 'com.android.support:recyclerview-v7:27.1.1'和ListView的比较在Rec...

2018-06-24 21:15:11 1707

原创 ViewModel+LiveData

Android在前段时间正式发布 Android 架构组件 1.0 稳定版,里面包含Lifecycles,LiveData,ViewModel,Room。这里主要记录一下LiveData和ViewModel配合使用。LiveDataLiveData 是一款基于观察者模式的可感知生命周期的核心组件。LiveData 为界面代码 (Observer)的监视对象 (Observable),当...

2018-02-27 11:07:03 4406

原创 Android最新相机(Camera)拍照、拍视频全面总结

介绍拍照或者拍视频应该是大多数APP都需要去实现的功能,可以说这是既常用又容易出错的地方。比如在Android 6.0之后需要动态申请权限,Android 7.0之后将文件路径由file://修改为content://等等。特别是Android自身对相机都设计了两套API,android.hardware.Camera和android.hardware.camera2,由此可见需要对相机功...

2018-06-27 21:47:43 7055

原创 如何提升Android Studio速度

现在Android Studio的构建速度已经比以前快了很多,但当项目较大时还是需要做一些优化处理,在优化之前需要分析Gradle执行构建生命周期的每个阶段和每个构建任务所需的时间。分析构建耗时1、清空构建,相当于初始化,这样可以确保能分析到完整的项目构建过程gradlew clean2、使用下面命令执行构建,并且生成构建过程耗时报告gradlew --profil...

2018-06-09 22:41:02 1162

原创 Android 动画使用总结(一)属性动画

介绍属性动画是在API 11加入的新特性,它对原来的View动画做了很大的增强。它的API 主要都放在android.animation下,如图: 这其中比较重要的有: 类 介绍 ValueAnimator 它是改变值,然后通过这个值去改变对象的属性值,从而达到动画效果 ObjectAnimator ValueAnimator的子类,它是直接作用...

2018-05-21 23:11:46 208

原创 IntentService使用详解

介绍在Android中可以通过Service和IntentService创建服务:Service 这是适用于所有服务的基类。扩展此类时,必须创建一个用于执行所有服务工作的新线程,因为默认情况下,服务将使用应用的主线程,这会降低应用正在运行的所有 Activity 的性能。IntentService这是 Service 的子类,它使用工作线程逐一处理所有启动请求。如果您不...

2018-05-14 22:58:03 642

原创 深入理解Android消息机制

Android中与消息机制相关的主要类有Looper、Handler、Message和MessageQueue。LooperLooper是线程消息循环处理器,正是由它不停的去从MessageQueue中获取Message,然后交给Handler处理。每个线程只能有一个Looper,在Android中只有主线程默认创建有Looper对象,其余线程需要自己创建。下面结合源码来深入理解一...

2018-05-04 22:25:03 180

原创 深入理解Android ANR

ANR简介ANR(Application Not Responding)意思是程序未响应,只要在主线程做了耗时操作,造成主线程拥堵就会发生ANR,常见的触发条件有如下:InputEvent, 程序在5S内未对用户的触摸和输入事件做出反馈即会触发ANR ActivityManagerService.java // How long we wait until we time...

2018-04-30 23:06:26 639

原创 深入理解Java内存模型和Java对象

运行时数据区域Java虚拟机在执行Java程序时会把它所管理的内存划分为多个不同的区域,这些区域的用途和生命周期都不相同。大概如下图: 分别介绍下各个数据区域存在的意义以及在JVM内存管理中承担的作用.虚拟机栈虚拟机栈是线程私有的,而且它的生命周期和线程相同.虚拟机栈是描述Java方法执行的内存模型。每个方法在执行时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接和方法出...

2018-04-25 21:45:19 1132

原创 IE8适配总结(一)

前端的适配主要包括各个浏览器和不同版本之间的适配,重点考虑IE8,所以这里总结几个目前知道的IE8适配方面的知识。HTML5新标签很多HTML5新增的标签在IE8中都不支持,比如header、section、footer等。 例如下面在html文件中简单的使用上面提到的这几个标签,看下在IE8和其他版本中的效果。 html代码:<html lang="en"&gt...

2018-04-17 22:14:21 2418

原创 Java 线程基础

start()和run()的区别start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。 run() : run()就和普通的成员方法一样,可以被重复调用。单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程!通过下面的代码就可以验证上面的结论: static class MyThread ext...

2018-04-16 22:27:06 160

原创 Java泛型

介绍Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制在编译时检测参数类型是否正确。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。使用泛型的好处: 1、类型安全 2、避免了使用强制转换 在编译时有效上面提到了泛型是在编译时提供检测,通过下面代码来验证: List&l...

2018-04-05 22:11:56 130

原创 单例模式

介绍单例模式是最常见也最简单的一种设计模式,这种模式涉及到一个单一的类,这个类负责创建自己的对象,并确保只有单个对象被创建,而且创建的这个对象可以在任意地方直接使用,而不需要再去创建该类的对象。总结一下它有三个特点:1、单例类只能有一个实例对象2、单例类的实例对象只能是自己创建3、单例类的实例对象必须可以供其他任何对象使用单例模式有很多好处,首先它能够避免对象的重复创建,从而减...

2018-04-01 17:28:51 118

原创 Java代理模式

定义为其他对象提供一种代理以控制对这个对象的访问 这样看也许比较绕,但把它转换到我们现实生活中就比较好理解了。就好比程序员、产品经理和用户之间的关系,产品经理作为程序员的代理和用户沟通,而避免了用户直接找到程序员修改需求的问题。 在java中代理又分为静态代理和动态代理,先通过一段代码来实现一个简单的静态代理。静态代理就拿程序员、产品经理和用户来做示例,虽然他们职...

2018-04-01 14:30:33 151

原创 微信小程序 template添加点击事件

介绍template是微信小程序提供的模板,可以在模板中定义代码片段,然后在不同的地方调用。简单使用定义template因为项目中可能会需要到不止一个template,所以最好新建一个文件夹来存放template相关的文件。注意这里只是单独的创建各个文件,并不是创建Page或者Component. 创建好之后的文件目录如图: 这里演示一个用template当列表的i...

2018-03-30 23:14:52 27026 10

原创 简单工厂模式

工厂模式简介在Java中要得到一个对象最简单的办法就是直接new一个对象,比如:A a = new A();那么需要在10个类中用到,我们就要在这10个不同的类中new A(),如果有一天因为某些原因需要将A类名改为B,那么我们就需要在这10个类中一一去改,这样麻烦又容易出错。这个时候就可以用到工厂模式,其实它就是对new A()再做了一层封装,只需要调用工厂模式提供的方法去得到对...

2018-03-29 22:58:40 797

原创 ArrayList源码解析

ArrayList简介ArrayList是一个容量能够增长的动态数组。它继承了AbstractList,实现了List、RandomAccess, Cloneable, java.io.Serializable。 基本的ArrayList,长于随机访问元素,但是在List中间插入和移除元素时较慢。同时,ArrayList的操作不是线程安全的!一般在单线程中才使用ArrayList,而在多线...

2018-03-28 22:22:28 495

原创 Java线程池基础之ThreadPoolExecutor

线程池介绍线程池就是用来装线程的池子,简直太形象了。在Java中经常接触到的是ThreadPoolExecutor,查看源码知道ThreadPoolExecutor其实继承了抽象类AbstractExecutorService,然后AbstractExecutorService又实现了ExecutorService接口,而ExecutorService又是继承了Executor接口,所以Jav...

2018-03-25 21:45:00 168

原创 Java传值还是传引用?

Java传值还是传引用? 先看下面的代码:public class Demo { public static class Person{ String name; } //传int类型 public static void changeValue(int a){ a = 99; } //传对象类型 ...

2018-03-22 21:27:40 2140

原创 Java线程优先级

线程优先级介绍关于线程的优先级先看一段Thread中源码的注释 Every thread has a priority. Threads with higher priority are executed in preference to threads with lower priority. Each thread may or may not also be marked as ...

2018-03-22 21:24:18 207

原创 Java线程之synchronized关键字

synchronized的原理在java中synchronized是用来给对象、方法、或者代码块加上同步锁的,通过synchronized可以在多线程中实现对对象、方法、或者代码块的互斥访问。 例如,现在有两个线程A和线程B,它们都会访问“对象obj的同步锁”。假设,在某一时刻,线程A获取到“obj的同步锁”并在执行一些操作; 而此时,线程B也企图获取“obj的同步锁” , 线程B会获取失...

2018-03-22 21:22:04 146

原创 HashMap源码理解

HashMap介绍HashMap是一个散列表,它是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。Has...

2018-03-21 21:46:50 214

原创 自定义View的理解

View的绘制流程是从ViewRoot的performTraversals方法开始的。MeasureSpace代表一个32位的int值,高2位代表SpaceMode,低30位代表SpaceSize。SpaceMode分三类:==UNSPECIFLED==:父容器不对View的大小做限制,要多大给多大==EXACTLY==:父容器已经检测出了View的精确大小,这个模式下Vi...

2018-03-11 21:28:43 158

原创 Android监听通讯录修改,然后上传修改部分

需求由于项目需要所以在app登录之后都有获取一份本地的通讯录然后上传到服务器。但是最近后台的小伙伴一直反馈说如果每次前端都把整个的通讯录上传过去,然后后台再做比较、去重、再插入数据库的话这样给服务器的压力会比较大。仔细一想其实也是,如果用户的通讯录没有改变那么上诉的所有操作都是白费的。于是我们前端要做到除了用户第一次全部上传外,以后只有在通讯录发生改变的时候才上传修改的部分通讯录。为了实现以上的需求

2017-12-12 21:04:22 2096

原创 AIDL的基本使用

本篇主要是简单的演示了AIDL的基本使用,最终实现的效果是当app运行时有两个进程,从app进程发送数据到remoteapp进程,然后返回数据,在app进程展示。其实这就是一个跨进程的数据交互过程,下面介绍一下具体步骤。新建工程,然后再新建一个module 命名为remoteapp 设置为com.android.library 做为新开的进程,然后开始具体的AIDL操作。1,在remoroapp中创

2017-11-28 21:25:21 201

原创 Android视频加水印和压缩

Android视频加水印目前来说大致有3种方式可以实现:利用Android原生Api MediaCodecOpenGL FFmpeg这里只是把自己在网上搜集到的资料做个总结,和自己的修改记录一下。第一种利用MediaCodec 这种原生的实现方式暂时还没找到实现的方式 第二种利用OpenGL http://blog.csdn.net/qqchenjian3

2017-10-22 14:44:13 7583

原创 Android Bitmap理解

Bitmap介绍Bitmap是Android系统中的图像处理中最重要类之一。Bitmap可以获取图像文件信息,对图像进行剪切、旋转、缩放,压缩等操作,并可以以指定格式保存图像文件。创建Bitmap有两种方法可以创建Bitmap对象,分别是通过Bitmap.createBitmap()和BitmapFactory的decode系列静态方法创建Bitmap对象。Bitmap的静态方法c

2017-10-16 20:38:46 796

原创 RxJava学习之线程控制

RxJava线程控制

2017-10-12 21:39:43 241

原创 Rxjava学习(一)

Android项目中引入Rxjava 在Android中使用RxJava2非常简单, 只需要在Gradle配置: compile 'io.reactivex.rxjava2:rxjava:2.1.0' compile 'io.reactivex.rxjava2:rxandroid:2.0.1'主要类介绍 Observable 被观察者(事件源),不处理背压 Obse

2017-10-12 21:14:36 275

原创 Android之Fragment

一,Fragment的介绍 Fragment,俗称碎片,自 Android 3.0 开始被引进并大量使用。之所以会引进它主要是为了解决Android碎片化严重的问题。 你可以把Fragment当成Activity的一个界面的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成,更帅气的是Fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必

2017-10-11 21:32:01 260

原创 Android之Activity

Android之ActivityActivity作为Android四大组件之一可以说是最常见也是最重要的,它主要承担着用户于屏幕交互的职责,对它的理解主要从以下几个方面开始:Activity的使用Activity的生命周期Activity的启动模式对于Activity的使用 创建Activity 一般会指定应用中的某个 Activity 为“主”Activity

2017-10-09 22:50:43 183

连连看游戏课程设计

基于C++的连连看课程设计 ,采用了MFC框架,

2013-01-24

嵌入式面试

嵌入式面试相关问题,包含很多公司面试的必问问题

2013-01-14

SSH客户管理

SSH框架下的客户关系管理系统 ,struts2,spring,hibernate

2012-09-26

空空如也

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

TA关注的人

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