- 博客(65)
- 资源 (6)
- 收藏
- 关注
原创 图解HTTP读书笔记
返回结果的HTTP状态码服务器返回的各类状态码状态码以3位数字和原因短语组成。数字中的第一位指定了响应类型,后两位无分类。响应类型有以下五种类别原因短语1XXInformational(信息性状态码)接收的请求正在处理2XXSuccess(成功状态码)请求正常处理完毕3XXRedirection(重定向状态码)需要进行附加操作以完成请求4...
2020-02-12 15:55:45
212
原创 AndroidStudio3.5 以后修改内存大小
如图所示,从Help中选择对应选项:在打开的文件中输入内存大小:# custom Android Studio VM options, see https://developer.android.com/studio/intro/studio-config.html-Xmx5g重启Android Studio,使配置生效注意,不能直接修改bin下的配置文件,MAC直接修改配置文...
2019-12-31 17:39:16
923
原创 Android 10 获取剪切板内容
一般可以放在Activity的onResume中调用如下方法://获取剪切板内容private void getClipboardData() { this.getWindow().getDecorView().post(new Runnable() { @Override public void run() { //把获取到的内...
2019-12-17 17:40:09
15961
10
原创 Retrofit2.0 使用教程——MVP查快递
使用准备build.gradle中配置引用implementation 'com.squareup.retrofit2:retrofit:2.6.2'implementation 'com.google.code.gson:gson:2.8.2'implementation 'com.squareup.retrofit2:converter-gson:2.6.2'需要导入的包除了r...
2019-12-06 12:02:58
324
原创 ViewPager中的数据不更新
解决方式使用FragmentStatePagerAdapter,可以每次更新数据,且数据会是最新的。若使用FragmentPagerAdapter则可以在每个fragment中开放set方法,用来修改数据。注意:不能使用setArguments()方法,这个只能在新建时候使用一次,否则会发生java.lang.IllegalStateException: Fragment already a...
2019-12-04 15:38:08
304
原创 RecyclerView使用以及避坑指南
基本使用继承RecyclerView.Adapter,并在内部自定义对应的ViewHolderpublic class HelloRecyclerAdapter extends RecyclerView.Adapter<HelloRecyclerAdapter.ViewHolder> { private List dataList = new ArrayList(); ...
2019-10-29 18:24:04
344
原创 android新版本(8.0以上)使用Toast的那些坑
华为、三星等机型禁用通知权限后Toast不弹出原因查看Toast源码后发现,Toast显示要通过INotificationManager类来实现,而当通知禁用后,调用此类会返回异常,所以导致通知不显示,源码如下:public void show() { if (mNextView == null) { throw new RuntimeException("setView mus...
2019-10-11 16:54:43
1118
2
原创 Android性能优化整理总结
性能优化的目的在不断地迭代开发过程中,我们的应用功能会越来越复杂,代码量也会不断增加。再加上偶尔的重构、人员的变更等等原因,我们曾经那个如丝顺滑的项目也会渐渐变得卡顿。那么这个时候,就不得不提性能优化这个话题了。正好这段时间有空,就整理了一下常见的性能优化的几个方面以及各个方面的注意事项。一来是给自己脑中的知识做个梳理,加深下记忆,二来也能给一些萌新提供点思路。内存优化内存优化,可以说是性...
2019-10-09 18:30:04
215
原创 Android 面试中,常见的 java 问题(1)
如何停止一个线程请求?详情Thread.stop()可以停止,但是不安全的,已废弃的方法,不建议使用Thread.interrupt()中断当前线程,可以在线程中用isInterrupted()来判断线程是否中断。在线程的合适时机抛出异常。线程之间通信方式 详情socket文件传输aidl(binder)剪切板intent+bundle使用Message线...
2019-09-25 15:46:32
322
原创 Android系统启动流程
1. 启动电源以及系统启动电源键按下以后,引导芯片代码从预定义的地方开始执行,加载引导程序BootLoader到RAM,然后开始执行。相当于电脑启动时候硬件自检并拉起主板自带启动程序的过程。2. 引导程序BootLoader引导程序 BootLoader是在 Android 操作系统开始运行前的一个小程序,它的主要作用是把安卓的定制Linux拉起来并运行。类似于电脑的主板程序拉动Window...
2019-09-19 15:45:19
177
原创 哈希算法和HashMap原理
哈希算法什么是哈希算法哈希算法不是一个特定的算法,而是一类算法的统称,也叫散列算法。算法的作用哈希算法是为了把任意一个数据,通过计算生成一个定长的key。一个数据只能与一个key对应,通过数据可以得出key值,不能通过key逆推出数据值。比较官方的说法:f(data)=key,输入任意长度的data数据,经过哈希算法处理后输出一个定长的数据key。同时这个过程是不可逆的,无法由k...
2019-09-04 15:55:23
630
原创 PackageManagerService类作用分析
程序包管理程序包管理主要有三个内容:提供一个能够根据intent匹配到具体的Activity、Provider、Service。即可以把intent转化为可以被java类加载器识别的Component进行权限检查提供安装、删除应用程序的接口以上三个功能主要在PackageManagerService类中。以后简称PMS。包管理概述 框架可以分成三层,是应用程序层、P...
2019-07-12 14:53:15
717
原创 WindowManagerService分析
1.WMS概述WMS是系统的其他服务,无论对于应用开发还是Framework开发都是重点的知识,它的职责有很多,主要有以下几点:窗口动画窗口间进行切换时,使用窗口动画可以显得更炫一些,窗口动画由WMS的动画子系统来负责,动画子系统的管理者为WindowAnimator。输入系统的中转站通过对窗口的触摸从而产生触摸事件,InputManagerService(IMS)会对触摸事件进...
2019-06-14 15:43:06
190
原创 Android主线程消息循环简介
主线程消息循环简介主线程就是ActivityThread,在ActivityThread的main方法中,新建了Looper并开启了Looper循环。循环开启后,每当有新消息进入,Looper会处理对应的消息,处理完后进入休眠状态,主线程的一系列操作都是在这种循环中完成的,这就是主线程的消息循环。Handler运行机制什么是HandlerHandler在日常开发中,我们经常会接触到,通...
2019-04-10 16:03:13
742
原创 Socket通信原理及举例
大家或多或少的都听过Socket这个单词,我们都知道Socket是用于网络通讯中的某个步骤,那么Socket到底是怎么一回事呢?我们下面来仔细说一下。TCP/IP协议要想理解Socket,那么就不得不先熟悉一下TCP/IP协议族。TCP/IP(Transmission Control Protocol/Internet Protocol),既传输控制协议/网间协议,定义了主机如何接...
2018-06-04 19:53:30
1560
原创 Android中的Binder详解
Binder简介由于Binder在Android的信息传输中占有比较重要的作用,所以把对Binder的分析单独出一篇文章来记录一下。什么是BinderBinder,翻译为粘合剂,在Android进程间通讯相关的知识中经常出现。一般来说对Binder的解释通常有以下几种:Binder是Android中的一个类,实现了IBinder接口。Binder是Android独有的一种跨进程...
2018-06-01 16:17:07
1795
1
原创 Android IPC之AIDL详解
AIDL基本介绍AIDL的概念AIDL,全称是Android Interface Definition Language,也就是Android接口定义语言。所以AIDL也可以算作一种编程语言,它对应的文件以.aidl结尾。这门语言的设计主要是为了进程间的通讯。这个语言其实是一个模版,通过这个模版,系统会为我们 生成一个Binder文件,这个文件才是进程间通讯的关键。 我们可以完全不使...
2018-06-01 16:10:32
585
原创 Android IPC之Messenger的使用
这篇文章主要通过一个小程序来示范一下用Messenger在进程间传递消息的过程。功能简介服务端功能在服务端进程中创建一个Service处理客户端请求。当收到客户端的消息以后,打印客户端消息。然后返回一个消息回执到客户端。客户端功能在客户端进程初始化时候,绑定对应的服务端。给服务端发送消息,发消息类型为Message对象。然后等待服务端返回并观察日志输出。当收到服务端...
2018-06-01 16:09:19
417
原创 android中常见的IPC机制
最近在项目中再次用到了多进程相关的内容,这里结合最近看到的一些资料和个人积累对android的多进程这块进行一个总结。由于android多进程的内容比较多,这里分成几篇文章来讲解:Android中的多进程关于进程与线程在android中,一般情况下,一个应用对应一个进程。这个应用内部可以创建自己的子线程用来执行网络加载、数据处理等耗时操作,可以用UI线程来控制界面的交互、动画的执行等...
2018-06-01 16:06:44
545
原创 Activity详情——Android8.0中Activity的启动流程
每个Android开发者都知道,可以用startActivity()或者startActivityForResult()来启动一个Activity。那么startActivity()这个方法到底是通过什么样的调用流程来启动Activity的呢?下面我们从源码的角度来看一下调用流程:读源码前的准备android的服务端和客户端客户端:和各个App紧密相关的部分,比如Activi...
2018-05-24 14:37:06
14997
原创 Activity详解——Activity生命周期整理
Activity详解——Activity生命周期整理常见的各个生命周期介绍onCreate()和onDestroy()onCreate:表示Activity正在创建,是Activity生命周期的第一个方法。在这个方法中我们可以做一些初始化工作。比如加载布局资源,初始化数据等。onDestroy:表示Activity即将被销毁,是Activity生命周期中的最后一个回调。我们一般...
2018-05-17 18:31:22
494
原创 Activity详解——Activity的xml配置
首先是一些生命周期一览。如下xml中是Activity的xml配置方法的一览以及简介,详细的介绍可以继续往下阅读。&lt;activity &lt;!--是否允许activity更换从属的任务,比如从短信息任务 切换到浏览器任务,默认false--&gt; android:allowTaskReparenting=["true" | "false"]
2018-05-17 14:51:06
7598
原创 Activity详解—— Activity基本用法
Activity详解—— Activity基本用法Activity的xml配置Activity在使用时候必须在xml中设置,否则在启动Activity时候会找不到当前的类。下面配置是常用的作为程序入口的Activity配置。如下设置后,点击应用启动图标,第一个启动的就是当前Activity。 &lt;activity android:nam...
2018-05-17 14:45:22
16849
原创 Dialog类型的二三级联动选择器
picker使用方法:构建数据使用的是一个自定义类,支持传入泛型。基本数据类如下:public class PickerModel<T> { private String name = ""; private List<PickerModel> models; private T t;}以时间选择器为例,构建数据的方法如下:private static List<PickerM
2017-09-05 12:11:19
416
原创 Android中View的事件体系(3)——自定义横向滚动viewGroup
通过前几个知识,可以自定义一个横向滚动的viewGroup这个可以横向类似于viewpage+fragment而fragment中包含listView的效果,如果不做处理会有横向和纵向的滚动冲突,现在处理后可以实现既可以横向滚动又可以走纵向滚动,这里比较简单,只支持每个子view都是同样的宽高的情况,而且不支持子view的padding和margin。 具体的代码如下,里面有详细说明:@Suppr
2016-06-30 18:00:30
646
原创 AIDL简单实现(2)
在以上基础上调用添加书本接口,如下方法:先查看一下书籍列表,然后添加书籍,然后再请求书籍列表。 修改的代码如下:public void onServiceConnected(ComponentName name, IBinder service) { // 通过Binder来传递bookManager IBookManager bookManager = IBookManager.
2016-06-04 19:06:04
466
原创 AIDL简单实现(1)
1、服务端服务端首先要创建一个Service用来监听客户端的连接请求,然后创建一个AIDL文件,将暴露给的客户端的接口在这个AIDL文件中声明,最后在Service中实现这个AIDL接口即可2、客户端客户端首先要绑定服务端的Service,绑定成功后,将服务端返回的Binder对象转成AIDL接口所属的类型,接着就可以调用AIDL中的方法了。3、AIDL接口创建AIDL支持如下接口类型:除去shor
2016-06-04 19:04:10
491
原创 自定义android折线图,实现左右滑动和快速滑动
由于折线统计图在绘制过程中,会经常拖动,而每次拖动都需要重新绘制,所以考虑使用surfaceview。1、继承Surfaceview,实现SurfaceHolder.Callback, Runnable接口 /** * 画布创建时候执行的方法 * * @param holder */ @Override public void surf
2016-05-23 16:47:58
5894
原创 SurfaceView简单模版
代码比较简单,需要实现SurfaceHolder.Callback接口和Runnable接口,同时继承SurfaceView类,然后直接上代码吧:package com.wscq.linechart;import android.content.Context;import android.graphics.Canvas;import android.util.AttributeSet;im
2016-05-23 16:03:15
424
原创 自定义时间选择器
首先简单介绍一下这个选择器,可以旋转表针的方式旋转选择时间,然后在下一个视图中选择分钟数。通过两个接口回调来返回选择的结果。接下来说一下编程思路:
2016-05-16 18:01:41
498
原创 Android自定义View的一般步骤
设置当前View自定义属性需要在res的values文件夹下新建个attrs文件,在attrs文件中设置相关的自定义属性设置自定义属性的名称
2016-05-08 22:19:34
5600
原创 android绘图常用方法归纳
自定义绘图中难免会用到各种绘图方法,所以我在这里归纳一下。可能还有一些方法没有归纳完整,以后我会慢慢整理,直到达到一个比较完善的程度。
2016-04-24 10:19:23
623
原创 Android中View的事件体系(2)——View滑动与事件分发
1、View的滑动1.1、使用ScrollTo和ScrollBy滑动ScrollTo(x,y):滑动到某个位置,传递的是位置的坐标 ScrollBy(x,y):滑动某个距离,传递的是移动过的距离 同时这两个方法移动的是view中的内容,而不是view本身,比如作用于Layout,将会移动的是layout中button的位置。从理解上来说,可以理解为画布在移动。操作简单,适合于对View的内容滑动
2016-04-13 13:40:58
486
原创 Android中View的事件体系(1)——坐标体系与移动
view的一些基本概念的整理和汇总,自己记录一下,用来方便以后的学习,同时也可以在使用时方便的找到对应的知识点。
2016-04-03 20:50:22
623
原创 Android中,单位dp、sp、px互相转换工具类
可以定义一个工具类,用来获取系统的转化比值,然后需要使用时调用即可。具体代码如下:/** * dp、sp转化工具 * * @author h55l5 * */public class DisplayUtil { /** * 将px转化为dip,保证尺寸大小不变 * * @param context * @param pxValue
2016-03-27 22:10:26
730
原创 利用ObjectAnimator实现侧滑菜单的效果
objectAnimator是一种焦点可以随着动画移动的动画,下面用一个简单的平移动画的例子,来实现侧滑菜单。
2016-03-23 11:28:14
654
基于jsp的班级信息管理系统
2014-06-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人