自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 资源 (2)
  • 收藏
  • 关注

原创 WindowManagerService

1.概述1.1窗口的定义“窗口”是一种通用的描述,指一个独立的界面,比如一个对话框窗口,一个Activity交互的窗口,一个菜单窗口等;“Window”是一个类,其实现类是PhoneWindow类,Activity类实现了Window.Callback接口,从而成了具有通用操作方式的窗口,所谓的通用操作方式包括,当用户按下Menu键后会弹出一个菜单,按Back键会退出当前Activity等。View也是一个类,通常翻译为视图,只一个独立的交互元素,比如一个按钮,一个文本框等。在WMS中,窗口由两个

2020-07-07 17:53:18 299

转载 解决android studio引用远程仓库下载慢(JCenter下载慢) Could not download kotlin-gradle-plugin.jar 问题

第一种方法使用开源中国的maven库阿里云的(速度飞快):http://maven.aliyun.com/nexus/content/groups/public/替换项目根目录下build.gradle中的 repositories { jcenter() }为: repositories { maven{url 'http://mave...

2019-10-15 13:56:19 600

原创 设计模式六大原则

总原则:开闭原则开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有的代码,实现一个热插拔的效果。想要达到这样的效果,我们需要尽量使用接口和抽象类等。1.单一职责原则不要存在多余一个导致类变更的原因,也就是说梅格雷应该实现单一的职责,如果不然,应该把类拆分。2.里氏替换原则(Liskov Substitution Principle)里氏替...

2019-10-12 16:45:05 133 1

转载 Could not resolve io.fabric.tools:gradle:1.24.1

