自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

huangjie的博客

stay hungry stay foolish

  • 博客(40)
  • 收藏
  • 关注

原创 用Rxjava来实现RxBus

前言  Android开发中,我们使用MVP模式开发的时候,涉及到Model层和Presenter层的通信的时候,我们一般都需要使用Handler 来实现,因为Model层我们一般处理具体的业务逻辑,不可避免的需要进行进行网络请求,由于Android中是不允许在UI线程中进行网络请求的,而更新UI必须是在UI线程中进行,那么就涉及到了线程的切换,在Rxjava 出来之前,我们都是通过Handle...

2018-12-31 21:47:29 1118

原创 TCP协议的三次握手和四次挥手

  TCP(传输控制协议)是一种面向连接,确保数据在端到端之间可靠传输的协议,面向连接指的是在发送数据前,需要先建立一条虚拟的链路,然后让数据在这条链路上传输,为了确保数据的可靠传输,不仅需要对发出的每个字节进行编号确认,检验每一个数据包的有效性,在出现超时情况时进行重传,还需要通过实现滑动窗口和拥塞控制机制,避免网络情况恶化而最终影响数据传输的极端情形,每个TCP数据包都是封装在IP包中。每一个...

2018-11-24 23:09:27 251

原创 Rxjava 2学习笔记(一)

Rxjava 2学习笔记(一)  Rxjava 在这些年在android开发中非常的火爆,它和Retrofit 的结合堪称完美,他们可以把我们从以前我们进行网络请求中各种线程切换,各种接口回掉中解放出来了。可以让我们的逻辑变的非常清晰,便于代码维护。我们公司的项目目前使用的Rxjava 版本还是1.0版本的,准备打算升级到使用Rx2.0。所以打算学习一下Rxjava 2Observable.c...

2018-10-22 00:01:22 280

原创 ThreadLocal源码分析

前言在上一篇深入理解Android中的消息机制,理解Hander MessageQueue Looper三者之间的关系中提到了ThreadLocal。今天看到一道美团的面试题如何保证一个线程中只有一个Looper。我第一个想到的就是ThreadLocal。因为ThreadLocal可以非常简单的实现保证一个线程中只有一个Looper对象。ThreadLocal工作原理ThreadL...

2018-08-26 23:14:11 260

原创 关于Java多线程编程学习笔记之volatile

Java内存模型java中的堆内存是用来存储实例化的对象,它在虚拟机启动的时候创建,在Java虚拟机规范中规定堆内存是所有对象实例以及数组都在堆内存中进行分配内存。堆内存是被所有的线程共享的内存区域,因此存在内存可见性的问题,但是局部变量,方法定义的参数则不会在线程之间共享,他们不存在内存可见性的问题,也不受Java内存模型的影响。Java内存模型定义了线程和主存之间的抽象关系。线程之间的共享...

2018-08-06 00:04:32 408

原创 深入理解Android中的消息机制,理解Hander MessageQueue Looper三者之间的关系

前言  Handler在Android开发中经常使用,比我我们在子线程中完成从服务端获取数据,因为Android系统是不允许我们在非主线程中去访问UI,这个时候我们需要用Handler把更新UI的操作切换到主线程中去操作。这里有一个误区就是很多开发者以为Handler只能用于访问UI,这是错误的,因为更新UI这是Handler的一种特殊的使用场景。其实Handler是用于进行Message R...

2018-07-22 23:46:04 835

原创 Http请求中常用请求头字段讲解

前言  在Android开发中我们需要时时的与服务器进行数据交换。但是我们都是使用的java或者Android或者第三方提供的Http请求框架来进行Http请求,基本不关心我们向服务器发起请求的Http请求头中的字段到底是什么意思。 字段 意思 Accept 这个头信息指定浏览器或其他客户端可以处理的 MIME 类型。有text/html,image/,/等几...

2018-06-17 18:55:23 13556 1

原创 Android中实现跨进程通信(IPC)的方式(三)之观察者模式

前言在Android中实现跨进程通信(IPC)的几种方式(一)中介绍了什么是多进程,为什么需要多进程,多进程的优缺点等。这篇我们将会使用AIDL来实现跨进程通信 在Android中实现跨进程通信(IPC)的几种方式(二)中讲解了怎么用AIDL实现跨进程通信。如果还不了解什么AIDL,那么可以看一下这篇文章。背景现在有一个需求是在另外一个进程中进行数据处理,我们需要获取它的处理结果...

2018-06-03 20:28:23 7412

原创 解决retrofit2.adapter.rxjava.HttpException: HTTP 400

