自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 收藏
  • 关注

原创 Git使用之连接本地和远程

1.在新创建的工程的二级目录,也就是settings.gradle所在的目录中,打开terminal,输入git init,完成版本库的创建。2.在该目录中增加 .gitignore文件,用来配置忽略文件。3.在远程创建一个版本库,复制好版本库的远程地址的连接。4.回到本地版本库所在的terminal中,输入git remote add origin +"复制的仓库的地址字符串"。对于之前关联过远程版本的,可以通过输入git remote rm origin来实现取消关联,然后输入上面的指.

2020-12-04 00:45:34 425

原创 如何修改项目的包名

1.ctrl+shift+r 替换原来的包名为你想要的包名2.在文件夹中重命名文件路径上的包的名字,保证和新包名一致3.AS中file->invalidateCache/restart->invalidate and restart重启工程后,就是修改了包名的工程了。...

2020-12-04 00:36:55 1444

原创 build-tools目录下的工具

要想使用这些工具,首先要做两个配置,第一个就是配置到环境变量,第二个就是配置常打开应用的alias,方便操作文本。1.配置环境变量在访达中点击前往-》个人-》.bash_profile ===>输入如下的几条命令配置:AAPT_HOME=/Users/zq/Library/Android/sdk/build-tools/30.0.2/export AAPT_HOMEexport PATH=$PATH:$AAPT_HOMEalias sublime='open -a /Appli

2020-12-03 14:25:31 1279

原创 占位式插件化框架之Activity的启动

1.定义一个lib,然通信的两个apk都依赖它,这个依赖的lib提供了双方通信的接口。我们的test项目就命令lib为stander。因为这个test是处理activity的,所以就只放了一个接口,对应了activity的7个生命周期回调方法。2.创建一个主工程,创建一个代理activity,加载插件的activity的时候,通过代理activity来绕过AMS的AndroidManifest配置检查。主工程中,需要先点击一下控件,触发加载其他apk的操作。具体加载包括apk中所有的类的加载和资源的加载

2020-11-25 01:14:24 149 2

转载 http和socket关系

一、先说下HTTP网络协议栈二、连接过程三、重点来了,TCP套接字编程,也就是所谓的socket四、通过比较发现http和socket完全是两个不同的概念,http是应用层的,socket是传输层和网络层的,http要基于socket实现。httpclient的默认请求超时时间为60s。五、发起一个HTTP请求的过程就是建立一个socket通信的过程。httpclient也是基于socket的Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP

2020-11-21 11:06:27 4942

转载 ReentrantLock实现原理

1 synchronized和lock1.1synchronized的局限性  synchronized是java内置的关键字,它提供了一种独占的加锁方式。synchronized的获取和释放锁有JVM实现,用户不需要显式的释放锁,非常方便,然而synchronized也有一定的局限性,例如:  1、当线程尝试获取锁的时候,如果获取不到锁就会一直阻塞。  2、如果获取锁的线程进入休眠或者阻塞,除非当前线程异常,否则其他线程尝试获取锁会一直等待。  JDK1.5之后发布的concurre.

2020-11-18 23:29:20 243

原创 动态代理替换OnClickListener中onClick()

代理是一种设计模式,从java代码的实现上来说,有静态代理和动态代理。静态代理通过类的组合关系(引用)来实现task的执行。比如PhoneWindow会让任务都交给ViewRootImpl去执行。今天着重讲讲动态代理。Java的动态代理比代理的思想更向前迈进了一步,因为它可以动态地创建代理并动态地处理对所代理方法的调用。所谓动态的创建代理,这个概念我不是很理解,所以绕过去聊聊动态代理的一个实战小demo。我们接下来实现一个通过注解来配置控件的点击事件。1.首先,要定义自己的注解。EventB

2020-11-18 01:07:54 710 2

原创 Android AIDL使用详解

一、概述AIDL 意思即 Android Interface Definition Language,翻译过来就是Android接口定义语言,是用于定义服务器和客户端通信接口的一种描述语言,可以拿来生成用于IPC的代码。从某种意义上说AIDL其实是一个模板,因为在使用过程中,实际起作用的并不是AIDL文件,而是据此而生成的一个IInterface的实例代码,AIDL其实是为了避免我们重复编写代码而出现的一个模板设计AIDL这门语言的目的就是为了实现进程间通信。在Android系统中,每个进程都运行在

