android
文章平均质量分 71
luweicheng24
今日的低头为了明日更好的抬头
展开
-
Handler 之 Message的复用机制
Android如何处理消息?Android是基于消息驱动的系统,消息处理机制自然重中之重 ,一句话大体说一下:每个线程用过ThreadLocal保证存储的Looper线程唯一性,Looper.Preapre中会创建一个该线程的MessageQueue(一个存储Message的消息单链表),而将消息插入到MessageQueue的执行者就是Handler,所以一个线程中一个Looper,一个M...原创 2019-11-04 15:06:48 · 877 阅读 · 0 评论 -
Handler的前世今生之framework层源码分析
Handler在线程间通讯随处可见,尤其framework层,Activity的生命周期就是AMS(ActivityManagerService)通过ApplicationThread(ActivityThread的内部类,也是一个Binder)发送Handler消息通知执行ActivityThread的相应的Activity生命周期函数。那就先来分析一下App点击运行后Handler如何执行Ac...原创 2018-05-30 18:03:37 · 183 阅读 · 0 评论 -
Handler的前世今生之预热篇 —— ThreadLocal
Handler是android开发中必须学而且非常重要的知识点,handler主要来处理异步通讯,而这里就会涉及到多线程异步通讯,在了解Handler前先来说一下ThreadLocal先来创建一个ThreadLocal,根据代码来了解其存储原理:TheadLocal<String> local = new ThreadLocal();local.set("hello"...原创 2018-05-25 18:35:26 · 162 阅读 · 0 评论 -
Android开发之Flux架构
Android开发之Flux架构 什么是Flux?Flux是一种软件开发架构,开发流程遵循Restful的点对点的数据流向,降低代码之间的耦合性,使得代码之间的调用更加清晰,Flux开始是应用于前端的技术架构,只要解决前端中资源与调用者的唯一性,下面是Flux架构的核心思想:Viewview是代表展示给用户的界面,比如Activity或者Fragment。Acti原创 2018-01-18 18:41:30 · 594 阅读 · 0 评论 -
Retrofit+okHttp3一步一步封装MVP
Retrofit+okHttp3一步一步封装MVP Retrofit+okhttp3 是目前最流行的网络请求框架,本文主要说明MVP一步步封装,对于Retrofit不会过多讲解。MVP算是目前比较火的一想移动端的代码架构,采用Presenter隔离View层和Model层,解耦View层由于涉及过多逻辑而造成的代码臃肿,导致调试以及后期更改麻烦,下面开始一步一步搭建Retrofit+okH原创 2018-01-22 16:54:54 · 870 阅读 · 0 评论 -
Android中数值计算的精度
Android中数值计算的精度 在平常的开发中,会经常进行数值的计算,而如何才能更加准确的得到计算结果是最重要的,最近在做一个金融类的项目,其中涉及到黄金的计算,所以写这篇文章来总结一下,如何对数值的计算更加精确完美,这是本人在简书的第一篇文章,欢迎大家留言讨论。问题起源: 作为一名利用Java的开发人员,当遇到数值计算的时候首先想到的自然就是Double和Float,Double的精度值是1原创 2017-09-02 13:28:55 · 1878 阅读 · 0 评论 -
自定义ViewGroup实现轮播图
作为一名Android开发者对于自定义View的掌握体现利润他对控件的深入理解,我下面是自定义ViewGroup实现轮播图,先上个效果图吧:效果图就是这样,自动轮播,可对每张图片进行点击监听,接下来我们先看一下自定义ViewGroup实现实现的代码:public class ImageBannerViewGroup extends ViewGroup { private int lastX;原创 2017-03-27 08:49:27 · 671 阅读 · 0 评论 -
自定义波浪加载小球
功能来源于需求 ,给我一盒画笔,我将画出整个世界。本篇记录一次自定义类似加速球的自定义实现:效果图 具体实现 为了实现这样的一个效果,就必须自定义View,进行自定义布局初始 化以及定义变量等: private Paint mPaint; //基本画笔 private Paint textPaint; //文字画笔 private Path path; //路径原创 2017-08-01 10:52:05 · 1173 阅读 · 0 评论 -
将一个项目改成另一个项目时踩坑记录
更改项目遇到的坑!!!最近公司需要将一个以前的项目改头换面成一个新项目,虽然没难度,但是需要改动的地方确实挺对,于是挽起袖子开始干,很快一款新的app项目就产生了,在真机上测试赛也是很完美的。但是当我再装以前的项目的时候就直接装不上了,报的错误是在极光的自定义权限时包名重复,打开代码一看确实这样,为了将原先的项目更改成一个全新的项目,在AS上面只需要更改一下ApplicationId,该属性是APP原创 2017-07-16 11:42:39 · 540 阅读 · 0 评论 -
Unable to start adb server: error: protocol fault (couldn't read status): Connection reset by peer
打开androidstudio,一直连接不上电脑,提示:Unable to start adb server: error: protocol fault (couldn’t read status): Connection reset by peer问题原因: 大多数情况是5037端口被占用。5037为adb默认端口。解决办法: 查看哪个程序占用了adb端口,结束这个程序,然...原创 2018-06-25 10:53:00 · 2583 阅读 · 0 评论 -
OkHttp3源码解析
引用 okhttp问世以来,以其高度封装、定制、简洁的api调用获得广大使用者的喜爱,目前最流行的网络请求框架莫过于rxjava+retrofit+okhttp,如果你一直停留在使用的地步,那你永远可能只是大自然的搬运工了,为了了解这些架构设计的巧妙以及为何会如此受欢迎,只用通过源码来了解设计精髓,学习square出品,必属精品的代码设计思路,本篇先来了解一下okhttp3,本片所有源码是...原创 2018-06-19 15:29:23 · 294 阅读 · 0 评论 -
Retrofit2.0源码解析
引用 Retrofit是Square生产的一款用于网络请求的框架,遵循RestApi风格,以其简单的网络配置与自定义设置,支持RxJava,自定义数据转换器等,Github上的start数已经有将近3w,而且目前一直在维护,内部网络请求采用okhttp来进行网络访问,这一系列的特性使其成为网络请求框架的新宠儿既然Retrofit如此火爆,那么自然是因为其良好的设计架构,完美的项目解耦...原创 2018-07-03 18:43:14 · 373 阅读 · 0 评论 -
Android中Dialog中的Window添加过程解析
Android中Dialog真的只能依赖Activity?Dialog一直作为一种依附在Activity上下文才能存在的窗口视图,那是否可以逃脱Activity的上下文,采用其他Context存在呢?答案是肯定的,Dialog完全可以不依赖Activity上下文存在,这里我们说的只是非Activity的Context,不是不依赖ContextDialog的组成:Dialog是一种承载W...原创 2019-06-14 19:54:20 · 2923 阅读 · 0 评论 -
Window添加悬浮窗解析
Window添加悬浮窗解析Window添加原理:window作为一种视图抽象承载者,唯一的实现类是PhoneWindow,PhoneWindow中包含一个视图结构DecorView(FrameLayout 包含Title布局) 该View便是我们会addView时的视图根布局 包含结构如下图:添加Window时代码如下: WindowManager windowManager ...原创 2019-04-17 16:27:01 · 1591 阅读 · 0 评论 -
View.post为何能够准确获取View的宽高
Activity作为android视图的承载者,拥有完整的生命周期,那我们到底在那个生命周期后能够通过View.getHeight或者View.getMeasureHeight获取准确的值呢?不至于总是获取到的值为0呢?为何我们通过View.post发送的runnable肯定会在界面绘制完成以及activity的window关联windowmanager后才会执行呢?带着这几个问题来追踪一下源码...原创 2019-03-28 11:39:37 · 883 阅读 · 0 评论 -
Activity启动到View的展示流程
####Activity启动到View的展示流程原创 2019-03-28 11:29:27 · 415 阅读 · 0 评论 -
Android如何通过降低App的Crash提升留存
app的crash大部分是由于代码不健壮或者脏数据造成的,·如何才能最大限度的避免这些crash,提升用户体验,增加留存,下面个人的一些对crash的思考与实践:作为一个android开发者基本了解当用户点击launcher上的app图标时,Zygote会fork一个进程,通过classloader加载运行ActivityThread的Main方法,然后bindApplication,由此开...原创 2019-03-27 20:22:04 · 342 阅读 · 0 评论 -
Android创建应用全局小窗口
需求描述 类似微信视频、语音时点击返回会形成一个App小窗口浮动在界面上,点击继续是通通话,如下图: 效果展示 技术分析 其实实现这个功能只需要你细心分析一下就有思路了:首先这个小窗口是浮动在app最上层的视图,其次所有触屏事件需先由该小窗口处理,还有就是小窗口的生命周期和Application也能虽可能不能同生,但是确是可以共死。所以可以在Applic...原创 2018-08-25 17:36:36 · 4949 阅读 · 0 评论 -
Volley源码解析
Volley作为轻量级网络请求框架已经被广泛使用,这篇文章就从源码角度深层次了解Volley的构成,立足于熟练使用Volley的基础之上先来看一下请求流程图 从一个简单是Request 来探究这个Request生命过程。 RequestQueue queue = Volley.newRequestQueue(this); // 1 创建全局请求队列(类似队列的类) ...原创 2018-08-06 14:36:14 · 307 阅读 · 0 评论 -
ApplicationId和包名啥关系
applicationId和包名的区别 今天由于由于项目需要改换成另一个app,所以就一顿调整,但是最后由于在项目的中使用的第三方的平台,比如:极光、友盟、百度定位等在添加应用时都需要包名,但是我在更改项目的时候只改掉了ApplicationId并未改掉包名,在第三方平台添加应用时到写那个,applicationId和包名到底什么关系? 首先我们要明白applicationId的含义是什么原创 2017-07-14 10:09:15 · 1607 阅读 · 0 评论 -
记一次面试编程题
今天去北京某公司面试一个Android的sdk开发工程师,到达公司后直接商家根据需求完成相应的编码工作,20分钟写不出来没有面试机会,结果不出意外的我没有完全写出来,被pass掉,内心虽然有些失落,但是一想,毕竟这个岗位薪资是是相对可观的,没有那么容易。也就释然了,在回来的路上才想到了如何写出来这个,欲哭无泪啊,于是想起一句话:机会随时都有,就看你准备好了没。下面是我回到房子后重新写的那个面试题,编原创 2017-07-04 11:15:50 · 338 阅读 · 0 评论 -
Android与JS数据互调
Android传输据给JS 在Android中将数据传给js,首先在AndroidStudio中创建一个项目,在认识目录下创建一个文件夹为:assets ,之后将写好的html界面放在这个目录下,为了界面好看点,我在该目录下放了一个图片,这里我为了方便就没有将该html放在Tomcat上。下面是我的html代码:<!DOCTYPE html><html><head> <titl原创 2017-05-22 20:42:55 · 378 阅读 · 0 评论 -
Fragment之间传递数据的三种方式
引言Android在3.0以后由于觉得Activity占用内存等问题,推出了轻量级的碎片可以嵌套在Activity中,大大减少了开销,由于Fragment的推广普及所以fragment之间的数据传递也油然而生,下面我介绍几个我用过的Fragment之间的数据传递:在介绍之间我们先来搭建以下这个Demo的布局和所需要了Fragment。 MainActivity布局如下:<?xml version=原创 2016-12-19 14:08:02 · 11409 阅读 · 3 评论 -
Android倒计时的三种实现方式
引言目前,处于安全的考虑,大部分软件账户注册都需要短信验证码,而点击验证码之后倒计时获取变得习以为常,下面个人总结了三种实现倒计时的方法。供大家参考:1 . 谷歌原生的计时器(CountDownTimer类) 首先,由于谷歌的开发者官网对国内开放了,所以我们先去看一下关于CountDownTimer的解释和应用:Schedule a countdown until a time in the原创 2016-12-23 19:07:12 · 3926 阅读 · 0 评论 -
添加商品到购物车动画解析
引言对于android人员来说,肯定接触过电商类的app开发,而商品的添加动画会让用户体验提升一大截。下面我给大家介绍一下如何制作商品的添加动画,先来看一下效果图: 怎么样,是不是还不错啊,接下来我们来看一下如何做到的:创建动画的层 /** * 创建执行的动画层 * * @return 动画的执行的ViewGroup */ private Vie原创 2016-12-22 12:24:47 · 385 阅读 · 0 评论 -
Android屏幕适配(一)
引言 Android系统作为目前手机市场占用率最高的系统,也由于它开源的特性,使得很多公司自己进行私人订制,尤其小米、华为等对android系统进行了深度定制,正因如此,手机屏幕的尺寸、分辨率造成android开发中屏幕适配的一大难点。上图便是android手机的屏幕分辨率的统计,是不是有点太花了,因为手机类型太多了,所以要做到所有屏幕适配基本不可能的,所以只能做到主流的屏幕尺寸,首先啊我们了解一原创 2016-12-14 14:19:40 · 362 阅读 · 0 评论 -
RXJava原理
RXJava简单理解首先,rxjava是什么?其实对于刚接触rxjava的宝宝而言,只需要掌握两点:观察者模式异步处理 观察上图,清楚生动刻画出了rxjava的观察者模式:开关(被观察者)作为的是事件的产生方(产生“on”和“off”这两个 Event),有它发起这起开关的事件。台灯(观察者)作为事件的处理方(处理的是“on”和“off”这两个事件),被动的执行on和off。原创 2016-12-09 19:07:11 · 838 阅读 · 0 评论 -
Logger的解析使用
Logger的简单使用作为一个入世未深的小程序猿,在运行过程中程序崩溃看到满屏的谷歌原生的log日志脑子里有一万只草泥马飞过,然而,我们的成长必须站在巨人的肩膀上,大神已经封装好了一个perfect的打印日志类Logger给广大猿们带来了方便,下面是个人的一点理解和使用: 首先我们看一下原生的log日志: 如果你已经习惯了这种日志,那么只能说你太容易满足了,接下来看一下Logger的日志,没原创 2016-12-11 16:11:28 · 1440 阅读 · 0 评论 -
深入了解Android引用类型
我们直接开门见山,Android中对象存在着4中引用的类型,因为android开发中绝大部分使用面向对象的java编写的,对于java而言世界万物皆是对象,而引用就好比是对象的代表,可以利用引用做对象包含的所有事情,而在android中Garbage Collection(简称GC)也就是垃圾回收器,是对象的克星,一个对象可以包含多个直接引用和间接引用,GC就像一名私人侦探一样随时在内存中查看对象的原创 2016-12-12 10:05:10 · 511 阅读 · 0 评论 -
android代码显示和清除缓存
Android中处理缓存今天早上如往常一样打开手机开始浏览新闻图片和视频,突然手机提示手机的缓存文件过大需要清理,出于职业敏感,于是起床,刷牙,洗脸打算写一篇自动利用代码清理缓存的文章。 首先,打开AndroidStudio准备先写一个测试一下是否可以,很显然没有毛病,下面我把刚写的代码贴出来,里面基本没有逻辑,挺简单的。/** * Created by luweicheng on 2016/原创 2016-12-13 11:01:41 · 730 阅读 · 0 评论 -
Fragment实现懒加载
引言Fragment是目前使用最广泛的组件之一,作为轻量级的布局承载组件,只有当它和v4包的ViewPager结合才是Perfect。在平常开发中,基本ViewPager中适配Fragment是必不可少的,然而当每个Fragment中的数据量大加载缓慢,在每个Fragment之间切换时将会不断地进行数据请求,对于ViewPager而言,他会默认加载当前可见的Fragment的前一个和后一个Fragm原创 2016-12-19 23:00:54 · 316 阅读 · 0 评论 -
Android多渠道打包
利用友盟实现Android多渠道打包Android作为当前手机市场占有的份额最大的手机操作系统,但是由于各个手机应用市场无法进行统一的管理,比如应用宝、问问市场、安智市场等等,为了能够在不同市场发布同一款应用,并且对该应用市场的下载个数进行统计,所以下面我就说一个同过第三方统计平台进行对应用市场的实时统计和监督,下面简单介绍一下利用友盟统计进行的多渠道打包:1 . 进入友盟官网,创建友盟统计的应用,原创 2017-03-20 09:15:55 · 224 阅读 · 0 评论 -
Error:java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException:
在AndroidStudio中创建了一个项目后,将素材图片导入后变易出错:于是各种百度,尝试了半天,终于发现了问题,原来是素材的问题,我当前的studio是最新的2.2.3版本,而以前项目中的那些素材本来没有任何问题,但是studio的严查图片.png图片格式是否符合标准,尤其对于.9图。但是上有政策下有对策,只要在你的Gradle的Android{ }下加入下面两行代码就能走后门逃过png图片的审原创 2017-03-20 14:58:22 · 265 阅读 · 0 评论 -
Android轮播图的实现
ViewPager实现轮播图对于轮播图的实现,我上次已经在博客中通过自定义ViewGroup实现了,不过过程比较复杂,设置到动画以及图片位置的计算,今天通过Android原生的ViewPager来实现开一个效果比较好的轮播图,先上个效果图: 在实现之前在ViewGroup中有个属性值:clipChilder=”true|false”这个值默认是true,就是当父布局设置为true时,子控件设置原创 2017-06-16 08:46:46 · 1236 阅读 · 0 评论 -
自定义弹出式菜单
自定义ViewGroup实现弹出式菜单在看了鸿洋大神的自定义ArcMenu之后,自己动手实现了功能相同的ArcMenu,记录一下: 首先来个效果图: 自定义属性(创建attr.xml)//创建自定义属性值(中心Button的位置和Item中心Button的半径)<?xml version="1.0" encoding="utf-8"?><resources> <attr name=原创 2017-05-08 12:02:12 · 363 阅读 · 0 评论 -
自定义ViewGroup之别踩白块
这篇文章通过自定义ViewGroup实现前段时间挺火的一个游戏——别踩白块。好了先看一下效果图:好了,下面我说一下我的思路,大家都知道重写ViewGroup的步骤:onMesure(),onDraw( ),onLayout(),这里我只需要重写onDraw()和onTouchEvent();好了,我首先创建的一个矩形类继承RectF类,创建了误了静态常量和两个构造函数:import android.原创 2017-05-03 14:40:44 · 700 阅读 · 1 评论 -
Dialog封装
自定义Dialog在平常开发中就经常会使用dialog来提示用户的操作,今天我在一个项目中我首先自定义了一个BaseDialog,代码如下:package sms.com.base;import android.app.AlertDialog;import android.content.Context;import android.os.Bundle;import android.suppo原创 2017-04-29 15:24:00 · 452 阅读 · 0 评论 -
Android模拟器安装apk显示无法安装
我在Android模拟器上安装apk时后出现上面的错误提示:但是安装有些apk却可以正常安装,这是由于安装的APP中使用了与当前CPU架构不一致的native libraries,所以导致报错,因为现在绝大多数的智能手机还都是采用ARM架构的,虽然android是支持ARM和x86架构,但是它们的指令集是有差别的,APP在开发的时候使用的是ARM的本地库,而我们在用AVD创建模拟器的时候使用的是x8原创 2017-03-23 16:41:18 · 22002 阅读 · 2 评论 -
RecycleView实现多布局
自从RecycleView推出后,其功能的强大让你纯粹能忘掉ListView和GridView等列表布局,因为RecycleView能够代替他们,而且使代码更加健壮,今天要说的是目前电商最流行的布局,如下图: 图中显示的就是一个RecycleView中实现排列的布局,下面我在一个RecycleView中运用了两种布局: 下面我们看一下具体的代码实现,我先创建了两种类型的数据,OneTypeB原创 2017-03-23 15:13:38 · 1013 阅读 · 0 评论 -
仿拉钩登录界面
仿拉钩登录界面对于一个好的app,用户体验首先是在第一位,然而用户首先看到的就是登录界面,如果下载过拉钩的app,他的登录界面是很华丽的,我今天模仿做了一个仿拉钩界面的登录,先看一下效果图:在软键盘弹出的时候,输入框上移,头像缩小上移,键盘隐藏时输入框下滑,头像放大。下面说一下如何实现上面的华丽登录界面:自定义圆形头像:package com.gsww.www.loginview;import原创 2017-04-08 18:55:04 · 697 阅读 · 0 评论