解决retrofit2.adapter.rxjava.HttpException: HTTP 400 错误前言  最近项目中遇到一件怪事,在get请求中发现没有数据,在debug时候发现居然爆了一个retrofit2.adapter.rxjava.HttpException: HTTP 400错误。经过查阅资料发现400 请求出错   由于语法格式有误,服务器无法理解此请求。不作修...

2018-05-26 22:47:50 17885 2

原创 Android中实现跨进程通信(IPC)的几种方式(二)

Android中实现跨进程通信(IPC)的几种方式(二)    在上一篇文章中介绍了什么是多进程,为什么需要多进程,多进程的优缺点等。这篇我们将会使用AIDL来实现跨进程通信。1.什么是AIDL    AIDL全称是Android接口定义语言 您可以利用它定义客户端与服务使用进程间通信 (IPC) 进行相互通信时都认可的编程接口。 在 Android 上,一个进程通常无法访问另一个进程...

2018-05-26 18:40:25 7758

原创 Android中对象的序列化

为什么需要对对象进行序列化永久的保存对象数据(将对象数据保存到磁盘中)通过序列化操作将对象数据在网络上进行传输(由于网络传输是以字节流的方式对数据进行传输的.因此序列化的目的是将对象数据转换成字节流的形式)需要通过Intent Binder传递对象的时候需要对象实现序列化Android中实现序列化的两种方式1. 实现Serializable接口    Serial...

2018-05-20 23:55:53 6833

原创 Android开发者必备的网站

官方网站1谷歌Android开发者页面     这里是主站点,在这您可以找到一切资源帮助您开始Android开发。此站包含了很多关于学习基础知识的资源,完整的API引用,以及你开始开发所需的各种工具。此站共分为五个部分:     1. 作为初学者,你应该从工具开始,这部分讲解了如何安装AndroidSDK。     2. 教程为你提供了关于Android的基本介绍,教给你如何写出你的第...

2018-04-04 23:08:49 9072

原创 Android中实现跨进程通信(IPC)的几种方式(一)

前言    首先我们需要了解什么是进程,进程和线程是两种完全不同的概念,从操作系统的角度来看,线程是CPU调度的最小单元,而进程一般指的是一个执行单元。在我们的Android系统中,一般一个进程指的是一个应用程序,但是不能说一个应用程序中只能有一个进程,一个应用程序中可以有多个进程,市面上主流的App,都是多进程的。一个进程中可以包含多个线程,因此进程和线程是包含与被包含的关系。在最简单的情况...

2018-04-01 21:28:57 7508

原创 Android中Activity启动模式分析

前言     当我们启动多次启动一个同一个Activity的时候,系统会创建多个实例并把他们全部放入任务栈中,当我们返回的时候,会发现这些Activity会一一回退。我们都知道栈是一种先进后出的数据结构,任务栈本质就是一个栈类型的数据结构。这就是为什么我们每按一下返回键都会有一个Activity出栈,直到栈为空为止。当栈中没有任何Activity的时候,系统就会回收这个任务栈。如果多次启动一个...

2018-03-31 21:55:21 6697

原创 Android中Activity生命周期

正常的情况下Activity的生命周期onCreate():从字面意思我们也能看出这是在Activity 正在被创建的时候执行的一个方法,也是Activity生命周期的第一个方法。我们一般都在这个方法中执行初始化工作。onRestart():表示Activity正在被从新启动,一般情况下一个Activity从不可见变成可见时,onRestart()方法会被调用。onStart():表...

2018-03-31 16:41:54 6711

原创 Mac下完全卸载干净Android Studio

第一步: 卸载Android Studio应用及相关配置在终端中输入:rm -Rf /Applications/Android\ Studio.apprm -Rf ~/Library/Preferences/AndroidStudio*rm ~/Library/Preferences/com.google.android.studio.plistrm -Rf ~/Library/...

2018-03-25 21:41:09 22002

原创 深入理解Java内存区域与内存溢出异常

深入理解Java内存区域与内存溢出异常前言Java开发中,我们不需要像在进行C/C++开发那样,需要自己去写delete/free来释放申请的内存,在Java中内存是交给虚拟机管理,凡事都是两面的,因为我们把内存控制权交给了Java虚拟机,一旦出现了内存泄漏和溢出问题,如果我们不了解虚拟机时怎么使用的内存,那么排查问题将会非常困难。运行时的数据区域Java虚拟机在执行Java程...

2018-02-20 18:01:03 6840

原创 Rxjava使用入门

什么是 ReactiveX?   ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。   实时数据处理是一件普通的现象,有一个高效、干净和可扩展的方式来处理这些情景是重要的。使用 Observables 和 Operators 来熟练操作它们。ReactiveX 提供一个可组合又灵活的 API 来创建和处理

2018-01-21 16:51:14 6714

转载 浅谈HTTP中Get与Post的区别

Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。   1根据HT