2020-11-14 23:17:01 418 2

转载 Win7下如何使用GCC编译器

MinGW全称Minimalist GNU For Windows是个比较精简的Windows平台C/C++、ADA以及Fortran编译器,因为小,使用非常方便。MinGW最大的优点就是编译出来的可执行文件能够独立在Windows上运行。工具/原料 mingw-get-inst.exe 外网网络 windows mingw-get-setup.exe...

2020-02-27 17:16:15 931

转载 window7下配置下载android源码环境,安装Repo

1.安装git(版本控制工具)下载git:https://git-scm.com/download/win双击exe文件,按提示一步一步地安装,然后将安装后的文件的cmd文件夹配置到环境变量中。例如我安装后的cmd文件夹的路径:将git添加到环境变量中如D:softwaregitGitcmd将MinGW添加到环境变量中,如D:softwaregitGitbin...

2020-02-27 11:25:23 202

转载 用getDrawable()方法过时了

用getDrawable()方法过时了现象网友推荐谷歌查询结果Android SDK 升級到 23 之後,getResource.getColor(R.color.color_name) 過時,可以使用新加入的方法 ContextCompat.getColor(context, R.color.color_name) 。...

2020-02-27 11:23:52 1813 1

原创 Android Studio通过CMakeList集成so库

该教程的工作环境,AS版本3.5 gradle tool版本3.5.3 gradle版本5.4.1-allAndroid Studio通过创建c++项目就可以创建一个支持jni开发的工作空间了。其中的cmake下面会有c++文件生成的so库。现在的AS需要这样配置CMakeList文件,引入so库和头文件。build.gradle需要这样配置:至于jni的工作...

2020-02-26 21:06:03 1042

原创 解决状态栏图标变成一坨灰色

在5.0以后,状态栏和下拉才但对应的通知的small icon,会变成灰色的一块。这需要换成一个北京色透明的图片,做出icon的效果。从而在展示的时候可以不再是颜色一坨。...

2020-02-25 19:40:15 2303

原创 Firebase应用在后台无法接受透传数据的处理

官网上面的继承文档就很全了。主要是需要注意一个service-json的文件在本地。我这儿主要是解决一个比较坑的问题。应用在后台的时候不走FirebaseService的回调。大家的讨论如下http://www.imooc.com/wenda/detail/560985但是,作为一名安卓前端来看,这儿操作方法好像都是不靠谱的。最后仔细研读官方文档,发现有这么一句话:https://fi...

2020-02-25 13:47:02 926

原创 UML之6种关系的解释与画法

1.依赖关系,A类是B类的一个变量,B类持有A类的一个引用。依赖其实定义非常模糊,所以使用依赖只应该是在其他关系无法表示的时候:2.泛化关系 就是java中的继承3.关联关系,分为单项关联,双向关联和自关联,默认创建关联关系是双向关联。关联暗示了依赖,与依赖的最大区别在于:关联类通常作为一个类成员变量存在 与依赖相似,关联用来表示无法用聚合和组合表示的关系 举例:学生...

2020-02-25 13:22:56 349

原创 UML之逆向工程与正向工程工具篇

PowerDesigner可以帮我我们创建UML的oom图,既可以逆向工程---oom类图导成Java文件,也可以正向工程---Java文件导成oom类图。他的具体使用可以参考下一篇博客。本篇介绍如题的解决步骤:1.首先需要一个powerdesigner的文件包,里面需要有破解文件与汉化文件,真的需要可以留言找我要。解压后文件夹目录如下:.2.在第一里面直接选择安装,需要选择安装...

2020-02-25 13:00:55 1346

原创 图解mvc,mvp,mvvm

mvvm与databinding的使用:(待更)1.

2020-02-25 11:45:27 97

原创 Android的启动和优化

每个Android应用程序都是Zygote这个原型应用程序的复制品。Zygote的一个实例将作为启动系统的一部分。它在开机的时候实现自己的初始化,预加载Android的打不风框架,然后等待连接到套接字(这个套接字是啥我目前不懂)。当系统需要创建一个新的应用程序时,它就会连接到Zygote套接字,并发送一个小的数据包的描述,用来描述要启动的应用程序,Linux为每一个应用都创建了一个进程描述...

2020-02-25 11:32:14 99

原创 一个经典的constraintlayout布局

