自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(110)
  • 资源 (3)
  • 收藏
  • 关注

原创 TabLayout初始化后onTabSelected首次没有被回调的问题

我们经常使用TabLayout控件来管理多个页面的展示,但是应用不当的话,可能会给我们带来一些小小的困扰。比如说,我就曾经遇到过TabLayout 初始化后OnTabSelectedListener中 onTabSelected首次没有被回调的问题。为了深刻了解问题的缘由,还需要从代码中一窥究竟。这篇文章主要是记录当时的学习的过程。首先列出能够避免上述问题的使用代码: tabLayout...

2019-07-26 20:17:19 3324 1

原创 Android开发笔记(二) 关于弹窗

Android中提供几种不同的弹窗模式,Toast,Dialog,PopupWindow 每种弹窗又对应了不同的应用场景,我们可以根据不同业务场景来选择。下面将会分别介绍上面四种不同弹窗的应用,同时也对每中弹窗的源码和所遇到的问题进行分别分析。1.ToastToast是Android中最轻量级的视图,该视图已浮于应用程序之上的形式呈现给用户。它并不获得焦点,即使用户正在输入什么也不会受到影响,...

2018-10-25 19:27:15 653

原创 Android开发笔记(一)沉浸式状态栏

在Android开发中我们越来越重视用户的App操作体验,在使用App中我们主张减少对用户的干扰,经常会提到一致性体验。为了追求界面的风格的一致性,Google官方在Android 4.4 开始,支持了系统最上方的状态栏(StatusBar)和最下方的导航栏(Navigation Bar)可以被透明化,使得APP中的设计可以过渡更加平滑,不像之前那样的割裂感,让整个APP更加一致。而且后续的系统版...

2018-09-21 09:45:16 424

原创 为何在onCreate中通过View.post能获取宽高