2017-12-16 17:36:02 3788

原创 Android 自定义 DialogFragment 宽度问题

自定义DialogFragment解决自定义DialogFragment宽度和高度问题自定义DialogFragment从底部弹出Android 自定义 DialogFragment 宽度问题

2017-12-07 23:15:48 7097

原创 Linux 中常见目录的作用

Linux 中常见目录的作用/ 根目录/bin 命令保存目录(普通用户就可以读取的命令)/boot 启动目录,启动相关文件/dev 设备文件保存目录/etc 配置文件保存目录/home 普通用户家目录/lib 系统库保存目录/mnt 系统挂载目录/media 挂载目录/root 超级用户的家目录/tmp 临时目录/sbin 命令保存目录(超级用户才能使用目录)/proc 直

2017-12-03 20:07:15 6784

原创 Linux中文件处理命令第一部分

Linux中文件处理命令目录处理命令:创建目录:mkdir [目录名] mkdir -p [目录名] 递归创建目录递归创建目录意思就是比如我想在Android目录下创建hello_world 目录,但是当前目录下是没有Android目录的,如果直接mkdir Android/hello_world会报错的,因为当前目录下没有Android目录。这个时候我们可以使用 mkdir -p Androi

2017-12-03 20:04:48 6183

原创 Linux 中常用命令

Linux 中常用命令[root@localhost ~] #Root: 当前登录用户localhost:主机名~ 当前用户所在目录(家目录)超级用户的家目录是/root ,普通用户的家目录是/home/user1# 超级用户的提示符$ 普通用户提示符ls [选项] [文件和目录]选项:-a 显示所有文件,包括隐藏文件 -l 显示详细信息 -表示是文件类型: -表示文件 d表示文件夹 |

2017-12-03 18:04:16 6241

原创 Retrofit总结

Retrofit个人总结记录一下开发中使用retrofit的时候的一些总结笔记。@Url适合用于比如BaseUrl不一样的情况。@Url后面就是url全路径@GETObservable<AppPathBean> getThreeAppUrl(@Url String path);@Path适合于路径中某个字段不一样。 @GET("users/{user}/repos") Call<List<R

2017-12-02 21:52:01 6716

原创 Android 开发中使用硬件加速

前言    我们平时在开发Android的时候,经常会接触到硬件加速这个词,因为我们一般都是在应用层做开发,几乎不怎么接触硬件,其实操作系统已经把底层硬件封装的很完善了,我们并不需要去写C语言就能开启硬件加速。开启硬件加速其实非常简单从Android 3.0(API级别11)开始,Android 2D渲染管道支持硬件加速,这意味着在View画布上执行的所有绘图操作都使用GPU。由于启用硬

2017-11-18 23:10:11 14214

原创 用RecyclerView实现仿支付宝应用管理

前言由于公司项目有一个应用管理的功能和支付宝的应用管理功能非常像,所有的信息都是从服务端拉去的数据动态生成,有不同的应用分类,有标题等等信息。对于实现这种效果可以用ListView 或者RecyclerView通过加载多种布局来实现。

2017-11-12 18:38:04 3999

原创 利用ActivityLifecycleCallbacks优雅的退出应用

Android中如何优雅的退出应用前言在android开发中我们都会遇到一个需求,那就是退出应用,那么我们都会退出所有的activity。 我们一般常用的方式有下面几种:第一种方式我们写一个BaseActivity,在activity的创建的时候添加当前activity到集合中,在activity销毁的时候把当前activity移除出activity集合。退出应用时直接遍历activity集

2017-09-02 22:19:14 4797

转载 Android中Looper讲解

在Android下面也有多线程的概念,在C/C++中,子线程可以是一个函数, 一般都是一个带有循环的函数,来处理某些数据,优先线程只是一个复杂的运算过程,所以可能不需要while循环,运算完成,函数结束,线程就销毁。对于那 些需要控制的线程,一般我们都是和互斥锁相互关联,从而来控制线程的进度,一般我们创建子线程,一种线程是很常见的,那就是带有消息循环的线程。消息循环是一个很有用的线程方式,

2016-04-05 21:03:24 379

转载 解决TextView中排版问题

1、半角字符与全角字符混乱所致:这种情况一般就是汉字与数字、英文字母混用 解决方法一:将textview中的字符全角化。即将所有的数字、字母及标点全部转为全角字符,使它们与汉字同占两个字节,这样就可以避免由于占位导致的排版混乱问题了。 半角转为全角的代码如下,只需调用即可。Java代码  public static String To

2016-03-31 11:11:22 1991

原创 Android中View的绘制

