- 博客(116)
- 资源 (1)
- 收藏
- 关注
原创 记Unable to resolve dependency for...的问题
前几天接一个简单视频的需求,所以考虑到简单实用,就去使用Google爸爸提供的ExoPlayer播放器实现。按照文档配置,结果拉不下来代码。后来才知道升级了gradle后需要指定代理,操作如下:打开搜索http proxy如下这里选择,并填如下参数确定应用,重新build,就可以拉代码了。本以为事情就完了,后来发现自己公司的本地maven仓库的sdk拉取不下来了,一直卡在bu...
2019-10-11 17:24:21
519
原创 开发者模式之GPU渲染模式分析
手机自带的开发者选项中,有很多可以使用的工具,他们可以用来分析自己的应用的性能、绘制、anr等情况。下面主要说下PU渲染模式分析的简单讲解:GPU渲染模式分析打开 在屏幕上显示为条形条图 模式 该模式打开后,能以一种可视化的方式,呈现出U渲染框架的速度和节奏。打开后以支付宝的首页为例子:如图如上图:水平轴代表的是运行经过的时间、垂直轴代表每一帧所花费的时间,以毫秒为单位每一根方...
2019-08-26 22:42:49
7022
原创 处理fragment获取getActivity为null的问题
问题:应用从后台进入前台时,fragmeng中getActivity()获取null ,导致崩溃问题原因:当系统资源紧张时,或者被gc回收activity,但是进程还保留时,Activity都可能会被系统回收然后重建,在系统要把App回收之前,系统会把Activity的状态会保存下来,但Fragment并不会随着Activity的回收而被回收,创建的所有Fragment会被保存到Bundle...
2019-08-07 17:41:42
984
原创 SharedPrefrences的源码分析
SharedPrefrences的分析源码分析文件操作缓存机制SharedPreferencesImpl实现类值操作取值修改提交操作commitcommitToMemoryMemoryCommitResultenqueueDiskWritemcr.writtenToDiskLatch.await()mcr.writeToDiskResultapplycommitToMemoryenqueueDis...
2019-07-31 14:47:24
1002
原创 Android 自定义控件基础知识
Android 自定义控件基础知识 我一般写自定义控件步骤是这样的:规划onDraw onLayout里面需要用到那些知识点根据设定的自定义效果,提前规划出自定义属性(也可以最后提取)onMeasuae的测量模式实现onDraw绘图效果onLayout的实现(是否需要)检测 是否需要开启硬件加速,是否存在内存泄漏 ,对外暴露方法自定义控件...
2019-05-12 16:35:46
285
原创 小米手机全面屏开关
小米手机全面屏开关问题判断是否开启全面屏开始以为只是简单的判断是否存在虚拟键就行了,结果发现无论你是否开启全面屏手势,结果都是 : 存在后来在小米开发论坛找到了这个问题:Settings.Global.getInt(getContext().getContentResolver(), "force_fsg_nav_bar", 0) != 0;上面这句代码是用来判断是否开启全面屏的核...
2018-12-29 17:40:24
1999
原创 自定义弧形View 渐变View
自定义弧形View 渐变View由于项目要求,要写一个渐变的弧形View作为背景。看效果图规划好属性渐变色起点渐变色终点圆弧高度非圆弧颜色渐变方向<declare-styleable name="ArcGradualView"> <attr name="color_gradual_start" format="color" /> ...
2018-12-05 10:42:05
1096
2
原创 Android运行时权限机制和动态申请权限
Android运行时权限机制和动态申请权限在2015年谷歌发布Android6.0系统,其中添加了运行权限检测,防止流氓应用盗取个人信息。而不在是安装的时候赋予应用在清单文件中申请的全部权限。Google将全部权限分成了普通权限(Normal Permisson)和危险权限(Dangerous Permisson),其中普通权限在应用安装时候赋予,而危险权限在运行是检测是否需要该权限动态获...
2018-09-16 15:53:20
1328
原创 Android中的线程池及使用
Android中的线程池及使用线程池能处理业务中多个线程并发的问题,避免大量产生新的线程相互抢占系统资源,可以统一通过线程池来配置不同参数来管理线程。java中已经内置好了四种线程池供我们使用。线程池创建的参数 corePoolSize 核心线程数 一般情况下一直存活,即使没有任务keepAliveTime 非核心线程的闲置时长 当非核心线程的空闲时间超过该时长,会被...
2018-09-10 10:28:48
711
原创 Snackbar的简单使用
Snackbar是5.0推出的新控件,主要作用是一种新的软提醒,也可以与用户进行简单的交互。 效果图如下: 直接看下snackbar的主要创建方法 Snackbar.make(target, "请事件输入标题", Snackbar.LENGTH_LONG)//设置目标容器,事件标题,显示时间 .setActionTextColor(Color.WHITE...
2018-08-15 18:09:50
776
原创 网络分层与TCP的三次握手与四次挥手
一、网络分层 网络分层就是将网络节点所要完成的数据的发送、打包或者拆包,以及控制信息的加载等工作,分别由不同的硬件或者软件模块完成。 按照不同功能和硬软件从下到上分成:1,物理层;2,数据链路层;3,网络层;4,传输层;5,应用层物理层 所谓的物理层,是指光纤、电缆或者电磁波等真实存在的物理媒介。及负责比特流在节点间的传输,即负责物理传输。...
2018-08-15 14:19:46
497
原创 RxJava2的基础知识
RxJava2的三要素:观察者模式思想,函数响应式编程1. Observable 被观察者,它决定什么时候触发时间,在上游发送命令,决定异步操作模块的顺序和异步操作的次数。 2. Observer 观察者,它可以在不同的线程中执行任务,在下游待命状态的接受事件,响应被观察者的通知。 3. subscribe订阅事件 创建好了Observable和Observer ,需要将他们...
2018-05-25 00:01:00
511
原创 RxJava学习(一)---Hello World
学习一种新的编程思想或者语音,先来个Hello World。写一个RxJava的Hello World:public static void main(String[] args){ Observable.create(new ObservableOnSubscribe<String>() { @Override ...
2018-05-16 23:13:14
457
原创 选择排序
选择排序:遍历整个列表的元素,找出最大的(最小的),并将其添加到一个新的列表里,然后找出第二大的(第二小的)放在新列表里,知道得到一个元素相同的有序列表。
2018-04-17 17:08:38
304
原创 二分法查找
二分查找是一种算法,其输入是一个有序的元素列表,而且列表必须是有序的。算法原理就是每次获取列表中间元素进行比较,每次排除一半的元素。 比如100个元素使用二分查找是: 100—50—25—13—7—4—2—1 只需要查找7次 而使用简单查找时候: 1–2–3–4……96–97–98–99-100 需要查找100次 注:算法都是按照最差情况计算
2018-04-17 14:31:46
1448
原创 Retrofit2+Rxjava+OkHttp的使用和网络请求
首先介绍Retrofit: Retrofit是Square 公司开发的一款正对Android 网络请求的框架。底层基于OkHttp 实现。版本要求至少需要java7或者Android2.3。 github地址使用 在项目的build.gradle下dependencies下添加:compile 'com.squareup.retrofit2:retrofit:2.1.0'创建retrofit 实
2018-04-16 09:37:48
9096
1
原创 ConstraintLayout介绍与具体使用
Relative positioning 相对定位 Margins边缘距离 Centering positioning 中心定位 **bias 偏移** Circular positioning 圆形定位 Dimension constraints 尺寸限制 Radio 比例设置 Chains 链 Guideline
2018-04-04 16:56:02
639
原创 Activity进行全局管理
Activity进行全局管理 经常会用到app退出的功能,一般实现为以下几种:System.exit(0) 使用系统的方法,强制退出 太暴力抛出异常,强制退出 体验更差广播退出 性能浪费Application退出 比较常用的方法 优点:当应用程序启动时,会自动帮我们创建一个Application,而且一个应用程序只能存在一个Application,它的生命周期也是跟应用同步
2018-03-30 11:27:53
663
原创 Android部分文字响应点击
经常会遇到一个TextView部分变色,部分文字还要响应点击事件。情况如下: 废话不多说直接上代码:SpannableString spanableInfo = new SpannableString(tvTest.getText().toString().trim()); spanableInfo.setSpan(new Clickable(clickListener), 28,
2018-03-29 10:20:23
1224
1
原创 其他方式登录控件
先看效果图,很简单的控件,不需要自定义: 分析一下要点:点击后,屏幕会有变暗,有一层遮罩整块布局有个上下移动的动画未点击状态下,布局往下移动了距离布局文件:<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2018-03-19 11:56:29
2201
原创 Android设计模式之单例模式(防止反序列化和反射构造器)
1. 饿汉单例模式 2. 懒汉模式 3.DCL(double check lock)双层检锁模式 4.静态内部类创建单例 5. .枚举单例 **防止反序列化* **通过反射产生多个实例*
2018-03-16 16:43:49
871
原创 Android大喇叭---广播机制
Android提供了一套完整的API,允许应用来自由的发送和接受广播。而广播接收者只需要关注广播的内容,而不需要关心广播是由谁发送的。广播发送是通过intent发送,广播接收者主要分成两类:标准广播,有序广播。标准广播:一种完全异步执行的广播,在广播发出后,所以广播接收器机会在同一时间接收到这条广播消息,没有优先级。这种广播效率比较高,不会检测优先级,同时也是无法被截断的。如下图(随手画)
2018-03-13 09:33:17
378
原创 fragment通信的几种方式(接口框架)
fragment通信是我们经常遇到问题,各种解决方案都有。 首先明确的重要点:谷歌官方建议两个fragment不要直接通信,会造成碎片耦合。 方案一:handler方案 方案二:广播方案三:EventBus方案四:普通接口方案五:万能接口
2018-03-12 17:51:16
5686
1
原创 Looper、Handler、Message三者关系
Looper、Handler、Message的关系,一般面试的必答题,涉及到Android的异步消息处理机制。简单的来说,我们一般用Handler实现异步消息处理。为什么会用到Handler? 子线程不允许访问 UI(在多线程情况下,UI控件会处于不可预期的状态) Handler采用单线程模型,切换到UI线程去操作UI,解决以上问题。
2018-03-06 16:52:06
482
原创 签名方案Signature Versions V1&V2
最近studio升级到3.0版本后,突然发现项目打包的时候出现以下勾选项: Signature Versions V1&V2 必须要选一种签名方式,才能进行打包。 查了下资料才知道Android7.0更新了打包方案,参考资料如下: https://developer.android.google.cn/about/versions/
2018-01-09 14:33:09
11575
1
原创 安卓8.0系统notification适配Failed to post notification on channel “null”
刚刚升级了8.0系统后,模拟器突然出现以下错误“Failed to post notification on channel “null”” 由于8.0通知栏增加了channel渠道式消息分发机制,在Android文档中编写的: https://developer.android.com/preview/features/notification-channels.html所以要去对8.0系统进
2018-01-04 16:18:15
7043
原创 动态更换app启动图标
动态更换app启动图标类似于双11与双12活动,app的启动图标会自动进行更换。原理很简单,通过PackageManager来启动或者禁止组件。预埋多个app入口,放置不同的icon。通过改变启动的activity来更换图片常规启动 。
2017-12-18 11:25:24
1937
转载 TCP协议三次握手协议
connectTimeout:指http建立通道的时间,我们知道http底层是基于TCP/IP协议的,而TCP协议有个三次握手协议,所谓三次握手简单的理解为 客户端问服务端:我要准备给你发数据了,你准备好了么 服务端向客户端回答:我准备好了,你可以发数据了 客户端回答服务端:我收到你的消息了,我要发数据了 然后巴拉巴拉一堆数据过去了。 这里就能看出来,只有这三次握手建立后,才能开始发送数据,
2017-12-08 11:25:13
507
原创 仿知乎广告效果
仿知乎广告的效果,先看效果图 效果如下: 向上滑动,图片的头部先出来,然后随着滚动,也一起滚动,到图片滑出屏幕时候,图片内部也到达底部。 向下滑动,图片的底部先出来,然后随着滚动,也一起滚动,到图片滑出屏幕时候,图片内部也到达头部。所以有几个要点 1, 图片内部肯定是使用canvas.translate 2,图片随着list滑动而滑动 3, 图片要设置属性 andr
2017-12-06 14:35:34
1143
转载 Android中colorAccent,colorPrimary,colorPrimaryDark颜色指的谁?
伴随着Android5.0的发布也更新了support-v7-appcompat 到V21,其中增加了ToolBar、recyclerview、cardview等控件。 Android5.0对改变APP样式下了不小的功夫,写法也和以前不一样了,下面先简单介绍一下colorAccent,colorPrimary,colorPrimaryDark……的作用: 1.colorPrimary 应用的主要
2017-07-25 17:40:02
7736
原创 RecyclerView特性和使用
RecyclerView 的由来根据谷歌官方的说明:A flexible view for providing a limited window into a large data set。能够在有限的窗口中展示大数据几个的灵活滑动视图。集合了ListView ,和GirdView,并且标准化了ViewHolder,逻辑被封装了,复用更方便。可以通过布局管理器LayoutManager可以控制
2017-07-17 11:09:41
519
原创 Android双进程守护
我们以技术不可耻的原则来讲下双进程守护保活应用,达到类似QQ的保活效果。当然QQ保活主要是厂商定制后添加了应用白名单,在底层上就得到了保活的支持。双进程另一个好处就是可以分配更多的内存,我们知道每一个进程都会分配对应的内存,所以当2个进程时会保证应用的流畅行。
2017-06-20 14:46:24
661
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