
Android
文章平均质量分 69
码匠2016
为技术而生
展开
-
内存泄漏
由内部类说起内部类会默认的在其对象中增加一个其外部对象的引用。这就是为什么内部类可以直接使用到外部类的资源。这还包括匿名内部类。在Activity中比较典型的用法是:public class MainActivity extends AppCompatActivity { Handler mhandler = new Handler() { @Override原创 2016-01-14 20:40:41 · 1133 阅读 · 1 评论 -
【Android View绘制之旅】Layout过程
1.为什么要进行Layout?在【Android View绘制之旅】View之测量Measure过程后,View我们得到View的宽高,但光只有宽高值是不足以反映视图的,更需要知道View所在的位置。Layout第一步:layout()方法在【Android View绘制之旅】View之测量Measure里也说过,我们的视图树就是从线性布局开始的,所以我们仍旧是从LinearLayout研究起。原创 2017-01-31 22:07:49 · 566 阅读 · 0 评论 -
【常见问题】Can not perform this action after onSaveInstanceState
onSaveInstanceState是干什么的呢?通过该方法保留的实例状态数据,然后借助onCreate(Bundle) or onRestoreInstanceState(Bundle),我们可以将已被killed的activity恢复回来。用户界面状态能够通过onCreate(Bundle) or onRestoreInstanceState(Bundle)来恢复,onSaveInstance原创 2016-11-16 23:35:53 · 549 阅读 · 0 评论 -
【Android View绘制之旅】主脉络
没搞清楚View绘制原理会怎么样?#原创 2017-01-26 21:22:50 · 462 阅读 · 0 评论 -
【Android View绘制之旅】Draw过程
出效果:绘制经过前面的准备工作 :【Android View绘制之旅】Measure过程,【Android View绘制之旅】Layout过程 我们的视图具备了宽高数据,位置数据,现在到了激动人心的一刻,就像火箭点火的时候。draw()和之前的measure,layout一样,仍旧从draw()方法开始。 代码里其实已经写的很明白了。drawBackground 绘制背景onDraw 绘制内容啊哈原创 2017-02-01 11:19:46 · 380 阅读 · 0 评论 -
【Android View绘制之旅】Measure过程
1.为什么要进行Measure?替人做了原本应该做的工作。在写xml的时候,布局参数如 wrap_content,match_parent,weight 等等给我们开发界面的时候带来方便,但是机器可是死的,最终绘制界面的时候需要的是明确数字意义上的宽高数据总之:measure过程类似执行一套算法,将整个View的宽高值给最终确定下来。2.Measure从根开始每个页面的视图结构就像View的树,从根原创 2017-01-30 12:19:41 · 586 阅读 · 0 评论 -
【Webview相关问题】登陆失败之cookie陷阱
什么问题呢?又是一个android独有的问题。 12306一直登陆不上,但是在某些手机上又可以。 检查请求数据,一个不查什么原因呢?在12306登陆的时候,会有这么个熟悉的验证码出现。 验证码及之后的交互时序图如下:如上图,在打码完成后所发送的12306请求必须带上验证码下发的cookie A, 但实际上使用的cookie还是之前的cookie ,也就是说验证码图片下载时所下发的cookie没原创 2017-01-14 21:17:15 · 2209 阅读 · 0 评论 -
【Webview相关问题】"控制字符"引发的惨案及Base64
问题描述webview.loadurl 去执行一段js语句来回调前端方法来回传数据,但是发现偶尔出现没有回调的情况,参照物将该语句在前端环境中执行完美通过。iOS执行该操作也是正常的。掌握了一定规律后发现,在包含某个车次信息的时候,回调就会失败,然后使用二分法的方式最后查找到是在一段加密的数据中包含了%0a这么个控制字符。查找到解决这个问题花费了不少时间,所以有必要好好的总结一下控制字符的干扰原创 2016-12-10 21:36:34 · 1484 阅读 · 0 评论 -
Vim常用快捷键
Vim前后台 ctrl +z 回到后台fg %X 回到前台 X:中括号的job编号选中一个单词v iw整页删除gg 回到页首 dG 删除全部,G是到页尾的意思使复制过来的代码保持格式先执行命令 set paste翻页Ctrl+f:向文件尾翻一屏 Ctrl+b;向文件首翻一屏搜索及替换命令/pattern:从光标开始处向文件尾搜索pattern ?pattern:从光标开始处向文件首搜索p原创 2016-03-10 14:37:01 · 563 阅读 · 0 评论 -
【Android基础】序列化 Serializable vs Parcelable
Serializablepublic class SerializableDeveloper implements Serializable String name; int yearsOfExperience; List<Skill> skillSet; float favoriteFloat; static class Skill implements Se原创 2016-07-02 22:36:07 · 371 阅读 · 1 评论 -
【工具】ApkTools
为什么要使用它,和简单的unzip有什么区别再说APKAPK文件简介 APK是AndroidPackage的缩写,即即Android application package文件或Android安装包。每个要安装到Android平台的应用都要被编译打包为一个单独的文件,后缀名为.apk。APK文件是用专业软件eclipse编译生成的文件包,其中包含了应用的二进制代码、资源、配置文件等。通过将APK文件原创 2016-06-14 10:57:39 · 749 阅读 · 0 评论 -
【Android基础】 Launch Mode
standard默认的,启动Activity的时候无论怎样,都会创建新的实例,并放到当前栈顶singleTop如果要启动的Activity和当前Task栈最顶的Activity是同一个,那么不再创建实例,而是调用当前栈顶Activity实例的onNewIntent方法。singleTasktaskAffinity的设置使启动singleTask的结果大为不同 。设置了”singleTask”启动模原创 2016-07-10 17:33:26 · 452 阅读 · 0 评论 -
【Android基础】趣谈Intent
IntentIntent 顾名思义,意图 类比一下,假如说把android系统中的每个Activity都看成是一个个的人,我们每个人绝不是超人,即会去响应别人的请求,也会要求得到别人的帮助,这样才能实现和谐互助,那么之间的交互用intent表示很恰当,打电话的故事比如在以前电话不普及的时候,有急事,自己家又没有电话,但是并不知道周围的人谁家里有,所以在大院里大声喊一下:“hey,我想借打个电话,电原创 2016-07-09 22:54:10 · 368 阅读 · 0 评论 -
【知识资料黄页】
技术媒体插件化Small Android原创 2016-06-03 15:03:40 · 317 阅读 · 0 评论 -
Retrofit
@Path@FormUrlEncoded @POST("/v1//yf/orderPayDetail/{orderId}") Observable getOrderPayInfo(@Path("orderId") long orderId, @FieldMap Map map,原创 2016-04-24 12:47:17 · 332 阅读 · 0 评论 -
代码混淆之坑点
1.第三方jar库,及调用本地so库的java类,webview不能被混淆如第三方库zxing被禁止混淆-dontwarn com.google.zxing.**-keep class com.google.zxing.**{*;}-keepclasseswithmembernames class * { native <methods>; }2. AIDL文件所在的包不能被混淆掉-keep cl原创 2016-05-15 22:49:51 · 1990 阅读 · 0 评论 -
【Android基础】RecyclerView的设计艺术
总览RecyclerView 和 ListView GridView之类比起来 可谓集大成者,通过开放更加功能强大的接口,以一挡十。有如下几点:强制绑定ViewHolder ——AdapterListView的view复用可是需要RD自己封装ViewHolder来实现,而这里强制了ViewHolder的存在,来看看它是怎么做到的吧?回忆一下ListView的视图循环利用 @Override p原创 2017-01-25 20:02:48 · 418 阅读 · 0 评论 -
【Android基础】从属性动画看代码设计的艺术
3.0引入的属性动画相比之前的帧动画及补间动画做出了很大的设计上的突破,功能更加强大,结构上更加松耦合。在设计上很值得我们去学习。做了这么几层抽象第一层:任何View的动画都可以抽象成对View某种属性值的改变。 ObjectAnimator colorAnim = ObjectAnimator.ofArgb(ballView, "color", Color.BLUE, Color.RED, Col原创 2017-04-03 18:53:37 · 344 阅读 · 0 评论 -
【Android UI】theme style
背景最近在整一个前辈留下的老代码,里面有个自定义弹窗dialog, 然后自定义了一个Theme,有点看不懂,并且不用这个Theme 整个窗口弹出就出问题了。回忆theme style 的区别和作用有点久了,二者的功能有点淡忘了。从程序设计上猜测思考除非是想全盘从头设计,那么android的任何组件必然会有一种缺省配置,这些配置决定着该组件的展示样式风格,我自己也做过公共组件,一是UI实体,另外就是通原创 2016-06-04 10:58:42 · 390 阅读 · 0 评论 -
Android信使Messenger解析
private final class MessengerImpl extends IMessenger.Stub { public void send(Message msg) { msg.sendingUid = Binder.getCallingUid(); Handler.this.sendMessage(msg);原创 2017-05-16 07:45:46 · 603 阅读 · 0 评论 -
android:fitsSystemWindows=“true”
what’s system windowSystem windows are the parts of the screen where the system is drawing either non-interactive (in the case of the status bar) or interactive (in the case of the navigation bar) cont原创 2017-05-15 20:43:49 · 741 阅读 · 0 评论 -
【Android View事件分发机制】关于拦截事件的注意点
在父容器拦截事件时,为什么不能拦截DOWN事件呢?先看看源码: 回顾一下事件分发机制原理,当事件来了之后,如果父容器不拦截,则会询问其child view ,当某child view 有事件需求,父容器会记住它并存在mFirstTouchTarget中。在上图第一个红框中,DOWN事件来临,如果被拦截,intercepted为true在上图第二个红框中,intercepted因为为true则无原创 2017-05-06 17:13:45 · 758 阅读 · 0 评论 -
【Android View事件分发机制】滑动冲突
View内容滑动概念 scrollTo scrollByscrollTo(x,y) x,y 是绝对值,如果x,y不变,重复调用是不会移动的。scrollBy(x,y) x,y是增量之,每次调用都会在mScrollX,mScrollY的基础上不断叠加数值。mScrollX,mScrollY 请参见 【Android View基础】View中几个容易混淆的距离及坐标量scroll移动的是原创 2017-05-06 15:34:37 · 440 阅读 · 0 评论 -
【Android View基础】View中几个容易混淆的距离及坐标量
left ,right,bottom,top相对父容器的距离 tranlationX/Y vs mScrollX/Y释义角度tranlationX/Y:View的左上角相对于父容器的偏移量。mScrollX/Y:View内容左/上边缘相对于View左/上边缘的偏移量总结二者都是表示某种偏移量,这是易于混淆的地方,但是根据释义以及上面A,B图,偏移量的对比物是完全不一样的。tranlati原创 2017-04-21 07:37:55 · 537 阅读 · 0 评论 -
【Android View事件分发机制】原理
事件体系中的几个基础类MotionEvent点击事件的封装。getX/Y相当于当前View左上角的x,y坐标getRawX/Y相对于手机屏幕左上角的x,y坐标GestureDetector 手势识别器 @Override public boolean onTouchEvent(MotionEvent event) { if (gestureDetector == null)原创 2017-04-28 07:43:12 · 503 阅读 · 0 评论 -
Scroller解析
解决什么问题?出现的使命是?View.scrollTo及scrollBy方法是促使View内容的滑动,但其结果是瞬间达到目标位置,很生硬。 Scroller就是提供一个策略来让这种生硬的移动变的平滑和自然。解决的过程是?基本思想将需要平移的距离切分成小段小段的,在给定时间内逐小段的移动,这样动画效果就出来了。原创 2017-05-06 09:01:19 · 316 阅读 · 0 评论 -
【Android View绘制体系】invalidate
invalidate内部思想 invalidate的调用流图View.invalidateInternal打上DIRTY标记为后面Draw做准备mPrivateFlags |= PFLAG_DIRTY;调用父组件的invalidateChild并将自身相对位置left,top,right,bottom通知给父组件ViewGroup.invalidateChild循环执行父组件的invalida原创 2017-04-20 10:29:40 · 1475 阅读 · 0 评论 -
【Android View绘制体系】requestLayout
hhh原创 2017-04-17 23:00:12 · 461 阅读 · 0 评论 -
android源码中常用的Rect方法
inset dirty.inset(-1, -1);缩小还是扩大矩形。如果为正值,则是缩,反之就是扩。dx:左边及右边dy:上边及下边offset dirty.offset(0, -mCurScrollY);向上偏移mCurScrollY像素 setmTempRect.set(dirty);将dirty的内容复制到mTempRectunion localDirty.union(dirty.原创 2017-04-20 10:28:45 · 870 阅读 · 0 评论 -
【Android基础】动画
Android里的动画分为两类,以3.0版本为分水岭。3.0前已存在帧动画补间动画3.0出现属性动画帧动画顾名思义,快速切换几张图片来达到动画的效果。建立帧动画xmlNote:不要把这个帧动画文件放到anim文件夹中,要放到drawable文件夹中<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="ht原创 2017-03-28 06:13:12 · 456 阅读 · 0 评论 -
【Fragment】管理机制
before想想在fragment出现前我们如何实现类似fragment的功能呢?需求是要做一个相对独立的布局功能,可能在多个地方需要复用到,还有就是他需要能够被动态的切换,于是乎,写个layout,通过addView/removeView的使用,添加/删除 到另外一个父layout中,从而实现layout的复用及切换。但是子layout的背后的逻辑呢?感觉想起来就麻烦。 这个时候fragment原创 2016-02-23 10:40:28 · 805 阅读 · 0 评论 -
【Fragment】onActivityResult
Fragment之onActivityResult我们都知道Activity下的onActivityResult,那么fragment下的onActivityResult是否能够正确的被调用呢? Fragment->Fragment:startActivityForResult Fragment->HostCallbacks:onStartActivityFromFragment HostCa原创 2016-02-27 19:54:57 · 1697 阅读 · 0 评论 -
【Fragment】从代码角度理解remove,detatch,hideFragment
public void removeFragment(Fragment fragment, int transition, int transitionStyle) { if (DEBUG) Log.v(TAG, "remove: " + fragment + " nesting=" + fragment.mBackStackNesting); final boole原创 2016-03-08 22:03:37 · 837 阅读 · 0 评论 -
【Android UI】图片 + 文字展示by SpannableStringBuilder
起源图片和文字混合展示,比如这么个需求,需要在每段文字的左边要有一个小圆点,(小圆点符号在android系统中并不支持)。 先用TextView的setDrawableLeft, 嗯,达到要求,那么换个行看看。喔,糟糕,这个setDrawableLeft是为整个TextView服务的,而不只是为其中某一行准备的哟。SpannableStringBuilder为了满足上面说到的需求,使用Spann原创 2016-05-29 15:32:48 · 1643 阅读 · 0 评论 -
【Android UI】TextView的垂直方向概念之top,bottom,ascent,descent,baseline
一图以蔽之 需要区分的是这里的top,bottom,ascent,descent,baseline是指字内容的属性,通过getPaint().getFontMetricsInt()来获取得到。和字体内容的外部容器的属性要区分开来。一个小测试我自定义了一个MyTextView: @Override protected void onDraw(Canvas canvas) {原创 2016-05-29 17:21:41 · 5427 阅读 · 4 评论 -
【git】日志更改
问题原创 2016-05-03 22:02:46 · 246 阅读 · 0 评论 -
内存性能
共享内存保存所有的App都会使用到的公共框架类、资源以及本地类库资源。代表:Zygotezygote受精卵的意思,可以分裂出很多细胞出来。 在Android里,Zygote是个进程,该进程中包含了所有的框架类,共用的资源,以及预加载的本地库。私有内存只能被你的App使用,而其他App不能使用的内存。脏内存数据仅仅存在于RAM中,一旦被清理,只能重新通过跑APP才能拿到数据。干净内存数据不仅在RAM原创 2016-04-10 16:31:57 · 501 阅读 · 0 评论 -
Android 之小技巧
小技巧,不足为专题内容TextView的drawableLeft与文本一起居中显示原始的TextView设置了LeftDrawable后,如果TextView的宽度是MATCH_PARENT,LeftDrawable是无法和TextView中的text一起居中的,而是在左边。 参见 http://www.cnblogs.com/over140/p/3464348.html 请注意这个时候设置原创 2016-03-23 18:18:21 · 364 阅读 · 0 评论 -
git rebase
源起:git rebase 用的还比较多,而且还常出现于面试之中,我会用,但是对其实在的意义没有深刻的理解,所以使用也非常的机械,局限,还常常混淆。 当我理解了rebase命令后,它的功能简言之就是“移花接木”,形象的比如,当一棵树的某条树枝非常的漂亮,唯独中间有个疤,办法就是将疤的地方给锯掉,然后将后面的枝给嫁接到新的根基上。所谓“变基”——rebase.git rebase –onto n原创 2016-03-06 19:38:02 · 883 阅读 · 0 评论 -
Fragment之底层关键操作函数moveToState
moveToState是FM中一个相当长的函数,但Fragment任何的操作add,remove …最终都会调用这个函数,从字面上可以理解,fragment要从当前状态切到newState里面干些什么都在这个函数中。 Fragment有六种State,初始状态是INITIALIZING:static final int INITIALIZING = 0; // Not yet create原创 2016-03-08 23:38:44 · 4325 阅读 · 0 评论