- 博客(41)
- 收藏
- 关注
原创 HandlerThread简单源码阅读
Handler是android中常用到的多线程传输数据的工具类,那么跟它名字很相近的HandlerThread呢?其实很简单,HandlerThread是继承自Thead的,也就是说HandlerThread本质上是个线程,需要被开启,但是不同的是它内部会自动提供一个looper,并用looper在创造一个Handler,getLooper和getThreadHandler就是HandlerT...
2018-08-28 10:29:37
238
原创 SharedPreferences的commit和apply
SharedPreferences在安卓中是最常用的保存数据 的方式。下面就了解一下SharedPreferences的commit和apply这两个提交数据的方法。其实SharedPreferences和我们常用的Context都是接口,所以具体的实现方法其实是在SharedPreferencesImpl和ContextImpl中的下面看一下源码:public boolean
2017-07-28 11:58:19
626
原创 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
2559
1
原创 拼图小游戏
自己动手,写出一个拼图类的小游戏。主要步骤如下: 1.将一张完整图片进行有序切割成若干小块;单个图片需要唯一标识itemId,以及拼图成功时的校验Id——bitmapId. 2.图片数组已经具备了,接下来就是打乱有序图片集合,这里进行两两置换,会用到2个bean进行数据交换 3.打乱图片集合后需要判断该集合是否有解,这个就根据唯一表示itemId来进行倒置和算法判断。 4.循环判断每个图片条
2017-07-14 19:47:07
1593
原创 安卓流式布局——标签墙
安卓标签墙也是一个常见的应用场景,所以最近学习写了一个流式布局,并学习一下自定义控件的一种方法,继承ViewGroup. 思路: 1.流式布局1行只能放下固定数量的标签,所以用一个类来标明一行的数据,这样在onLayout方法中就只需要将每一行的数据放到正确的位置上就可以了。这样的一个行的类的属性基本也可以确定了:当前行的标签集合,当前行的宽度,当前行的高度,:class LineBean {
2017-07-13 16:28:21
826
原创 安卓自定义饼状图
闲来想自己写个饼状图,于是就动手开始画了。 主要的逻辑:1.根据比例依次旋转角度画出扇形;2.在扇形区域内设置内容数据;3.当点击某个扇形的时候,就让当前扇形脱离整体,空出一部分 看起来这个逻辑比较复杂,但是真正写下来之后就会发现其实饼状图也简单,主要就是围绕着安卓简单的自定义控件画扇形。效果如下: 接下来就开始代码实现: 首先初始化2个画笔,一个是画扇形的,一个是画扇形的边框的,还有初
2017-06-28 11:11:32
2044
原创 onTouch和onTouchEvent方法调用顺序
安卓中view和viewGroup在点击的时候有两个方法,onTouch和onTouchEventonTouch是设置了onTouchLisenter之后的回调方法。如果设置了onTouchLisenter就会调用ontouch方法,同时onTouchEvent方法不会再被调用如果没有设置onTouchLisenter,就会调用onTouchEvent。就是说ontouch的优先级比onT
2017-04-27 15:11:01
1372
原创 permission Denial
在IPC通讯中,如果出现权限拒绝的问题,一个是没有声明权限,这个一般情况下Log会提醒;另外一个是跨应用跨进程的时候,能够被访问的四大组件在清单文件中需要声明一个属性, android:exported="true" 这里表示当前组件可以输出,能够被访问
2017-04-08 11:26:57
708
原创 ContentProvider
ContentProvider内容提供者,底层是通过Binder来实现的,通过系统的封装,比起AIDL文件使我们更加方便使用。对于ContentProvider,自定义的的时候,会涉及到6个方法,onCreate(),getType(),query(),delete(),update();其中onCreate()是在主线程中执行的,其他的5个方法都是执行在Binder线程池中的,getType()
2017-04-07 17:24:36
234
原创 在AIDL中声明方法中传入的参数in,out
首先,用到Binder的时候,用户端发起请求,当前线程会挂起,直到服务端执行完毕,所以如果远程方法很耗时的话,不适合在主线程中发起请求;并且不管Binder是否耗时,都需要采用同步方式去实现。在AIDL文件中,如果用到别的文件中的对象,必须手动导入别的对象所在包AIDL中除了基本数据类型,其他类型的参数必须标上方向,in表示输入型参数,out表示输出型参数,inout表示输入输出参数
2017-04-07 11:25:53
1451
原创 CopyOnWriteArrayList
CopyOnWriteArrayList这个数组支持并发读写,所以在AIDL进行进程间通讯的时候,如果会用到高频率的读写列表数据的时候,可以使用这个数组来自动进行线程同步的处理。需要注意的是在用AIDL进行进程间通讯的时候,能够使用的List只有ArrayList,但是CopyOnWriteArrayList却并非继承自ArrayList,这里的原因是AIDL所支持的是抽象的List,因此虽然服务
2017-04-06 17:26:29
264
原创 进程间通讯
进程间通讯分为以下几种方式: 1.Bundle,在Intent中通过通过Bundle传递数据,最简单的比如说我们自定义的app可以启动别的大型app,比如百度地图。Intent实现的数据传递必须序列化,这是最简单的进程间通讯方式。这里特别说明一种情况:在a进程中需要计算结果,然后计算完成后启动B进程并且将结果传递给B进程,这个过程计算的结果如果不能通过Bundle传递,如果用其他IPC
2017-04-06 16:57:09
265
原创 popwindow显示之后,退出当前activity出现阴影
在activity中,当popwindow显示再隐藏之后,退出activity时,如果有阴影在返回一瞬间显示的话,问题在于dismiss时候没有清除flag
2017-04-06 15:57:17
465
1
原创 关于intent的隐式调用
简单说明一下隐式Intent调用Activity的IntentFilter匹配规则 1.action,是一个intent的必备条件,有且必须匹配,只要有一个action匹配就可以2.category,通常情况下,自定义一个Activity如果想要被隐式调用调起的话,起码要声明一个category""因为category的匹配规则是必须所有声明的category都必须能够匹配到对应的ac
2017-03-31 11:46:58
645
原创 scroller类的用法
读安卓群英传滑动机制之-=------==========scrollerscroller类其实作用和scrollBy、scrollTo的作用是差不多的,区别就是通过scroller移动可以有一个缓冲动画,并不是一下就从起点到终点了。说到这里,就顺便说下scrollBy,scrollTo,=========scrollBy,scrollTo 注意,这两个方法移动的是内容:
2016-12-15 18:06:14
408
原创 ViewGroup的绘制
读安卓群英传自定义控件-----------------viewgroup控件的绘制需要注意:viewgroup通常情况下不需要绘制,因为它本身就没有需要绘制的东西,如果不设置viewgroup的背景颜色,viewgroup的onDraw方法就不会调用,因此在平时布局文件中,尽量避免不必要的 背景颜色设置,减少onDraw方法调用
2016-12-10 09:37:53
290
原创 view的测量
读安卓群英传自定义view----------view的测量1.追溯view的onMeature方法,最终调用的就是protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth
2016-12-10 09:32:37
329
原创 几个网络访问框架的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
1114
原创 popwindow显示出现黑色闪屏效果
在用popwindow时,如果退出当前activity时闪现了一下黑屏,但是程序也是正常的,并没有崩溃,这里的问题在于消失时并没有清除所有的flagpublic void show(View view) { if (mPopupWindow != null && !mPopupWindow.isShowing()) { // 设置显示动画
2016-10-31 15:47:32
2527
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
482
转载 通过apk安装包获取sha1的值
直接用打包出来的apk查看签名,具体如下:1) 将apk修改后缀为 .rar文件后解压;2) 进入解压后的META-INF目录,该目录下会存在文件CERT.RSA3) 在该目录下打开cmd,输入命令 :keytool -printcert -file CERT.RSA
2016-08-30 16:23:07
3498
原创 android调用js需要注意的方式
在安卓调用js的时候,如果一开始加载url,并且需要调用方法传参,就需要先加载url,然后在WebViewClient的onPageFinished中调用js方法,调用js的方法,webView.loadUrl("javascript:getUser()");//无参webView.loadUrl("javascript:getUrl('"+param+"')");//注意需要加单引号,多
2016-08-26 14:59:25
698
转载 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
627
原创 scrollview中的子控件填满布局
在使用scrollview时,有时子控件不足以填满全局,但是有些控件,比如按钮想放在最下方,这时候就需要子控件填满scrollview,使用 android:fillViewport="true"使用这个属性就会让scrollview的元素填充满scrollview,填满布局
2016-07-04 18:08:30
1497
原创 listview和edittext一起使用时弹出软键盘问题
如果不想在一进界面就弹软键盘,在清单文件AndroidMnanifest文件中对应的activity中设置属性: android:windowSoftInputMode="adjustResize|stateHidden"
2016-01-20 15:36:47
473
原创 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
7203
原创 黑马程序员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
410
原创 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
304
原创 黑马程序员java基础之多线程
进程:是一个正在执行的程序。每个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫做一个控制单元线程:就是进程中的一个独立的控制单元。线程控制着进程的执行。一个进程中 至少有一个线程java VM启动的时候会有一个进程java.exe,该进程中至少有一个线程负责java程序的执行,而且这个线程运行的代码存在于main方法中,该线程称为主线程。其实更多细节说明jvm启动不止一个线
2015-02-04 00:03:45
502
原创 黑马程序员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
424
原创 黑马程序员java基础之Map集合
Map集合存的是键值对,要保证键的唯一性注意:Map集合添加元素用put,没有add方法。Map常用的三种子类集合:---Hashtable(哈希表):底层是哈希表数据结构,不可以存入空的键值对,线程同步---HashMap:底层也是哈希表数据结构,元素无序,允许使用空键值对,线程不同步,效率高---TreeMap:底层是二叉树数据结构,线程不同步,可以用于给集合中的键进行排序
2015-01-24 23:01:44
379
原创 黑马程序员java基础知识之集合Collection
集合框架:collection--List:元素是有序的,元素可以重复,因为该集合体系有索引--ArrayList:底层使用数组结构;查询速度很快,增删较慢,线程不同步--LinkList:底层使用链表结构;增删速度快,查询速度慢--Vector:底层是数组数据结构,线程同步--Set:元素无序,不可以重复--HashSet:底层数据结构是哈希表--TreeSet这
2015-01-23 09:02:30
512
原创 黑马程序员java基础之GUI
GUI即时图形化界面图形化界面方便较命令行模式更加简单明了,易于操作。图形化界面提供的队形都在java.awt和javax.Swing中。Awt相对比较依赖于平台。了解创建图形化界面的步骤,通过事件监听机制来完成图形化界面中各种操作
2015-01-13 22:32:30
455
原创 黑马程序员java基础之io流中的File类
1.File类 对文件或者文件夹进行操作 常见方法1.创建:boolean createNewFile(): 在指定位置创建文件,如果该文件已经存在,则不创建,返回false 注意:和输出流不一样,输出流对象一创建文件,如果文件已存在,则会覆盖boolean mkdir():创建文件夹boolean mkdirs() 创建多级目录2.删除:boolean
2015-01-09 23:21:01
515
原创 黑马程序员java 基础之io流中的字符流
1.IO流的四个基类:字节流InputStream,OutputStream; 字符流:Reader,Writer,当中字符流的学习和常见用法
2015-01-07 23:16:18
441
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人