<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android....

2020-02-24 21:38:39 154

原创 Android 打印方法调用堆栈

RuntimeException here = new RuntimeException("here"); here.fillInStackTrace();Log.w("yuge", "Called: " , here);

2020-02-24 21:37:02 588

原创 repo 和Linux的一些命令

1.修改linux用户密码passwd -> 输入旧密码 -> 输入新密码2.移动文件到系统目录下sudo cp -r Documents/android-studio /usr/local/src3.用apt-get安装OpenJDK a.查看apt中的jdk版本 apt-cache search java|grep jdk b.选择版本...

2020-02-24 21:36:20 739

原创 no permissions (user in plugdev group; are your udev rules wrong?)

If you are trying to access your android devices shell using adb on a new ubuntu machine, there are higher chances that your may seen an error like below, 1 2 3 4 5 ...

2020-02-24 21:35:17 3247

原创 Binder的一波分析

https://www.androidos.net.cn/sourcecode,这是一个非常好的网站,可以看Android的源码,各个版本的都有。最好下载下来,编译并且刷一次rom,有助于对整个android操作系统的理解。由于Linux本身的进程间数据通信机制,管道的方式每次共享数据需要建立管道,更加耗费性能。减少管道建立可以通过共享内存的方式,但是Linux的共享内存的方式...

2020-02-24 21:34:28 146

原创 热修复的简单原理

2020-02-24 21:30:49 186

原创 Andoird的apk构建流程与组成结构

2020-02-24 21:28:42 241 3

原创 Synchronized(对象锁)和Static Synchronized(类锁)的区别