View可以看成一个树形结构,父控件是父节点,子控件是子节点。View的绘制过程就是遍历这棵树。View的绘制有三步:measure:测量View的Width和Height,layout:布局View(left,right,top,bottom),指定View和手机屏幕的上下左右的距离。draw:绘图以上的步骤必须按照顺序来。(顺便说一下,以上三个步骤发生在View的构造方

2016-03-03 09:40:12 252

转载 使用ActionBar报空指针异常

前言在使用 ActionBar的时候,有时候会爆出空指针异常,这是因为应用没有获取到 ActionBar 导致的,而导致应用没有获取到 ActionBar 的原因比较多,所以我们下面就来总结一下 ActionBar 获取不到的错误原因。解决办法检查你的应用是否设置了没有 ActionBar 的主题Theme,或者直接设置了 NoActionBar或NoTitleBar 属性

2016-02-27 16:37:35 1485

原创 android 中怎么让ListView可以无限循环加载 Adapter中的数据

有时候在开发的时候有这样的需求,那就是我们需要在ListView中无限重复加载一组数据,让我们的listView可以无限下拉。要想做到这点,我们必须自定义Adapter。重点在于们的getCount()方法因为我们的listView在加载数据的时候先要读取的,因为getCount()返回值的大小决定了ListViewy要加载的行数,所以这里我们需要返回一个很大的值,所以我们直接让它返回Inte

2016-02-25 10:34:16 3032 1

转载 LoaderManager使用详解(二)---了解LoaderManager

这篇文章将介绍LoaderManager类,这是该系列的第二篇文章。一:Loaders之前世界二:了解LoaderManager三:实现Loaders四:实例:AppListLoader注意:要了解这一LoaderManager这部分知识,要求对Loaders如何工作有基本了解。Loaders的实现将在下一篇文章中涵盖。现在你只需要将Loader

2016-02-11 14:11:38 325

转载 LoaderManager使用详解(一)---没有Loader之前的世界

了解LoaderManager这篇文章将介绍LoaderManager类,这是该系列的第二篇文章。一:Loaders之前世界二:了解LoaderManager三:实现Loaders四:实例:AppListLoader注意:要了解这一LoaderManager这部分知识,要求对Loaders如何工作有基本了解。Loaders的实

2016-02-10 23:06:41 1156

原创 android 中的Uri详解

在android 开发中我们经常看到Uri这个单词,第一眼看很容易看成我们经常看到的URL但是他们不同的。首先说一下他们的区别 URI是uniform resource identifier 统一资源标识符,而URL是uniform resource locator 统一资源定位器。所以URL是一种具体的URI它可以用来标识一个资源,也可以locate 他,而URN是uniform resourc

2016-02-10 22:11:26 5504

转载 android 中的Cursor

关于 Cursor在你理解和使用 Android Cursor 的时候你必须先知道关于 Cursor 的几件事情:Cursor 是每行的集合。使用 moveToFirst() 定位第一行。你必须知道每一列的名称。你必须知道每一列的数据类型。Cursor 是一个随机的数据源。所有的数据都是通过下标取得。关于 Cursor 的重要方法:close()关闭游标,释放资源c

2016-02-10 21:20:39 317

原创 TabLayout与ViewPager组合实现tab导航

因为TabLayout是在android.support.design包下面,所以需要引入android.support.design这个包ViewPager是在android.support.v4这个包下面,所以需要引入这个包。我在android studio 下面撸码。在写Viewpger的adapter的时候发现在android.app.Activity;这个包下面的Activtiy无法获得

2016-02-05 20:44:19 3790

原创 android中对一个集合中的数据进行乱序排列的一些方法

在android 中我们有时候需要让一个进行中原本有序排列的数据进行乱序排列,最近的自己做的项目中遇到了这种需要,所以把方法记录下来。第一种方法:我们可以利用Collections.sort()方法: ArrayList mList = new ArrayList();//////////对mList进行初始化/////////////////////进行乱序操作

2015-11-17 16:13:18 946

原创 android中 TypedValue.applyDimension 的作用

这个方法的作用是将我们在布局中用到的dp.sp等单位转换成标准的尺寸的一个函数。mMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,3, getResources().getDisplayMetrics());TypedValue.COMPLEX_UNIT_DIP是dp 单位,3是我们需要转换的

2015-11-17 16:07:15 3923

原创 android 中Service 和activity之间的数据传递的几种方法

1、原始数据类型:       在Activity/Servier之间传递临时性的原始数据,可以使用Intent的putExtras方法来传递数据。若传递的数据需要长久保存,则使用SharedPreference类来完成。2、传递对象。      当在Activity/Servier之间传递不需要长久保存的对象时,可以使用以下几种途径:    (1)通过Applic

2015-11-03 20:10:49 3143

空空如也

空空如也

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

TA关注的人

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