- 博客(21)
- 资源 (6)
- 收藏
- 关注
原创 WindowManager基本原理
所有需要显示到屏幕上的内容,都是通过WindowManager来操作的。从Dialog的构造函数开始看context.getSystemService()根据键值对取出WindowManager,该对象的创建位于ContextImpl初始化时,最终返回的是WindowManager的实现类WindowManagerImpl。通过setWindowManager()将windowManager与window绑定Dialog(@NonNull Context context, @StyleRes int
2020-09-22 12:03:35
346
原创 ActivityThread和Application启动流程
ActivityThread基于Android-29ActivityThread就是UI线程即主线程,其中有main方法是整个APP的入口,在这里初始化了MainLoopermainHandler:ApplicationThread中的方法执行以及Activity的创建都依赖于主线程Handlerattach()方法 public static void main(String[] args) { ... Looper.prepareMainLooper();
2020-09-11 11:53:26
568
原创 Android注解以及自定义注解实例与解析
Android注解以及自定义注解实例与解析1. 什么是注解注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行标记,例如我们常见的@Override和@Deprecated,一般常用的注解可以分为三类:一类是Java自带的标准注解,包括@Override(标明重写某个方法)、@Deprecated(标明某个类或方法过时)和@SuppressWarnings(标明要忽略的警告),使用这些注解后编译器就会进行检查。一类为元注解,元注解
2020-09-11 09:37:08
705
1
原创 Volley源码解析(二)
上一篇博客介绍了Volley的请求流程,本篇会分别介绍请求过程,缓存过程,回调过程请求过程从NetworkDispatcher的run方法开始分析 while (true) { Request<?> request; try { // Take a request from th...
2020-02-28 19:36:16
119
原创 Volley源码解析(一)
Volley基本用法本文章目的不在于介绍Volley的用法,仅对基本的用法进行介绍,意在引出源码解析的入口Volley的基本用法通常为3步创建RequestQueue创建Request将Request加入RequestQueue以Josn请求为例RequestQueue mQueue = Volley.newRequestQueue(context);JsonObjectRe...
2020-02-27 19:14:41
224
1
原创 不同系统版本中新增方法、新增类的兼容
当应用需要适配新的系统版本,使用系统SDK中新增的类时,需要同时适配旧的版本。类的新增方法:通过反射的形式。Class cls = Class.forName("com.android.internal.telephony.BlockChecker");Method method = cls.getDeclaredMethod(methodName, paramType1, paramTy...
2019-11-08 12:04:02
182
原创 AsyncTask工作原理
AsyncTask封装了Thread,Handler,用于方便的执行后台任务以及在主线程中访问UI。类的声明如下:public abstract class AsyncTask<Params, Progress, Result> 首先看execute()方法,execute()直接调用了executeOnExecutor()方法:可以看到,首先调用了onPreExecute(...
2019-08-29 17:20:01
574
1
原创 Looper,MessageQueue,Handler,ThreadLocal--记录
今天看了一下Android消息机制,查资料加思考,仅作为记录ThreadLocalThreadLocal:为每个线程保存一份变量的副本。原理:先看set(),首先获取当前线程t,然后通过getMap(t)获取ThreadLocalMap实例,如果存在,则调用map的set(),否则创建map并传值。 public void set(T value) { Thread t ...
2019-08-29 11:31:54
278
原创 Android Service+AsyncTask实现断点续传下载并在前台通知栏显示下载进度
创建接口用于对下载状态的监听和回调。public interface DownloadListener { void onProgress(int progress); void onSuccess(); void onFailed(); void onPause(); void onCanceld();}创建下载异步任务。提供开始,...
2019-08-26 12:12:57
372
原创 Android 调用相机拍照并显示,打开相册并显示
调用相机拍照并显示设置拍照保存路径并将之转换为Uri启动相机,并传递该Uri作为参数在保存路径读取照片并显示private void takePhoto() { //创建File对象,用于储存拍照后的图片 File outputImage = new File(getExternalCacheDir(), "output_image.jpg"); ...
2019-08-23 15:32:39
3008
原创 Android Notification的使用
点击按钮实现弹窗通知@Override public void onClick(View view) { switch (view.getId()) { case R.id.send_notice: //创建点击后跳转页面intent Intent intent = new Inten...
2019-08-22 20:23:25
295
1
原创 Content Provider使用方法以及Android运行时权限申请
本文通过一个获取所有联系人实例来展示如何获取其他应用数据以及运行时权限申请过程。AndroidManifest.xml加入如下权限<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>声明一个listView存放取到的联系人信息;检测是否有对应权限,...
2019-08-22 19:49:49
1853
原创 RecycleView最佳实践-横向,竖向滑动,瀑布流
代码首先在gradle中添加依赖dependencies { ... implementation 'androidx.recyclerview:recyclerview:1.0.0'}定义一个适配器需要继承自RecyclerView.Adapter<FruitAdapter.ViewHolder>,传入泛型类型。public class Fru...
2019-08-22 19:34:14
505
原创 ListView最佳实践
思路利用getView()中contentView参数是用于对加载好的布局的缓存,将一个存放listview的item的ui控件的holder利用view.setTag()存放在该contentView的tag中,当contentView不为null时,直接取出holder更改ui控件的显示内容即可。代码ListView的Adapterpublic class FruitAdapter e...
2019-08-22 19:24:05
241
原创 Android使用Brocast Receiver实现强制下线功能
思路在list中存放所有Activity在收到强制下线的广播时,弹窗提示并关闭所有Activity。代码引用文本创建Activity记录类,提供add,remove,finish方法。public class ActivityCollector { public static List<Activity> activityList = new ArrayLi...
2019-08-22 19:09:27
364
原创 ubuntu使用docker,nginx,jenkins,gitlab实现持续集成
结构:docker创建两个容器,一个nginx,一个jenkins,将gitbook安装在jenkis容器中1.docker以及nginx容器的安装见此链接其中nginx容器的创建命令修改为下面命令,区别为挂载了两个文件夹,一个用来存nginx的常规文件,一个用来存放html文件,在 docker run -p 8080:80 --name nginx_1 -v /home...
2018-08-17 11:27:23
914
原创 docker的安装以及nginx容器的配置
docker的简单介绍:Images : 镜像,docker可从仓库中下载各种镜像,如nginx等 Container:容器:镜像与容器就如java中类和对象的关系,一个镜像可以创建多个容器,可以对容器进行配置.docker的安装:系统:ubuntu16.04命令:$ apt-get install docker.io$ docker version 查看版本修改doc...
2018-08-09 17:26:25
1957
原创 solr快速入门教程
由于项目需要,花了几天时间学习了一下solr单机版本,实现简单的搜索首先介绍几个基本概念字段field:可以将一个文档看做一个对象,字段相当于对象中的属性,我们检索就是对字段的值进行检索,分为字段,复制字段,动态字段.动态字段dynamicField:对于名称不确定的字段,我们可以只指定特定的前缀或者后缀,如对book_1,book_2这类字段,可以定义为book_*复制字段copyField:对...
2018-07-09 20:51:07
3281
原创 Ubuntu 18.04 安装 solr7.4详细过程
准备:solr 7.4,在官网上下载linux版本,默认jdk,tomcat已安装成功1.解压solr7.4到/opt下2.将solr-7.4.0/server/solr-webapp下的webapp文件夹复制到tomcat的webapps文件夹下,重命名为solr3.将如下jar包复制到tomcat/webapps/solr/web-inf/lib下solr-7.4.0/server/lib/e...
2018-07-05 19:24:04
915
原创 班级管理,课程管理(ztree,echart的使用)
班级管理:与其他模块管理相比,增了上传解析文件的部分,即可以通过表格文件对班级成员完成添加操作前端代码:下面是layui中上传文件所需要的配置,以及上传成功后的刷新操作<button type="button" class="layui-btn" id="addStudentByExcel"><i class="layui-icon"></
2018-06-07 21:26:21
847
ppjoke.zip
2020-09-11
属性动画 平移,旋转,缩放,透明度变化,使用ValueAnimator和ObjectAnimator实现 基于贝塞尔曲线实现的仿qq点赞效果的自定义ViewGr
2020-05-11
Android视频音频播放器
2018-06-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人