Synchronized和Static Synchronized区别通过分析这两个用法的分析,我们可以理解java中锁的概念。一个是实例锁(锁在某一个实例对象上,如果该类是单例,那么该锁也具有全局锁的概念),一个是全局锁(该锁针对的是类,无论实例多少个对象,那么线程都共享该锁)。实例锁对应的就是synchronized关键字,而类锁(全局锁)对应的就是static synchronized(或...

2020-02-24 21:26:11 461

原创 巧用buildconfig切换常量

应用中有个需求,对于不同分支版本的appkey是不一样的值。为了让library不用新建分支,我们通过在主feature的分支下进行参数配置,主feature分支不同,则对应的appkey的值是不一样的。具体的操作方法如下:1.主分支所在的project的buidle.gradle中:ext { romAppsOutDir = "${rootProject.rootDir}/ro...

2020-02-24 21:24:30 255

原创 Java虚拟机运行时数据区域

这儿的 程序计数器没有oom的情况常用的jvm堆内存的垃圾标记算法与垃圾收集算法如下。垃圾标记算法:常见的垃圾清除算法的分类如下:标记清除算法,需要遍历堆内存,产生大量内存碎片垃圾收集算法之复制算法,内存一分为2,每次使用一半,减少内存碎片,但是内存使用总量变小了。垃圾收集算法之标记-压缩算法: 压缩存货的对象在一端,然后回收内存。分代收集算法...

2020-02-24 21:22:11 109

原创 ThreadLocal分析

在开发中,我们可能会需要在一个线程中做一个方法栈很深的调用,同时需要在最后的处理结果中给出对应的监听回调。类似的需求比如文件的下载与缓存,涉及到从Activity到服务,到子线程,最后再回到主线程给出回调的操作。对于这种情况有两种处理方式,一种是在方法调用中一层层的传递监听器,但是这样的缺点是会让代码的维护变得复杂。另外一种是设置监听器为static的,这样虽然可以保证在对应的线程中随时改变监听器...

2019-12-20 12:16:18 254 1

原创 android配置charles进行抓包

因为图片无法正常上传,copy的原因,所以直接贴上链接了,实操可用的。https://app.yinxiang.com/fx/153fcf0e-1ce8-4d74-b872-658d0b4feb27

2019-12-19 19:58:50 160

原创 动态规划demo

本文借鉴了朋友的文章,做了一点润色。文章链接:https://blog.csdn.net/qq_27070117/article/details/79819352有一道算法题, 如下所示, 有一数字矩阵, 从左上走到右下, 只能向下或向右走, 求走到右下角所经过的数字的和的最大值以及经过的路径.1 2 3 45 6 9 89 1 0 12 3 4 5这道题就用到了动态规划算法...

2019-10-28 19:49:05 153 1

原创 ArrayMap与HashMap

ArrayMap是用两个数组进行数据存储。ArrayList是一个数组和链表进行数据的存储。1. 设计目的ArrayMap是一个用于存储“key/value”的数据结构,用于在某些场景下代替HashMap。相比HashMap,ArrayMap更加节省内存(使用数组的连续空间存储),但在速度上有所牺牲(使用二分查找,需要多次分配内存)。在存储的元素个数不多时,速度上的差距不太明显。为了节...

2019-09-18 20:54:54 428 3

转载 Android Support Percent库介绍

Percent库的设计目标是支持基于百分比的View大小设置。目前,Percent库仅支持在定制的ViewGroup中设置子View的大小为ViewGroup大小的一个百分比。 此外,子View的宽高也可以设定为一个比例关系。1. 引入Percent库直接修改build.gradle配置文件,添加该库的引用。例如:也可以通过Android Studio的Projec...

2019-09-18 20:49:42 183

原创 Mac下repo,gerrit的配置与sync代码

Repo 是一款工具,可让您在 Android 环境中更轻松地使用 Git。要详细了解 Repo,请参阅开发部分。要安装 Repo,请执行以下操作: 1.确保主目录下有一个 bin/ 目录,并且该目录包含在路径中: mkdir ~/binPATH=~/bin:$PATH 2.下载 Repo 工具,并确保它可执行: curl https://storage.goo...

2019-09-18 20:41:53 609

转载 Android Support Annotations库介绍

1. 引入Annotations库直接修改build.gradle配置文件,添加该库的引用。例如:也可以通过Android Studio的Project Structure (File → Project Structure,Dependencies)添加引用。 ???? Annotations库并没有被上传到jcenter(其它Support库也是), 而是存...

2019-09-18 20:41:17 371

原创 android广播8.0之后无法正常接收的原因与解决方法

广播分为发送者与接收者,广播接收者是安卓的四大组件之一。活动和服务这两个组件都可以发送广播。广播的发送,按照发送方式来区分,安卓有有序广播和无序广播,有序广播发送之后,系统根据广播接收者的优先级进行派发,接收者可以修改广播传递的数据且可以终止广播的数据。无序广播听说也会跟着优先级来进行派发广播,但是无法修改广播传递的数据且无法终止广播。听说按照某种方式来区分,还有串行广播和并行广播,这个在...

2019-02-13 11:09:45 1354 2

原创 自定义带有出场动画的饼状图

饼状图作为自定义view的入门,的确是很值得研究的。首先看一下效果:饼状图总体上概况思路,就是三个部分:1.绘制饼图文字提示和横线2.点击扇形变换大小的处理3.扇形一定情况下连贯生成的动画。总体上的解决方案就是:1.用两个paint,一个用来绘制扇形,一个用来绘制文字和横线,这儿绘制扇形用到了两个外接矩形,一个是未点击的,一个是点击后的。2.变换大小在这里面挺复杂...

2019-02-11 22:43:24 507

原创 Glide如何控制Gif的暂停与继续播放

项目中需要控制Gif的暂停与继续播放,万能的glide框架竟然没有提供现成的api,想破头脑,最后在公司架构师提供的一个网页链接中找到了答案。https://github.com/bumptech/glide/issues/1916代码很少,会者不难,难者不会Glide.with(context).asGif().load(list.get(position)).apply(opti...

2019-01-24 21:19:46 7888 6

原创 嵌入u3d页面导致的界面绘制不充分问题的解决

嵌入了u3d的布局,可能会产生view不绘制或者绘制不充分的问题。这时需要再布局文件中设置控件的显示属性为visiable,同时给它的上层布局中设置一个只有一个像素的imageview。绘制不充分问题大多数是因为上层的布局有一些页边距导致的。...

2019-01-18 21:18:54 163

原创 如何加载别人的老项目

开发中我们总是会需要借鉴前辈的作品或者demo来创作自己的作品,github上开源的android项目,很多都是年久没有维护的,引入本地也总是会编译不通过。具体的情景有如下几个原因:1.项目的build.grade使用的gradle编译工具版本有所不同。2.gradle-wrapper.properties里面的gradle版本使用不同。关于如何下载与放置gradle编译工具与对应版本...

2019-01-18 11:04:18 212

空空如也

空空如也

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

TA关注的人

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