自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java 代理模式之动态代理应用及源码解析

代理模式代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。举个例子来说明:张三想买某种用品,虽然他可以自己去找,但是这确实太浪费时间和精力了,或者不好意思去买。于是张三就通过中介Mark来买,Mark来帮张三,张三只是负责选择自己喜欢的的size,然后付钱就可以了。目的:(1)通过引入代理对象的方式来间接访问目标对象,防止直接访问目标对象给系统带来的不必要复杂性; (2)通过代理对象对原有的业务增强;代理模式一般会有三个角色

2020-10-15 12:10:18 221

原创 Android高版本 scared读写权限问题,读写权限授予后仍提示 Permission denied!

Android 10 或者模拟器在向sdcard中写文件时发现,明明已经给了app sdcard卡的读写权限: private static final int REQUEST_EXTERNAL_STORAGE = 1; private static String[] PERMISSIONS_STORAGE = { "android.permission.READ_EXTERNAL_STORAGE", "android.permission.W

2020-10-14 17:55:43 913 1

原创 Android targetSdkVersion、buildToolVersion与CompileSdkVersion的区别和关系

相关版本配置介绍compileSdkVersion:这个是我们在打包时编译apk使用的sdk的版本号,也就是API-19、API-28等buildToolVersion:构建工具的版本号,一般是API-LEVEL.x.x,中间会有些小版本。如我们将资源文件打包成.java文件使用的aapt工具、将.class文件编译成.dex文件的dx工具等,这些工具在build-tool目录下如我项目的配置如下:compileSdkVersion 29buildToolsVersion "29.0.

2020-10-14 12:11:12 2016

原创 Java反射的简单介绍

什么是反射我们平时在创建对象的时候,一般都是通过直接new来获取,可以理解为这是正向的。反射我们可以理解为是反向的获取实例对象,他可以获取一个类的属性、构造器、方法、以及实现的接口等。Class类了解反射之前,我们最好先了解一个类:Class。这是一个什么样的类呢,有什么特殊的地方?我们平时自己编写的类,会定义一些属性、方法什么的,那系统存不存在一个类用来描述我们自己编写的类呢?我们自己写的类通过这个Class,就相当于自己照镜子一样,有哪些属性、那些方法、构造器等都会以Class的某种属性存在,Cl

2020-10-14 10:28:47 134

原创 java 泛型知识总结

首先说一下什么是泛型泛型,就是参数化类型。我们都知道在定义方法的时候,可以传入形参,在使用的时候实参,这是我们经常使用的,但是什么是参数化类型呢?顾名思义,就是将类型进行参数化,一般我们经常见到的分为三种:泛型类(class)、泛型接口(interface)、泛型方法(method)。我们为什么使用泛型可以通过如下代码说明:将错误发现在编译器 List list = new ArrayList(); list.add("first"); li

2020-10-12 08:42:13 98

原创 Android HandlerThread的用法

在进行Android开发很多时候都会用到线程调度,使用较多的就是Handler和Thread,其实Android还为我们封装了他们的结合体HandlerThread,那么他是个什么东西呢,又是怎么工作的,我们今天就来从源码角度来分析一下HanderThread我们知道在线程里面创建Handler需要先调用Looper.prepare()创建looper,最后调用Looper.loop()开启循环...

2020-03-11 21:10:07 333

原创 INSTALL_FAILED_ALREADY_EXISTS

安装应用时提示:INSTALL_FAILED_ALREADY_EXISTS,因为系统已经存在一个版本,只需要加上-r即可,adb install -r xxx.apk

2020-03-07 20:03:49 633

原创 android studio编译jar包或者aar包

1. 在原有工程目录右键-> new ->Module->:2. 选择library:3. 一路next,最后finish:4. 在新生成的lib module下的build.gradle中添加如下代码:task makeJar(type: Copy) { //删除存在的 delete 'build/outputs/aar/plugin-releas...

2020-03-07 17:09:39 1078

原创 git从某个commitid开始拉出新分支,并推送到服务端

我们在版本迭代过程中,总会遇到一场景,如版本开发到1.0版本,并对外发布了,接着再此分支上继续开发新的2.0版本功能,没有拉出新的分支。上线一段时间后,发现1.0版本存在bug,由于2.0开没有开发完成,不适合在当前节点修改bug然后打出版本,此时就需要在当初1.0发布版本的节点上拉出分支并进行修改,此种情况操作如下:1. git log :找出当初打出版本1.0的最后一次提交对应的commit...

2020-03-07 16:42:28 7857

原创 android jar “Caused by: com.android.tools.r8.utils.AbortException”

android studio打jar包后集成,安装报错“Caused by: com.android.tools.r8.utils.AbortException”,经过排查错误,发现这是因为较新的java8语言特性导致的,可以通过在项目Module的build.gradle文件中添加以下代码解决:android { ... compileOptions { sourceCompa...

2020-03-04 19:51:32 2666

原创 git提交代码提示:warning: unable to access '/Users/xxxx(your username)/.config/git/attributes': Permission

此问题的原因一般是此文件的权限非当前用户,如root所有,可以进入到对应的目录下,ls -l命令查看,我的情况是虽然不影响我操作提交,但是每次都提示,感觉很不爽。解决方法:sudo chown -R username(此处替换你的用户名称) /Users/xxxx(your username)/.config...

2020-02-29 08:12:18 5104

原创 Handler+Looper+MessageQueue+Message(源码解析Handler机制)

1. 在做移动端开发时对handler都不会陌生,之前看过handler发送消息和传递消息的源码,但是时间久了仅有印象,一直想形成书面文字,加深自己的理解,现在可以了。2. 我们在使用handler的时候,一般有如下用法:Handler handler = new Handler(){ @Override public void handleMessage(Me...

2020-02-28 18:07:09 191

原创 git ssh方式 clone下来的代码,还是需要每次输入密码

关于如何创建远程仓库以及将本地仓库和远程仓库关联起来的操作参考【初次提交github代码,加入版本库】,本地怎么生成ssh key以及配置步骤参考【git生成ssh密钥配置】,但是使用了ssh方式关联后,在进程远程操作如git pull、git push时依然需要输入密码,这是因为你在创建ssh key的时候在命令行提示输入密码(Enter passphrase (empty for no pas...

2020-02-28 11:15:14 6740

原创 git生成ssh密钥配置

1. 大家在进行程序开发时需要clone、add、commit、pull、push等操作,尤其是在切换分支和创建分支时git有很多svn无法比拟的优势,git分布式管理的方式也比svn集中式管理有更好的体验,废话少说开始今天的正题,关于如何在github上创建一个仓库并提交代码,见上篇文章【初次提交github代码,加入版本库】,一般将本地和远程仓库关联时有https和ssh两种方式,ssh一般较...

2020-02-28 11:02:41 1607

原创 NanoHttpd android客户端作为服务器使用

如果想把一个apk的能力对外提供,常用的方法是通过进程间通信的方式和第三方apk进行交互,但是针对web应用,这种交互方式就不太合适,但是也不是不可以解决,web应用和本地的native应用进行交互(通过javaScript,可参考android+html5+javascript 混合开发教程),本地的native在和能力提供者进行进程间通信,但是这样就比较麻烦,也不是我们今天想要讲的重点,我们今...

2019-11-12 22:39:14 1091

原创 INSTALL_FAILED_DUPLICATE_PERMISSION错误

在使用adb install -r xx.apk的时候,报错INSTALL_FAILED_DUPLICATE_PERMISSION,原因是因为在Android5.0之后,新增加的permission判断中,声明了两个相同自定义权限的apk如果没有使用相同的签名,则仅可以安装一个应用,可以通过修改自定义签名的方式解决,或者仅仅使用,不要进行声明...

2019-11-12 22:13:14 1075

原创 html 图像文本超链接、定位、电子邮件

超链接语法:<a href=“url” id=“xx” target="_blank">链接文本</a>超链接可以是一个字,一个词,或者一组词,也可以是一幅图像,您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分。href(必须) 需要索引到的超链接的地址target(可以不使用) 是否在当前页面打开(_blank:新起一个窗口打开;_top:在当前窗口打...

2019-11-08 22:58:29 876

原创 html 文本格式化

上篇文章讲述了html的标题、水平线、注释、段落、换行、预格式等,复习的可以看一下上面文章(html简单介绍),此篇文章我们继续了解剩下的常用标签。html 文本格式化文本格式化一般有加粗、斜体、放大、缩小、上标签、下标签、删除字、插入字等加粗:<b>加粗</b>斜体:斜体放大:这个是放大的文本缩小:这个是缩小的文本上标签:这是带有上标的文本下标签:这是带有...

2019-11-08 22:21:19 224

原创 标题、水平线、注释、段落、换行、格式化

示例代码:<!DOCTYPE html><html><head> <meta charset="utf-8"/> <title>这是浏览器中的标题</title></head><body><h1>这是内容中的第一段标题(h1)</h1><font size...

2019-11-06 20:51:41 342

原创 在CSDN中插入html元素标签

比如想添加段落标签和内容:<p>这是一个段落</p>,在csdn中仅仅显示元素内容,需要改为:&lt;p>这是一个段落&lt;/p>即可,就是需要将<替换为&lt;,网上有的说还需要将>改成&gt;但是亲测会有问题,仅仅替换左括号就好,如果转换有问题可以尝试也修改下>。...

2019-11-06 19:34:38 317

原创 html 元素和属性

什么是html 元素html文档是由html元素组成的开始标签元素内容结束标签<h1>这是一个标题</h1><p>这是一个段落</p><a>这是一个链接</a>html 元素以开始标签开始,也叫起始标签html 元素以结束标签结束,也叫闭合标签开始标签和结束标签之间...

2019-11-06 19:22:17 281

原创 怎么写html5文档 第一个html5文档

什么是html文档:HTML 是用来描述网页的一种语言。HTML 指的是超文本标记语言: HyperText Markup LanguageHTML 不是一种编程语言,而是一种标记语言标记语言是一套标记标签 (markup tag)HTML 使用标记标签来描述网页HTML 文档包含了HTML 标签及文本内容HTML文档也叫做 web 页面什么是标签:HTML 标记标签通常被称...

2019-11-06 18:23:12 542

原创 html编辑工具

工欲善其事必先利其器,html的编辑工具有很多,普通的文本编辑工具就行,只需要在保存的时候以.html(或.htm)即可,但是好的编辑工具可以有代码提示、自动补全功能,写起来比较方便流畅,下面列出了几种较为常用的工具。Notepad++:下载地址Sublime Text:下载地址VS Code:下载地址安装步骤和普通的软件一样,不进行说明,下面我们以Sublime Text工具为例进行...

2019-11-06 13:09:16 1014

原创 html初识(一)

本人是从事Android移动端开发,随着混合开发的普及,java+h5的开发已经是一种趋势,java代码实现逻辑,H5主要用于界面的绘制,不仅仅是因为H5的界面绘制相对于Android原生较为简单,同时也是为了快速迭代。Android native应用在出现bug或者UI风格需求变更时,一般需要apk的升级进行迭代,当然也可以将apk的布局风格设置云端可配,但是依然是有一定的限制,不能进行大规模的...

2019-11-05 23:01:44 138

原创 ngrok内网穿透工具的安装部署步骤(内网提供域名供外网访问)

为什么使用Sunny-Ngrok?提供免费内网穿透服务,免费服务器支持绑定自定义域名管理内网服务器,内网web进行演示快速开发微信程序和第三方支付平台调试本地WEB外网访问、本地开发微信、TCP端口转发本站新增FRP服务器,基于 FRP 实现https、udp转发无需任何配置,下载客户端之后直接一条命令让外网访问您的内网不再是距离部署步骤:1. 首先注册一个账号,官网地址:注册...

2019-11-05 22:22:59 317

原创 android+html5+javascript 混合开发教程

新建一个Activity,引入WebView组件和两个测试button,布局如下:<?xml version="1.0" encoding="utf-8"?><WebView android:id="@+id/webView" android:layout_width="wrap_content" android:layout_height="5...

2019-10-30 21:50:15 602

原创 html UncaughtTypeError:Cannotsetproperty'innerHTML'ofnull

UncaughtTypeError:Cannotsetproperty’innerHTML’ofnull<script> document.getElementById("text").innerHTML = "您的浏览器支持js";</script>出现这个错误的原因是因为上面的这段代码是在js代码块中执行的,也就是页面加载的时候就会执行,而此时id为text的...

2019-10-29 11:13:43 392

原创 INSTALL_FAILED_TEST_ONLY原因和解决方法

开发过程中发现自己在Android studio上进行安装是可以的,但是打成debug apk给其他人使用adb install -r xxx.apk时,会报错提示:INSTALL_FAILED_TEST_ONLY,查看原因是因为在Android studio 3.0之后,build budeg apk时会默认在manifest的application里面加入android:testOnly="t...

2019-10-28 14:44:24 13488

原创 mac 获取本机ip地址

1. 启动mac自带的终端:程序坞->终端,输入ifconfig | grep "inet " | grep -v 127.0.0.1inet之后就是本机联入网络后的IP地址,ifconfig是显示网络信息的命令,但是显示的信息太多,所以需要使用grep进行过滤。...

2019-10-28 14:25:25 1376

原创 解决Error:SSL peer shut down incorrectly

一般是由于下载某个包失败导致的,打开项目根目录下的gradle文件夹,wrapper目录,编辑gradle-wrapper.properties文件,修改distributionUrl属性:将红色区域修改为:http://services.gradle.org/distributions/,重新编译即可。...

2019-10-22 09:04:28 846

原创 sublime text 打开txt文档乱码问题

对于windows系统使用系统自带的txt编辑工具,默认打开和保存文件的文件的格式是GBK或者GB2312,而sublime默认仅支持utf-8,所以当从windows系统拷贝文件在mac上浏览有时候会出现乱码的问题,这时候就需要安装插件使submile对这两种编码格式进行支持1. 输入快捷键ctr+shift+p有如下显示:2. 在命令行里面输入 install 下拉框中会有package...

2019-10-21 09:32:02 2263 2

原创 Android 广播、service自定义权限

步骤(我们以广播broadcastReceiver为例)应用A1、新建class,继承BroadcastReceiver,如下:public class TestRece extends BroadcastReceiver { private static final String TAG = "TestRece"; @Override public void on...

2019-10-15 17:28:47 1478

原创 Android 静态注册广播收不到

一、问题现象在进行Android开发的时候,多有种方式和第三方应用进行通信,常见的有aidl、service、receiver、contengprovider等,这不,最近为了省事使用了广播和第三方应用进行通信,但是发现一个问题,对方偶发收不到广播,开始怀疑对方是不是动态注册了广播,和对方的开发确认是静态注册(也就是在manifest文件中注册),这种方式应该不会有什么问题的,经过多次测试发现问...

2019-10-15 16:48:47 1392

原创 Android DeadObjectException 异常 aidl通信

一、异常原因在使用aidl进行进程间通信时,有时候在客户端调用服务端的接口会抛出DeadObjectException异常,原因一般是由于某种原因服务端程序崩溃重启或者服务对象由于内存紧张被回收导致的,最近开发的时候遇到过此问题,解决方案有两种,实测有效。二、解决方案如下两种方案1. 方案一:针对应用开发,可以在服务端进程启动的时候发个消息给客户端,客户端收到消息的时候重新进行绑定操作,目的...

2019-08-06 13:52:42 15083

原创 Android CC 组件化开发

以前开发针对功能较多的应用,一般是通过分包的形式将各个模块进行解耦,然后将将通用的工具或者逻辑进行封装供其他模块使用,但是这样依然很难进行有效的解耦,因为其他包里面的类依然可以通过new的方式进行创建,很难进行把控,尤其针对各个功能模块可能需要单独上线的应用更是无法满足要求,不经意就会出现空指针异常。来到现在的项目组之后接触了一个组件话开发的框架CC,一个可以实现组件动态组册,完成各个组件很好的...

2019-07-15 22:26:37 1580

原创 android studio 从local.properties文件中读取配置数据

在进行开发时总会遇到在调试阶段经常手动修改的配置,这样的需求在properties文件中实现就比较合适,下面以组件化开发时各个模块是否单独编译运行为例。1. 新建properties文件:在项目的根目录右键 -> New -> Resource Bundle -> 起个名字(我的是moudle),创建完成后就可以在项目的根目录下看到有moudle.properties文件生成(...

2019-07-10 09:56:02 2514

原创 Java线程池 ThreadPoolExecutor源码解析

java线程池的使用在很多客户端开发过程中都是必不可少的,主要是为了减少在线程创建和销毁时产生的系统资源消耗,提高客户端的性能.之前对线程池并没有深入的了解,最近在项目中遇到了一个问题,使用threadpoolexecutor.submit(runable)之后,runable的run方法并没有回调,所以去看一遍源码,为了加深巩固自己的理解,整理成博客,另外,我将Android系统的ThreadP...

2019-07-09 20:00:07 223

原创 单例设计模式

常用的单例模式一. 单例模式一般有以下几个特点:1. 构造方法不对外开放,一般是private2. 通过一个静态方法或者枚举返回单例对象3. 确保单例类的对象有且仅有一个,尤其是在多线程的情况4. 确保单例类对象在反序列化的时候不会创建新的实例通过将构造方法私有化,防止外面调用构造方法创建多个实例;同时内部提供一个静态方法,将内部的单例对象对外提供,尤其注意多线程的时候防止创建多个实例...

2019-06-25 22:11:58 134

原创 git push --set-upstream origin master问题解决方法

git push --set-upstream origin master的原因以及解决方法我们在首次创建远程仓库,提交代码的时候一般有如下步骤:1. git init2. git remote add origin https://XX3. git add .4. git remote add origin5. git push但是会报错:fatal: The current b...

2019-06-24 22:34:51 47923 3

原创 mac安装startUML并破解

mac安装startUML并破解下载startuml软件,[地址如下:](链接:https://pan.baidu.com/s/1ZAkWvIXcqP-8cnHn-zzDhA 密码:xri0),或者去官网也可以下载1. 下载之后进行安装,和普通的软件安装相同2. 进入安装目录,默认是/Applications/StarUML.app/Contents/www/license/node$vi...

2019-06-22 22:19:28 3101

空空如也

空空如也

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

TA关注的人

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