自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 HandlerThread简单源码阅读

Handler是android中常用到的多线程传输数据的工具类,那么跟它名字很相近的HandlerThread呢?其实很简单,HandlerThread是继承自Thead的,也就是说HandlerThread本质上是个线程,需要被开启,但是不同的是它内部会自动提供一个looper,并用looper在创造一个Handler,getLooper和getThreadHandler就是HandlerT...

2018-08-28 10:29:37 145

原创 SharedPreferences的commit和apply

SharedPreferences在安卓中是最常用的保存数据 的方式。下面就了解一下SharedPreferences的commit和apply这两个提交数据的方法。其实SharedPreferences和我们常用的Context都是接口,所以具体的实现方法其实是在SharedPreferencesImpl和ContextImpl中的下面看一下源码:public boolean

2017-07-28 11:58:19 483

原创 View中的onDraw()方法的canvas的来由

在自定义控件中我们复写onDraw方法时,会获取到一个canvas对象,那么这个对象从哪里来的呢?下面跟踪一下部分源码,了解一下。我们知道view被绘制,最终都是被ViewRootImpl调用的,在ViewRootImpl的drawSoftware中/** * @return true if drawing was successful, false if an error occu

2017-07-21 16:58:07 2421 2

原创 拼图小游戏

自己动手,写出一个拼图类的小游戏。主要步骤如下: 1.将一张完整图片进行有序切割成若干小块;单个图片需要唯一标识itemId,以及拼图成功时的校验Id——bitmapId. 2.图片数组已经具备了,接下来就是打乱有序图片集合,这里进行两两置换,会用到2个bean进行数据交换 3.打乱图片集合后需要判断该集合是否有解,这个就根据唯一表示itemId来进行倒置和算法判断。 4.循环判断每个图片条

2017-07-14 19:47:07 1500

原创 安卓流式布局——标签墙

安卓标签墙也是一个常见的应用场景,所以最近学习写了一个流式布局,并学习一下自定义控件的一种方法,继承ViewGroup. 思路: 1.流式布局1行只能放下固定数量的标签,所以用一个类来标明一行的数据,这样在onLayout方法中就只需要将每一行的数据放到正确的位置上就可以了。这样的一个行的类的属性基本也可以确定了:当前行的标签集合,当前行的宽度,当前行的高度,:class LineBean {

2017-07-13 16:28:21 769

原创 安卓自定义饼状图

闲来想自己写个饼状图,于是就动手开始画了。 主要的逻辑:1.根据比例依次旋转角度画出扇形;2.在扇形区域内设置内容数据;3.当点击某个扇形的时候,就让当前扇形脱离整体,空出一部分 看起来这个逻辑比较复杂,但是真正写下来之后就会发现其实饼状图也简单,主要就是围绕着安卓简单的自定义控件画扇形。效果如下: 接下来就开始代码实现: 首先初始化2个画笔,一个是画扇形的,一个是画扇形的边框的,还有初

2017-06-28 11:11:32 1913

原创 onTouch和onTouchEvent方法调用顺序

安卓中view和viewGroup在点击的时候有两个方法,onTouch和onTouchEventonTouch是设置了onTouchLisenter之后的回调方法。如果设置了onTouchLisenter就会调用ontouch方法,同时onTouchEvent方法不会再被调用如果没有设置onTouchLisenter,就会调用onTouchEvent。就是说ontouch的优先级比onT

2017-04-27 15:11:01 1288

原创 permission Denial

在IPC通讯中,如果出现权限拒绝的问题,一个是没有声明权限,这个一般情况下Log会提醒;另外一个是跨应用跨进程的时候,能够被访问的四大组件在清单文件中需要声明一个属性, android:exported="true" 这里表示当前组件可以输出,能够被访问

2017-04-08 11:26:57 638

原创 ContentProvider

ContentProvider内容提供者,底层是通过Binder来实现的,通过系统的封装,比起AIDL文件使我们更加方便使用。对于ContentProvider,自定义的的时候,会涉及到6个方法,onCreate(),getType(),query(),delete(),update();其中onCreate()是在主线程中执行的,其他的5个方法都是执行在Binder线程池中的,getType()

2017-04-07 17:24:36 200

原创 在AIDL中声明方法中传入的参数in,out

首先,用到Binder的时候,用户端发起请求,当前线程会挂起,直到服务端执行完毕,所以如果远程方法很耗时的话,不适合在主线程中发起请求;并且不管Binder是否耗时,都需要采用同步方式去实现。在AIDL文件中,如果用到别的文件中的对象,必须手动导入别的对象所在包AIDL中除了基本数据类型,其他类型的参数必须标上方向,in表示输入型参数,out表示输出型参数,inout表示输入输出参数

2017-04-07 11:25:53 1399

原创 CopyOnWriteArrayList

CopyOnWriteArrayList这个数组支持并发读写,所以在AIDL进行进程间通讯的时候,如果会用到高频率的读写列表数据的时候,可以使用这个数组来自动进行线程同步的处理。需要注意的是在用AIDL进行进程间通讯的时候,能够使用的List只有ArrayList,但是CopyOnWriteArrayList却并非继承自ArrayList,这里的原因是AIDL所支持的是抽象的List,因此虽然服务

2017-04-06 17:26:29 226

原创 进程间通讯

进程间通讯分为以下几种方式: 1.Bundle,在Intent中通过通过Bundle传递数据,最简单的比如说我们自定义的app可以启动别的大型app,比如百度地图。Intent实现的数据传递必须序列化,这是最简单的进程间通讯方式。这里特别说明一种情况:在a进程中需要计算结果,然后计算完成后启动B进程并且将结果传递给B进程,这个过程计算的结果如果不能通过Bundle传递,如果用其他IPC

2017-04-06 16:57:09 237

原创 popwindow显示之后,退出当前activity出现阴影

在activity中,当popwindow显示再隐藏之后,退出activity时,如果有阴影在返回一瞬间显示的话,问题在于dismiss时候没有清除flag

2017-04-06 15:57:17 391 1

原创 关于intent的隐式调用

简单说明一下隐式Intent调用Activity的IntentFilter匹配规则 1.action,是一个intent的必备条件,有且必须匹配,只要有一个action匹配就可以2.category,通常情况下,自定义一个Activity如果想要被隐式调用调起的话,起码要声明一个category""因为category的匹配规则是必须所有声明的category都必须能够匹配到对应的ac

2017-03-31 11:46:58 596

原创 scroller类的用法

读安卓群英传滑动机制之-=------==========scrollerscroller类其实作用和scrollBy、scrollTo的作用是差不多的,区别就是通过scroller移动可以有一个缓冲动画,并不是一下就从起点到终点了。说到这里,就顺便说下scrollBy,scrollTo,=========scrollBy,scrollTo 注意,这两个方法移动的是内容:

2016-12-15 18:06:14 358

原创 ViewGroup的绘制

读安卓群英传自定义控件-----------------viewgroup控件的绘制需要注意:viewgroup通常情况下不需要绘制,因为它本身就没有需要绘制的东西,如果不设置viewgroup的背景颜色,viewgroup的onDraw方法就不会调用,因此在平时布局文件中,尽量避免不必要的 背景颜色设置,减少onDraw方法调用

2016-12-10 09:37:53 267

原创 view的测量

读安卓群英传自定义view----------view的测量1.追溯view的onMeature方法,最终调用的就是protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth

2016-12-10 09:32:37 286

原创 几个网络访问框架的post请求使用方式

1.retrofit+rxjavabuild.gradle文件: compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'

2016-12-07 16:28:26 1057

原创 popwindow显示出现黑色闪屏效果

在用popwindow时,如果退出当前activity时闪现了一下黑屏,但是程序也是正常的,并没有崩溃,这里的问题在于消失时并没有清除所有的flagpublic void show(View view) { if (mPopupWindow != null && !mPopupWindow.isShowing()) { // 设置显示动画

2016-10-31 15:47:32 2389 1

原创 安卓透明度和16进制的转换

100% — FF95% — F290% — E685% — D980% — CC75% — BF70% — B365% — A660% — 9955% — 8C50% — 8045% — 7340% — 6635% — 5930% — 4D25% — 4020% — 3315% — 2610% — 1A5% — 0D

2016-10-31 10:51:11 434

转载 通过apk安装包获取sha1的值

直接用打包出来的apk查看签名,具体如下:1) 将apk修改后缀为 .rar文件后解压;2) 进入解压后的META-INF目录,该目录下会存在文件CERT.RSA3) 在该目录下打开cmd,输入命令 :keytool -printcert -file CERT.RSA

2016-08-30 16:23:07 3349

原创 android调用js需要注意的方式

在安卓调用js的时候,如果一开始加载url,并且需要调用方法传参,就需要先加载url,然后在WebViewClient的onPageFinished中调用js方法,调用js的方法,webView.loadUrl("javascript:getUser()");//无参webView.loadUrl("javascript:getUrl('"+param+"')");//注意需要加单引号,多

2016-08-26 14:59:25 660

转载 android studio 通过新建Library module的方式来导入SDK

新建Library module以及引用library的步骤:新建一个library形式的module,删掉这个module中src/main目录里面的所有文件(包括删掉java、res、AndroidManifest.xml)复制第三方库的AndroidMainfest.xml、res、src文件(夹)到库目录的src/main目录将src/main目录下的src目录重命名(

2016-07-16 15:15:04 587

原创 scrollview中的子控件填满布局

在使用scrollview时,有时子控件不足以填满全局,但是有些控件,比如按钮想放在最下方,这时候就需要子控件填满scrollview,使用 android:fillViewport="true"使用这个属性就会让scrollview的元素填充满scrollview,填满布局

2016-07-04 18:08:30 1438

原创 listview和edittext一起使用时弹出软键盘问题

如果不想在一进界面就弹软键盘,在清单文件AndroidMnanifest文件中对应的activity中设置属性:                                 android:windowSoftInputMode="adjustResize|stateHidden"

2016-01-20 15:36:47 441

原创 viewpager的无限轮播,能够响应点击事件

之前写过简单的轮播图,可以无限轮播,但是没有处理过轮播时的点击事件,最近遇到了,就又仔细研究了一下,现代码如下:package com.example.test;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.Context

2015-10-14 22:42:58 7074 1

原创 黑马程序员java基础之字符串

------- android培训、java培训、期待与您交流! ---------String 类是最终类,没有类字符串最大特点:一旦被初始化,不会再改变class StringDemo { public static void main(String[] args) { String s="abc"; //s是一个类类型变量,“abc”是一个对象 String s

2015-03-20 11:26:41 379

原创 java基础之反射

Class类:类的类型,如String类的类型就是String.class,代表类在内存中的一份字节码获取字节码的三种方法:类名.class,如Stirng.class创建一个对象,如Person  p=new Person(); p.getClass()使用Class类中的静态方法:Class.forName("完整类名"),如Class.forName("java.util.D

2015-02-05 21:45:01 285

原创 黑马程序员java基础之多线程

进程:是一个正在执行的程序。每个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫做一个控制单元线程:就是进程中的一个独立的控制单元。线程控制着进程的执行。一个进程中 至少有一个线程java VM启动的时候会有一个进程java.exe,该进程中至少有一个线程负责java程序的执行,而且这个线程运行的代码存在于main方法中,该线程称为主线程。其实更多细节说明jvm启动不止一个线

2015-02-04 00:03:45 472

原创 黑马程序员java基础之集合工具类

集合中的两个工具类Collections和Arrays,是对集合进行操作的CCCollections的方法:sort(List list)方法可以对List集合进行自然排序,sort(List list ,Comparator com)方法可以按照自己定义的比较器进行排序max(List list)方法获取最大值binarySearch(List list,key)方法使用二分

2015-01-28 11:51:23 365

原创 黑马程序员java基础之Map集合

Map集合存的是键值对,要保证键的唯一性注意:Map集合添加元素用put,没有add方法。Map常用的三种子类集合:---Hashtable(哈希表):底层是哈希表数据结构,不可以存入空的键值对,线程同步---HashMap:底层也是哈希表数据结构,元素无序,允许使用空键值对,线程不同步,效率高---TreeMap:底层是二叉树数据结构,线程不同步,可以用于给集合中的键进行排序

2015-01-24 23:01:44 349

原创 黑马程序员java基础之集合Set中的TreeSet和泛型

Set集合中的TreeSet的使用以及泛型的使用方法,还有泛型的高级使用泛型限定

2015-01-24 10:54:47 583

原创 黑马程序员java基础知识之集合Collection

集合框架:collection--List:元素是有序的,元素可以重复,因为该集合体系有索引--ArrayList:底层使用数组结构;查询速度很快,增删较慢,线程不同步--LinkList:底层使用链表结构;增删速度快,查询速度慢--Vector:底层是数组数据结构,线程同步--Set:元素无序,不可以重复--HashSet:底层数据结构是哈希表--TreeSet这

2015-01-23 09:02:30 442

原创 黑马程序员java基础之网络编程

网络通讯三要素:IP地址,端口号,传输协议udp,tcp网络传输数据socket服务

2015-01-15 10:32:38 487

原创 黑马程序员java基础之GUI

GUI即时图形化界面图形化界面方便较命令行模式更加简单明了,易于操作。图形化界面提供的队形都在java.awt和javax.Swing中。Awt相对比较依赖于平台。了解创建图形化界面的步骤,通过事件监听机制来完成图形化界面中各种操作

2015-01-13 22:32:30 438

原创 黑马程序员java基础之io流中的其他流

了解IO流中除了字符字节流和File流之外其他的流对象,比如打印流,操作对象流,管道流等

2015-01-10 21:44:37 432

原创 黑马程序员java基础之io流中的File类

1.File类  对文件或者文件夹进行操作         常见方法1.创建:boolean createNewFile(): 在指定位置创建文件,如果该文件已经存在,则不创建,返回false   注意:和输出流不一样,输出流对象一创建文件,如果文件已存在,则会覆盖boolean mkdir():创建文件夹boolean mkdirs() 创建多级目录2.删除:boolean

2015-01-09 23:21:01 432

原创 黑马程序员java基础之IO流中的字节流

IO流中的字节流:读取流InputStream,写入流OutputStream的常见用法

2015-01-09 14:21:27 399

原创 黑马程序员java 基础之io流中的字符流

1.IO流的四个基类:字节流InputStream,OutputStream;   字符流:Reader,Writer,当中字符流的学习和常见用法

2015-01-07 23:16:18 364

原创 黑马程序员java基础之其他对象

了解java中除了集合外,其他的对象:System,Date,CalendarMath等的常见用法

2015-01-06 22:11:49 320

空空如也

空空如也

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

TA关注的人

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