错误信息解决办法buildscript { repositories { maven { url 'https://maven.fabric.io/public' } } dependencies { classpath 'io.fabric.tools:gradle:1.24.1' }}改成buildscript {...

2019-10-11 11:31:30 2051

原创 EventBus发送的消息,如何做到线程切换?

EventBus是一个机遇观察者模式的时间订阅/发布框架,利用EventBus可以在不同模块之间,实现低耦合的消息通信。EventBus使用简单且稳定,被广泛用在一些生产项目中。通常我们使用EventBus分发一些消息给消息的订阅者,除此之外我们还可以通过EventBus将消息传递到不同的线程中去执行,处理消息。本文结合源码分析EventBus切换线程的原理。EventBus切换线程在An...

2019-09-30 16:37:07 1341

原创 进程保活(二)

Android进程保活主要包括两个方面:1.提高进程优先级,降低进程被杀死的概率2.在进程被杀死后,进行拉活。上一篇文章进程保活(一)讲述了两种提高进程由新阿基,降低进程被杀死概率的方法,分别时1像素Activity和前台服务。本文继续讲述进程被杀死后拉活方案。1.利用系统广播拉活在发生特定系统事件时,系统会发出相应的广播,通过在AndroidManifest.xml中静态注册对应的广播...

2019-09-21 21:25:41 314

原创 进程保活(一)

Android进程保活主要包括两个方面:1.提高进程优先级,降低进程被杀死的概率2.在进程被杀死后,进行拉活。本文主要讲解第一点如何提高进程优先级。1.进程的优先级Android系统会尽力保持应用的进程,但是有时为了给新的进程和更重要的进程回收一些内存空间,会移除一些旧的进程。为了决定哪些进程留下,哪些进程被杀死,系统根据子啊进程中运行的组件和组件的状态,为每个进程分配了一个优先级等级...

2019-09-21 12:30:43 749

转载 LeakCanary原理解析

简介LeakCanary是一款开源的内存泄漏检查工具,在项目中,可以使用它来检测Activity是否能够被GC及时回收。使用方式解析LeakCanary.install()方法的调用流程如下所示:Install方法如下: public static @NonNull RefWatcher install(@NonNull Application application) { ...

2019-09-19 17:28:39 142

原创 如何判断应用是在前台还是在后台运行

1、通过RunningTaskInfo类判断(需要额外权限)/** *判断当前应用程序处于前台还是后台 */ public static boolean isAppRunningForeground(final Context context) { ActivityManager am = (ActivityManager) context...

2019-09-19 14:05:26 1360

原创 getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()路径

存储介绍Android系统分为内部存储和外部存储,内部存储是手机系统自带的存储,一般空间都比较小,外部存储一般是SD卡的存储,空间一般都比较大,但不一定可用或者剩余空间可能不足。一般我们存储内容都会放在外部存储空间里。使用过程注意事项:1.先判断SD卡是否可用,可用时优先使用SD卡的存储,不可用时用内部存储2.存储在SD卡上时,可以在SD卡上新建任意一个目录存放,也可以存放在应用程序内部文...

2019-09-17 10:37:46 986

原创 HashMap、Hashtable、ConcurrentHashMap的原理与区别

Hashtable

2019-09-17 00:29:41 148

原创 混淆一个混淆过的jar包再次打包错误

方案一1.查看AndroidStudio所使用的proguard的版本,每个人的地址不同,是在androidstudio安装目录下的   路径为D:\Program Files\Android\Android Studio\gradle\m2repository\net\sf\proguard\proguard-base &nbs...

2019-09-12 15:51:02 365

原创 final,finally,finalize的区别

finalfinal是一个修饰符也是一个关键字。被final修饰的类无法被继承。对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。但是它指向的对象的内容是可变的。被final修饰的方法将无法被重写,但允许重载注意:类的private方法会隐式地被指定为final方法。一个类不能既被...

2019-09-12 13:57:34 177

原创 String转为Int 面试题

String转为Int是一个比较常见的面试题,但是要写出严谨的代码,要考虑的细节还是很多。主要有以下几点:1.String为空的时候;2.String无法转换为有效的Int的时候(包含非数字字符的时候怎么区分);3.String中包含’+‘或者’-‘的情况;4.String只包含’+‘或者’-'的情况;5.边界条件,最大正整数与最小负整数。下面给出完整代码如下所示:public cl...

2019-09-11 01:47:30 322 1

转载 Android studio 出现Gradle sync failed: EventQueue.isDispatchThread()=false Toolkit.getEventQueue()...

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

2019-09-06 09:21:55 2899 1

原创 不要在onResume中申请权限

最近遇见一个问题,在onResume中申请权限,比如申请定位权限,如下所示:@Override protected void onResume() { super.onResume(); requestPermission(); } @TargetApi(Build.VERSION_CODES.M) private void r...

2019-09-03 15:28:41 1550

原创 ClassLoader详解

1.Java中的ClassLoader1.1 CLassLoader的类型Java的类加载器主要有两种类型,即系统类加载器和自定义类加载器。系统类加载器包括3中,分别是Bootstrap ClassLoader,Extensions ClassLoader和Application ClassLoader。Bootstrap ClassLoader(引导类加载器)C/C++代码实现的加载器,...

2019-08-27 20:46:04 469

转载 计算机网络学习总结

我是技术搬运工,好东西当然要和大家分享啦.原文地址第一章 概述网络的网络网络把主机连接起来,而互联网是把多种不同的网络连...

2019-08-26 00:56:45 1337

原创 Android静态安全检测

1.allowBackup标志位问题描述:AndroidManifest.xml文件中allowBackup属性值被设置为true时(默认为true),用户可通过adbbackup对应用数据备份,导出应用中存储的数据,造成用户数据的泄露。修复建议将android:allowBackup标志位设置为false。2.debuggable标志位问题描述:AndroidManif...

2019-08-13 11:55:02 2519

原创 Retrofit工作原理分析

本文基于Retrofit2.6.1源码来分析Retrofit的工作流程。Retrofit的基本使用public interface ApiService { @GET("wxarticle/chapters/json") Observable<DataListBean<WxArticleBean>> queryPartyDocumentCategory...

2019-08-08 16:20:22 341

原创 Glide加载图片源码分析(二)

上一篇文章Glide加载图片源码分析(一)分析了Glide加载图片的一部分流程,现在我们继续讲解图片加载流程。上次讲到图片加载最后会调用SingleRequest的onSizeReady()方法,而onSizeReady()方法会调用Engine对象的load方法,现在我们分析Engine的load方法。public <R> LoadStatus load( Glide...

2019-08-06 14:11:28 357

原创 Glide加载图片源码分析(一)

Glide加载图片源码分析withloadinto一般情况下,我们用Glide加载图片如下:Glide.with(this).load(url).into(imageView);接下来基于Glide4.9.0源码分析图片加载主线流程。withwith是Glide提供的有一组静态方法,它有好几个重载方法,如下所示:public class Glide{ ... @NonNull ...

2019-08-03 18:31:21 517

android使用Zbar实现二维码扫描

android使用Zbar实现二维码扫描,比Zxing识别率更高,优化识别远距离扫二维码

2016-05-14

android实现仿ios开关按钮

android实现仿ios开关按钮,绝对好用

2016-05-10

空空如也

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

TA关注的人

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