我们在获取View的宽高时,其实执行的代码是:/** * Return the width of the your view. * * @return The width of your view, in pixels. */@ViewDebug.ExportedProperty(category = "layout")public final int getWidth() {...

2018-08-16 17:45:53 467

原创 Android 从程序启动startActivity到生命周期变化的过程

在上篇文章中,我们了解了Android应用程序是如何启动的,也介绍了具体的流程调用。知道了整个APP的启动过程都是由ActivityThread类中执行的,而且启动中的生命周期的变化都是通过Handler消息机制来完成的。那么这篇将要具体介绍从启动到startActivity时生命周期变化的过程。 从上篇知道执行了ApplicationThread中scheduleLaunchActivity,...

2018-07-31 11:00:47 1854

原创 Android 程序在系统中如何完成启动

一段程序的调用都有它的程序入口,众所周知Java程序的入口在main方法。作为Android来说应用程序的启动是通过 ActivityThread 类 来执行的。系统中对于该类的介绍如下:该类是管理应用程序进程中主线程的执行,调度和执行活动,广播以及活动管理者请求的其他操作。当我打开App时,首先调用的是这个类中的main方法,也就是说这里控制着程序的启动。ActivityThread...

2018-07-24 09:57:01 760

原创 Fragment启动过程,从getFragmentManager开始

概述时至今日,Fragment已经成为Android开发中应用最广泛的方案了,几乎每一个APP都离不开它的影子。为了更深入的理解其中原理,我们从Fragment中源码开始分析。这里我们选择V4包中的Fragment来进行分析。

2017-12-27 17:38:21 1886

原创 关于Android混淆文件统一管理

概述对于学习Android开发的我们都知道,在发布生产包时需要对项目开启混淆,这样可以避免项目代码暴露在别人面前。而Android Studio在build.gradle文件配置上也非常贴心的提供了开启代码混淆的方式,开发者只要按照官方建议进行配置即可。

2017-11-17 09:15:23 869

原创 LinkedList源码解析(jdk1.8)

概述LinkedList实现了List接口,底层是基于双向链表的结构实现的。相对于ArrayList的数组结构,它在执行插入和删除操作时要比ArrayList更加高效,但是它的随机访问查找要比ArrayList逊色。

2017-09-21 10:09:46 367

原创 Vector源码解析(jdk1.8)

概述Vector实现了List的接口,底层同样是基于数组实现的,可以存储null。功能结构与ArrayList的类似,不同的是线程安全的。

2017-09-19 09:12:47 691

原创 ArrayList源码解析(jdk1.8)

概述ArrayList是基于数组实现的,它可以动态的增加和减少元素,灵活的设置数组的大小。

2017-09-11 10:44:37 284

原创 RxJava2.0中flatMap操作符用法和源码分析(五)

flatMap基本使用flatMap是变换操作符,使用一个指定的函数对原始Observable发射的每一项数据执行变换操作,这个函数返回一个本身也发射数据的Observable,然后flatMap合并这些Observable发射的数据,最后将合并后的结果当作它自己的数据序列发射。注意:flatMap对这些Observable发射的数据做的是合并(merge)操作,因此它们可能是交错的。

2017-09-07 16:03:13 5375 2

原创 RxJava2.0中map操作符用法和源码分析(四)

map基本使用map是变换操作符,对原始Observable发射的每一项数据应用一个你选择的函数生成新的结果,然后返回一个发射这些结果Observable。

2017-09-04 09:07:48 1888

转载 (转)Android Support兼容包详解

背景来自于知乎上邀请回答的一个问题Android中AppCompat和Holo的一个问题?, 看来很多人还是对这些兼容包搞不清楚,那么干脆写篇博客吧. Support Library我们都知道Android一些SDK比较分裂,为此google官方提供了Android

2017-09-01 09:56:52 347

原创 RxJava2.0中fromArray操作符用法和源码分析(三)

fromArray基本使用fromArray用来创建一个Observable对象,可以将一个数组转化为可被观察的序列并且将它的数据逐个发射。 fromArray与just相似,都可以用来发射单个或一组数据,但是区别是当fromArray发射一组数据到观察序列中来时,它会先进行遍历,然后再逐个发射。而just发射一组数据时,会把它当成一个整体,一次性发射。

2017-08-23 08:31:56 8523

原创 RxJava2.0中just操作符用法和源码分析(二)

just基本使用just是用来创建一个Observable来发射指定值,可以将任何对象转化为一个用来被发射的ObservableSource数据。这个方法与fromArray相似,除了from会将数组或者Iterable中的元素逐个取出然后在逐个依次发射,而just会直接将数组或者Iterable对象作为单个数据来发射。

2017-08-22 08:48:41 5268

原创 RxJava2.0中create操作符用法和源码分析

create基本使用create是用来从头开始创建一个Observable的对象,应该调用ObservableEmitter的onNext, onError 和onComplete方法

2017-08-21 08:28:26 696

原创 AsyncTask源码解析

概述我们知道在Android应用开始程序运行时,系统会为应用启动一个单独的进程。默认情况下,该应用中的所有组件都会运行在相同的进程和主线程中。一个Android程序默认只有一个进程,但是你可以在清单文件中通过android:process 属性设置多进程。在同一个进程中,可以拥有多个线程。在这些线程中,可以分为两种:主线程(Main Thread/UI Thread)和工作线程(Worker Thr

2017-08-14 11:02:44 219

原创 深入理解 Android 之 View 的绘制流程(五)_invalidate,postInvalidate和requestLayout

上几篇文章里,我们分别介绍了View的三大工作流Measure,layout,draw。在分析源码的过程中我们会发现View的绘制流程还会受到其他方法的影响。比如:requestLayout,invalidate,postInvalidate。下面我们来分别解析下这三个方法的不同调用。

2017-07-26 08:54:16 910

原创 深入理解 Android 之 View 的绘制流程(四)_Draw

前面我们介绍了Measure和layout,下面我们就开始分析Draw。先从ViewRootImpl中开始。

2017-07-25 08:45:20 628

原创 深入理解 Android 之 View 的绘制流程(三)_Layout

上篇介绍了ViewRootImpl调用View的测量操作,下面就开始介绍ViewRootImpl中的布局操作了。

2017-07-20 16:01:07 300

原创 深入理解 Android 之 View 的绘制流程(二)_Measure

上一篇中介绍了将xml布局文件加载到Activity中之后,对View进行开始绘制之前的一些操作进行了说明。知道了View的绘制主要是由ViewRoot负责执行,并且对执行的核心方法进行了图示说明,如下:

2017-07-20 09:32:15 627

原创 深入理解 Android 之 View 的绘制流程(一)

上一篇中我们介绍了通过setContentView方法将xml布局文件加载到Activity中,知道了在PhoneWindow中的setContentView方法里,有分别调用了installDecor方法,mLayoutInflater.inflate(layoutResID, mContentParent),才使得布局能够显示出来,那么现在我们就要介绍xml的布局中的view是如何被绘制出来的。

2017-07-14 18:42:15 514

原创 源码分析setContentView加载布局文件的过程

我们都知道通过setContentView方法将xml布局文件加载到Activity中,然后屏幕才能显示出xml中定义的view。在整个过程中,无须做太多的操作,屏幕就能显示出正常的内容。现在我们从源码的角度来看看系统到底帮我们处理了哪些操作。

2017-07-12 09:13:50 533

原创 再一次撸Handler、Looper、Message源码

从事Android开发的人,一定对Handler非常熟悉。Handler是一套消息处理机制,允许你发送,处理消息来实现线程间的通讯。每个Handler实例与一个线程和该线程的消息队列关联。当你创建一个Handler时,它会绑定到创建它的线程的消息队列上。将传递的消息加入到这个消息队列中,通过轮询取出消息,然后Handler可以接收并处理出队的消息。Handler发送消息通过 post、postAtT

2017-07-05 09:45:01 1701

原创 计算全屏幕/状态栏/导航栏的高度工具类

计算全屏幕/状态栏/导航栏的高度工具类

2017-03-29 09:37:00 1612

原创 Android中Service和Thread区别

在工作中,有时会被人问到,Android中的Service和Thread有什么区别,为什么有时放着方便的Thread不用,而去使用Service呢? 首先,要说明的是,进程是系统中最小的资源分配单位,而线程是最小的执行单位,线程需要的资源通过它所在的进程获取。

2017-03-21 10:46:36 428

原创 Android 开源框架Glide应用(二)_占位&动画&Gif

在APP显示图片时,拥有一个良好的体验是非常重要的,即图片不会突兀的出现,同样在出错时,需要有明显的提示,对于这些Glide都提供了接口,帮你去提升APP的体验。

2017-03-20 11:28:47 2276

转载 Android获取窗口可视区域大小: getWindowVisibleDisplayFrame()

getWindowVisibleDisplayFrame()方法getWindowVisibleDisplayFrame()是View类下的一个方法,从方法的名字就可以看出,它是用来获取当前窗口可视区域大小的。

2017-03-14 09:21:52 795

原创 仿微信可折叠效果的TextView

在微信朋友圈中,发送大量的文本信息时,在展示的时候微信会将该文本信息进行折叠处理,出现“全文”,“收起”的操作提示。当点击全文时,才能看到全部的文本信息,正好最近的项目中也提出了类似的需求,这里就对该自定义View的实现的方法进行了整理。

2017-03-08 14:37:32 1609 1

原创 Fragment的填坑之旅

前言目前主流的应用中,多是采用单Actvity多Fragment的方式实现的。随着应用功能越来越多,界面越来越复杂,我们会利用Fragment对Activity的界面进行模块化编程。Fragment有着种种优点吸引着我们,如比Activity有着更好的性能,能够轻量切换,开销比Activity小等等。

2017-03-02 16:26:02 734

原创 当FragmentTransaction在add和replace时,它们之间的区别

前言我们在使用FragmentTransaction的时候,经常会遇到add,replace这两个方法。

2017-02-26 16:11:27 9615 3

原创 Android 开源框架Glide应用(一)

前言介绍谷歌在2014开发者论坛上,为我们介绍了一个名叫Glide的图片加载库,这个库被广泛的运用在Google的开源项目中。 Glide是Android中的一个快速和高效的开源媒体管理,图片加载框架。它封装了媒体解码,内存和磁盘缓存,将资源池变成一个简单一用的界面。支持获取解码,显示视频,图片,和Gif动画。Glide提供了一个灵活的API,允许开发人员自定义使用任何网络框架。默认情况下,使用一

2017-02-24 14:15:56 470

原创 判断Android app退后台、进前台

在某些特定的场景下,我们需要判断App是否进入后台运行状态。然后根据App处在前台/后台分别进行不同的操作行为。我们可以通过Activity的生命周期来,实现这一需求。

2017-02-22 10:01:13 1224

原创 Android 应用启动时优化白屏问题

默认情况下 App在启动的时候,屏幕会出现一段时间的白屏,不同的设备可能白屏显示的时间长短不同,显然影响用户体验,我们只要设置第一个页面的主题,便可以消除这个问题。

2017-02-21 11:27:07 9726 4

原创 Gradle for Android应用

概述我们都已经知道Gradle是基于JVM的一种构建工具。它是基于Groovy语言的声明式构建,还支持java,C,C++等项目。我们在进行Android开发时,需要在Android Studio中对build.gradle文件进行配置。

2017-01-18 17:38:20 385

原创 使用CardView实现圆角或圆形的效果

前言CardView是Android 5.0 中一种全新的控件,可以实现圆角和阴影效果。

2017-01-07 10:09:06 34834

原创 ImageView的圆角或圆形使用原生support v4中的RoundedBitmapDrawable实现

前言之前曾使用Xfermode和BitmapShader实现了ImageView的圆角/圆形的效果。后来无意中在support v4包中,发现了一个类:RoundedBitmapDrawable。原来Google已经提供了直接实现图片的圆角,根本不需要使用第三方的类库,可以直接使用ImageView控件,重要的是还能和各种图片加载库配合使用。

2017-01-05 21:32:43 3650

原创 ImageView 绘制圆角效果_BitmapShader

前言之前我们已经提到过,我们可以使用两种方式来实现圆角图片的效果。一种是使用Xfermode,另一种是BitmapShader来实现。下面我将介绍BitmapShader用法。

2017-01-04 11:23:38 438

原创 ImageView 绘制圆角效果_Xfermode

前言Android 开发中,我们经常需要实现图片的圆形/圆角的效果,我们可以使用两种方式来实现这样的效果。一种是使用Xfermode,另一种是BitmapShader来实现。下面我将分别介绍这两种用法。使用Xfermode的方式实现 使用该方式的关键代码

2017-01-02 12:28:49 720

tomcat 8.5.8

tomcat

2016-11-25

Android逆向助手

Android逆向助手,用来反编译apk资源

2016-11-24

android webview与js交互简单demo

android webview与js交互简单demo

2016-08-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除