- 博客(28)
- 收藏
- 关注

原创 EventBus源码解析
开始EventBus的基本用法, 下面代码通过EventBus在两个Activity传递数据(当然也可以使用其他方法传递数据)这里只是作为演示用public class FirstActivity extends BaseActivity { private TextView mTv; private static final String TAG = "FirstAct...
2018-12-25 18:44:37
284

原创 Volley源码浅析一
基础用法// 创建请求队列RequestQueue queue = Volley.newRequestQueue(getApplicationContext());String url = "http://xxx&a
2018-12-13 19:46:11
421

原创 Volley源码浅析二
上文说到如果Request不需要缓存或者缓存的内容已经过期,又或者缓存内容不过期,但是softTtl已经超出了当前时间这三种情况最后会把当前Request加入到网络请求队列,那么4个NetworkDispatcher线程中的其中某个线程就能够从阻塞队列中取出Request脱离阻塞// NetworkDispatcher.javaprivate void processRequest() thr...
2018-12-13 19:45:41
308

原创 Android消息循环机制解析
从Handler说起常规的Handler使用过程如下所示,运行如下代码应该就能弹出Toast了public class MainActivity extends AppCompatActivity { private static MyHandler handler = new MyHandler(this); @Override protected voi...
2018-04-11 15:53:44
330

原创 Android应用程序启动全过程(本文基于Android7.1)
准备首先要了解Android应用启动过程需要有Framework层代码以及系统应用Launch的代码,当然也可以下载aosp源码,下载编译源码请参考官网开始从Binder说起Binder可以用于IPC通信对于系统FrameWork来说一般用于客户端进程与系统服务进程进行通信,一般流程是客户端通过某种方法获得到对应于服务端Binder对象的BinderProxy对象(无论通过...
2018-04-02 14:24:03
1634

原创 一个简单的Android圆形ProgressBar
使用kotlin实现一个简单的Android圆形ProgressBar本自定义View功能比较简单,就是一个包含百分比的圆形进度条,先上结果图(新手,大神勿喷)代码如下所示,支持padding设置,背景线条颜色设置<!--res/values/attrs.xml--><?xml version="1.0" encoding="utf-8"?>...
2018-03-29 20:03:45
3586
原创 自定义View - MyViewPager和MyTabLayout
首先声明一点,写这两个View纯粹为了练习而已,要实现这个功能完全可以直接用ViewPager和TabLayout完成下面首先给出效果图Activity、Adapter代码如下public class MyViewPagerActivity extends Activity { private MyViewPager mVp; private MyTabLayout mT...
2019-07-02 23:52:15
636
原创 大话数据结构------线性表的链式存储结构(单链表)
上篇说的线性表的线性存储结构,有一个明显的确定,那就是每次插入和删除元素都需要移动大量的元素,能否想个办法解决它。我们可以使用本文提到的链表解决线性表的链式存储结构每一个结点都拥有一个数据域和一个指针域(指向下一个节点),因此其不需要将所有结点存在一块连续的地址空间中先贴上kotlin代码/** * 使用单链表实现,区别于java类库中的LinkedList(双向链表) */class...
2019-02-05 22:07:23
240
原创 大话数据结构------线性表的顺序存储结构
线性表的顺序存储结构就是一组数据按照逻辑顺序依次排列在一组地址连续的储存空间先贴上kotlin代码package com.hefuwei.datastructimport java.lang.RuntimeExceptionimport java.lang.StringBuilder@Suppress(&quot;UNCHECKED_CAST&quot;)class ArrayList&amp;lt;T&amp;gt...
2019-02-05 21:15:49
284
原创 Kotlin实战总结
第二章 Kotlin基础2.1 基本要素函数与变量2.1.1 Hello, World!使用fun声明方法参数类型放在参数名称后面数组用Array类进行表示println 替代 System.out.println可以省略每行代码结尾的分号函数不需要一定放在一个类里面fun main(args: Array&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;
2019-02-02 17:03:15
474
原创 软键盘模式
PopupWindow如果需要弹出软键盘要求 setFocusable(true) 并且 inputMethodMode不是NotNeeded#####软键盘模式SOFT_INPUT_STATE_UNCHANGED 当这个Activity出现时,软键盘将一直保持在上一个activity里的状态...
2019-01-22 11:06:40
739
原创 Android进阶之光-设计模式
1. 单例设计模式package com.hfw.smartfilebrowser.designmode;import java.util.HashMap;import java.util.Map;/** * 1. 构造器私有化 * 2. 通过一个静态方法或者枚举返回单例类对象 * 3. 确保单例类对象有且只有一个,尤其在多线程情况下 * 4. 确保单例类对象在反序列化时不会重...
2018-12-21 09:49:41
267
原创 Thinging in Java读后总结
当调用一个对象中的方法时,比如调用Dog类的实例dog的eat(),编译器会把dog引用当成eat()的第一个参数传入即(eat(this, otherParams))在构造器中可以使用this关键字去显式的调用构造器,并且只能位于构造器的第一行,其他地方都不能调用构造器...
2018-09-17 09:47:03
394
原创 Android View动画xml篇
View动画分为补间动画和渐变动画,对应的xml文件放于res/anim中,先说补间动画,其根节点共有以下五种,alpha、scale、translate、rotate、set,里面的值可以直接使用float,也可以使用%,或者%p公共属性android:detachWallpaper 特殊选项窗口动画,如果这个窗口显示在壁纸上不要使用该动画android:duration 动画执行时...
2018-09-08 11:14:47
1368
原创 ColorStateList在xml中的定义
颜色的状态选择器对应的xml文件需要放到res/color目录下,并且系统会匹配第一条满足条件的item,所以要将默认的item放到最后&lt;!--res/color/selector_bt&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;selector xmlns:android="http:
2018-09-08 10:48:51
794
原创 Android属性动画xml篇
属性动画对应的xml文件放于res/animator中,其根节点共有下列三种,objectanimator、animator、setobjectanimator 对应 ObjectAnimator.javaandroid:propertyName 必须的,需要操作的属性android:valueTo 必须的,目标值android:valueFrom 起始值,如果不设置,会调用targ...
2018-09-05 16:02:51
2697
原创 HTML5+CSS
锚点,可以通过超链接跳转到页面中的指定位置&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;a href=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;#id&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;&amp;amp;am
2018-07-13 22:55:31
293
原创 React Navigation
安装yarn add react-navigation //或者 npm install --save react-navigation用法首页导出createStackNavigator,并设置路由//App.jsimport List from './pages/List';import Detail from './pages/Detail';const A...
2018-07-04 12:43:25
171
原创 面向对象的六大原则
单一职责原则 一个类只应该只含有一组相关性很高的东西,不同功能要放在两个类中,比如图片加载和缓存需要放在两个不同类中开闭原则 程序对修改应该是关闭的,对扩展是开发的,软件迭代中要尽量避免原有逻辑的修改,尽量使用扩展来完成变化,比如ImageLoader类,当添加新的缓存方式时只要创建一个实现了ImageCache对象,并且设置给ImageLoader即可(依赖注入)里氏替换原则 抽象,...
2018-06-13 15:49:08
151
原创 JavaScript基础
数据类型Number js不区分整数和浮点数,NaN表示Not a number当无法计算时会出现如0/0,Infinity表示无限大,当超出js最大计算范围时会出现如2/0字符串’abc’或者”abc”布尔类型 只有true和falsenull和undefined 一般需要使用前者,只有当用于判断传参是否为空时才会用到后者,null、undefined、”都是false数组 [1,...
2018-06-11 18:11:20
137
原创 项目研发流程
MRD评审 产出MRD(市场需求文档)PRD阶段 PRD评审 产出PRD(项目需求文档) 交互设计评审 产出交互设计稿(sketch)研发排期 开发排期联调排期测试排期开发阶段 TC评审技术评审项目管理提测 5 测试测试环境测试预发环境测试线上环境测试...
2018-05-24 16:31:10
498
原创 Git 提交规范
feat: 新功能(feature) fix: 修补问题 docs: 更新文档 refactor: 重构(即不是新增功能,也不是修改bug的代码变动) chore: bump version to ${版本号} test: 增加测试 style: 格式变更(不影响代码运行的变动)...
2018-05-04 09:56:34
240
原创 ReactNative学习笔记
生命周期constructor 只调用一次componentWillMount 只调用一次,在该方法内调用setState方法改变值不会重新渲染,因为第一次渲染都还没执行过,一般从该方法中读取缓存。componentDidMount 只调用一次,在组件被渲染完毕后会马上执行该方法,同时子组件也有该方法,并且子组件的该方法优先于父组件执行,一般用于显示默认视图后从网络获取数据compon...
2018-05-02 19:43:31
256
原创 Android 性能优化
布局优化 布局文件中层级不能过多,过多会导致遍历时间成几何倍增长,能减少View的数量尽量减少,比如android studio提示一个图片一个文字,最好就使用一个TextView使用include复用布局、merge减少不必要的ViewGroup、使用ViewStub在需要显示得时候再加载可以打开开发者选项观看GPU渲染速度,中间的绿线表示一帧耗时16mm(一秒60帧)内存优化防止...
2018-04-26 14:12:32
163
原创 Android Gradle相关知识
打包 执行./gradlew assemble gradle (可以简写成./gradlew a)会分别编译出debug和release版本的apķ执行./gradlew assemble release (可以简写成./gradlew aR)会编译出release版本的apk执行./gradlew assemble debug (可以简写成./gradlew dR)会编译出debug版...
2018-04-23 16:36:40
300
原创 Android开发快捷键、工具
本文全部基于Mac操作系统窗口切换 command + ~ 可以在一个app中切换窗口(切换多个Android Studio窗口、终端 chrome浏览器无效)command + w 关闭一个窗口(比如关闭一个浏览器项或者关闭Android Studio中一个打开的文件)command + q 退出app(关闭Android Studio等等)command + option + e...
2018-04-18 17:52:39
606
原创 Android Studio Gradle执行顺序
首先执行项目目录下面的setting.gradle然后执行项目目录下面的build.gradle然后根据setting.gradle中的配置顺序逆序执行module的build.gradle(即后写的先执行)
2018-04-16 11:33:16
2007
原创 读后总结--Android开发艺术探索
第一章 Activity的生命周期与启动模式从Activity A启动Activity B回调是先调用A的onPause() -&amp;gt; B的onCreate() -&amp;gt; B的onStart() -&amp;gt; B的onResume() -&amp;gt; A的onStop() 因此不能在onPause()中做耗时操作,不然新的Activity将延迟显示onStart() 与 onResu...
2018-04-12 15:55:13
420
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人