自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

卜大爷的博客

不急不躁

  • 博客(272)
  • 资源 (1)
  • 收藏
  • 关注

原创 Android 文件或目录监听使用及底层原理详解(FileObserver)

Android 系统 API 提供了 FileObserver 抽象类( Linux 的 INotify 机制)来监听系统 /sdcard 中的文件或文件夹。它可以实现监视文件(使用 inotify )在文件被设备上的任何进程(包括本文)访问或更改后触发事件。

2023-03-16 19:03:52 1514 1

原创 判断Android 应用是否处于Debug模式的2种方法

判断Android 应用是否处于Debug模式的2种方法

2023-03-15 16:51:20 4094

原创 Mac PHP7.4安装

Mac PHP7.4安装

2022-12-08 13:16:20 6328 1

原创 Android打印当前运行中的所有线程信息

Android打印当前运行中的所有线程信息

2022-10-15 00:11:02 2702 2

原创 flutter 常用操作 json、Map、List相互转换

flutter中json、Map、List相互转换json 转 ListString jsonStr = '[{"name":"budaye", "city":"北京"},{"name":"卜大爷", "city":"北京"}]';List list = json.decode(jsonStr);json 转 Map上例中的 list 中,存储的就是 Map 对象: //接着上例: for(int i=0;i<list.length;i++){ Map map

2022-06-29 17:34:23 1925

原创 《影响力》笔记

《影响力》笔记

2022-06-25 11:59:53 513 1

原创 Mac版AndroidStudio常用快捷键(汇总)

Mac版AndroidStudio常用快捷键(汇总)

2022-06-25 11:55:01 2036

原创 AndroidStudio 调试APP时,部分 Android 机型安装失败问题解决

Android Studio 3.0+ 版本调试应用时,应用安装失败原因分析及解决

2022-06-25 11:49:06 1947

原创 Android应用数据清理命令(adb clear)的使用&执行报错问题解决

Android应用数据清理命令(adb clear)的使用&执行报错问题解决

2022-06-25 11:38:11 4746

原创 Android Transform API 从原理到实战

Transform API从 1.5.0-beta1 开始,Gradle 插件包含一个 Transform API,允许第三方插件在将已编译的类文件转换为 dex 文件之前对其进行操作。(该 API 已存在于 1.4.0-beta2 中,但已在 1.5.0-beta1 中进行了彻底修改)Transform API 的目标是简化注入自定义类的操作而不必处理任务,并为操作内容提供更大的灵活性。内部代码处理(jacoco,progard,multi-dex)已经在 1.5.0-beta1 中转移到了这一新机

2021-03-01 14:40:07 5736 4

原创 Gradle ExtenionContainer 创建和使用扩展参数(extensions)详解

Gradle ExtenionContainer 创建和使用扩展参数(extensions)详解我们在开发 Gradle 插件时,大多数插件都需要从构建脚本中获取一些配置,这样就可以根据项目的不同,对 Gradle 插件传递不同的配置,而不需要修改插件内的代码。我们可以使用 ExtensionContainer 来实现 Gradle 的扩展(参数传递能力)。ExtenionContainer每个 Gradle 的 Project 都维护了一个 ExtenionContainer,我们可以通过 pro

2021-02-25 20:10:28 3080

原创 Gradle 插件上传 Maven 库配置详解

Gradle 插件上传 Maven 库配置详解Gradle 插件上传 Maven 库,有两种方式,本文分别进行介绍。Old Maven PluginGradle 1.0 中提供的原始的,过时的发布机制将工件部署到 Maven 存储库。如果我们的项目仅生成默认的 jar 文件。现在,想将此 jar 文件部署到本地 Maven 存储库,怎么做呢?build.gradle 声明使用 Maven plugin 插件,需要在项目的构建脚本 build.gradle 上添加插件引用声明:apply pl

2021-02-25 20:08:59 5173 1

原创 在Gradle 插件中统计并打印 Task 任务耗时

在Gradle 插件中统计并打印 Task 任务耗时我们在使用 Gradle 构建任务时,有时想统计每个任务的耗时情况,以此发现每个任务的运行时间,以及是否存在可优化空间。使用 Listener 进行监听Gradle 提供了很多构建生命周期钩子函数。1. 我们可以用 TaskExecutionListener 来监听整个构建过程中 task 的执行:public interface TaskExecutionListener { void beforeExecute(Task task

2021-02-25 20:07:59 1824 2

原创 从源码分析 Application、Activity、Service 中 Context 的关系和区别

从源码分析 Application、Activity、Service 中 Context 的关系和区别我们来简单回顾一下 Context 是什么?Context 被翻译成上下文,是应用程序环境的全局信息接口,它是一个抽象类,其实现由 Android 系统提供的 ContextImpl 类。我们通过 Context 可以非常方便的访问应用程序的资源和类,以及可以进行应用程序级的各种操作,比如启动 Activity 和 Service、注册和发送广播、权限操作、主题操作、存储对象操作等等。它简直是一个万能

2021-02-08 15:42:02 22012 4

原创 从 Context 家谱来聊一聊 Context 家族使用的设计模式?

ContextContext 被翻译成上下文,是应用程序环境的全局信息接口,它是一个抽象类,其实现由 Android 系统提供的 ContextImpl 类。我们通过 Context 可以非常方便的访问应用程序的资源和类,以及可以进行应用程序级的各种操作,比如启动 Activity 和 Service、注册和发送广播、权限操作、主题操作、存储对象操作等等。它简直是一个万能类!难怪我们需要经常用到它。Context 家族Context 是一个抽象类,它的具体实现是在子类中进行的,它们共同构成了 Con

2021-02-08 15:39:47 22293

原创 再也不用为分辨适配器模式、装饰模式、代理模式、外观模式犯愁了!

再也不用为分辨适配器模式、装饰模式、代理模式、外观模式犯愁了!我们在分析和使用设计模式的时候,经常会混淆适配器模式、装饰模式、代理模式、外观模式,因为它们实在是太像了。我们应该如何区分呢?别急,只要我们记住它们的主要特征就非常很简单了!代理模式代理者和被代理者都必须实现同一个接口,并且代理者必须持有被代理者的对象。装饰模式原有类不能满足需求时,对原有类进行增强。装饰模式一定是从外部传入,通常是将原始对象作为参数传递给装饰者的构造器。适配器模式通常因为接口不兼容而需要适配器进行适配。外观

2021-02-07 18:02:21 21407

原创 ContentProvider query操作过程源码分析(Android Q)

ContentProvider query调用过程源码分析(Android Q)ContentProvider 是 Android 的四大组件之一,可以很方便的跨进程查询数据,那么 Android 系统是如何实现 ContentProvider 的查询等操作的呢?ContentProvider 的使用示例我们首先来看一个 ContentProvider 调用示例: public void readData(String selection) { Cursor cursor =

2021-02-06 18:09:25 21948

原创 Flutter一步实现Toast 弹窗(fluttertoast 库)

Flutter一步实现Toast 弹窗(fluttertoast 库)在 Flutter 中,想要实现一个 Toast 弹窗效果,最简单、最直接的方法就是使用 fluttertoast 库来实现。官网地址:https://pub.flutter-io.cn/packages/fluttertoast如何使用?导入依赖# add this line to your dependenciesfluttertoast: ^7.1.6在使用的地方,导入类import 'package:f

2021-01-30 16:37:16 26638 2

原创 Flutter 设置主题默认文本样式

Flutter 设置主题默认文本样式如果想在 Flutter 中设置默认的文本样式,怎么做呢?可以设置一个主题,主题中设置我们想要的字体样式即可,示例代码如下:MaterialApp( theme: ThemeData( primaryColor: Colors.white, textTheme: new TextTheme( headline6: TextStyle(fontSize: 12.0, color: Col

2021-01-30 16:29:47 22744

原创 gradle 插件以及执行过程解析

gradle 插件以及执行过程解析在 Android Studio 中,项目都是使用 Gradle 来构建的,那么我们通常使用的 Gradle 插件是如何执行的呢?Gradle 的执行步骤简单说 gradle 是一种构建工具,用来控制代码的编译、构建、打包等过程,有点像 C/C++ 项目中的 Make 工具。gradle 执行一次 build 总共可以分为三个步骤:1. 初始化阶段读取根工程中 setting.gradle 中的 include 信息,确定当前项目中哪几个工程加入构建,创建 pr

2021-01-30 16:22:46 23009

原创 创建自定义 gradle 插件的三种方法

创建自定义 gradle 插件的三种方法要创建 Gradle 插件,我们需要编写一个实现 Plugin 接口的类。将插件应用于项目时,Gradle 将创建插件类的实例,并调用该实例的 Plugin.apply()方法。项目对象作为参数传递,插件可以使用该参数配置项目。开发语言gradle 插件比较主流的开发语言是 groovy,因为 gradle 就是用 groovy 写的。除了 groovy 还可以用来开发 gradle 插件的语言有:javakotlin其它基于 jvm 语言因为

2021-01-30 16:19:32 24268

原创 Android studio 中 gradle 的使用

Android studio 中 gradle 的使用当我们创建一个新的工程,Android studio 会默认为我们创建三个 gradle 文件:两个 build.gradle 文件和一个 settings.gradle 文件。settings.gradle 文件位于项目根目录下,而 build.gradle 分别放在了根目录和 moudle 目录下。下面是gradle文件的构成图: MyApp ├── build.gradle ├── settings.gradle └──

2021-01-30 16:14:26 24643

原创 Gradle 安装和配置教程

Gradle 安装和配置教程本文介绍 Gradle 安装和配置过程。查看 Android Studio 是否存在如果按照了 Android Studio,那么 Gradle 的安装包应该已经下载下来了,我们可以通过以下方式找到。在“应用程序”选择“Android Studio”图标,右键,选择“显示报内容:通常这里会有一个 gradle 文件夹(下图中好像没有,别着急~):示例中并没有这个文件夹,怎么办呢?答案是手动创建一个 gradle 目录,并下载 Gradle 安装包。下载、安装

2021-01-30 16:12:53 24933

原创 Android 最新混淆编译器 R8 优化你的安装包

Android 最新混淆编译器 R8 优化你的安装包为了尽可能减小应用的大小,我们应在发布 build 中启用缩减功能来移除不使用的代码和资源。启用缩减功能后,还会产生另外2项好处:一项是混淆处理功能,该功能会缩短应用的类和成员的名称;另一项是优化功能,该功能会采用更积极的策略来进一步减小应用的大小。Android 中,通过混淆编译器来实现以上能力,在早起 Android Studio 版本中,混淆编译器使用的是 ProGuard 执行编译时代码优化,当我们使用 Android Gradle 插件 3

2021-01-25 16:24:49 26542

原创 Android Lint 原理及使用详解

Android Lint 原理及使用详解Android Lint 是 ADT 16中引入的新工具,用于扫描 Android 项目源中的潜在错误。Lint 是 Android 提供的一个强大的,用于静态扫描应用源码并找出其中的潜在问题的实用工具。lint 工具可以检查你的 Android 项目源文件是否有潜在的错误,以及在正确性、安全性、性能、易用性、无障碍性和国际化方面是否需要优化改进。Lint 既可以用作命令行工具,也可以与 Eclipse 和 IntelliJ 集成在一起。它被设计成独立于 ID

2021-01-25 16:23:07 25837

原创 Android 包大小优化总结

Android 包大小优化总结众所周知,尽量减少 APP 安装包的大小是非常必要的,减少安装包大小,不仅减少了用户下载时的网络流量消耗,而且还减少了用户的下载等待时间。更重要的是安装包大小也会影响下载转化率。同时,APP 在安装运行过程中,越大的安装包,通常应用安装的时间也会更长,之后再运行时也会占用更大的内存空间。通常,直观来看,减少程序安装包的大小有两条路径:减少程序资源的大小。减少程序的代码量。1. 优化代码大小开启代码压缩、混淆和优化来减少和优化代码。作用代码缩减:从应用

2021-01-23 21:49:33 23808

原创 flutter 常用操作 json、Map、List相互转换

flutter中json、Map、List相互转换json 转 ListString jsonStr = '[{"name":"budaye", "city":"北京"},{"name":"卜大爷", "city":"北京"}]';List list = json.decode(jsonStr);json 转 Map上例中的 list 中,存储的就是 Map 对象: //接着上例: for(int i=0;i<list.length;i++){ Map map

2021-01-21 20:16:08 27332

原创 CentOS下mysql 8.0.16 安装完整版教程

CentOS下mysql 8.0.16 安装完整版教程1. 下载安装包由于下载过程较慢,所以先本地下载准备好安装包。MySQL 8.0下载链接(官网地址):https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.22-1.el7.x86_64.rpm-bundle.tar注:CentOS 对应版本为 Red Hat 版本。2. 清理旧版本检测本地是否有已存在 mysql 的包:rpm -qa | grep mysql如果存在 M

2021-01-21 20:14:35 23598

原创 可视化数据库管理工具 MySQL Workbench 的安装配置及使用

可视化数据库管理工具 MySQL Workbench 的安装配置及使用MySQL Workbench 是为数据库管理员、程序开发者和系统规划师提供可视化的Sql开发、数据库建模、以及数据库管理功能的工具。1. 下载官网下载地址:https://dev.mysql.com/downloads/workbench/这里下载的版本是:community,为社区版,非商用,可以免费使用。2. 安装安装过程就不多说了,双击安装,根据提示进行,非常简单。3. 打开安装完成后,双击桌面图标即可打开,界

2021-01-21 20:12:44 24254

原创 Mac MySQL安装及配置过程

Mac MySQL安装及配置过程1. 下载下载地址:https://dev.mysql.com/downloads/mysql/2. 安装双击 .dmg 文件安装,按步骤点击下一步即可,前几个步骤过程省略……。这里注意:选择“Use Legacy Password Encryption”,否则如果使用 Use Strong Password Encryption 非当前连接者&客户端可能无法连接。为 root 用户设置一个密码:安装完成。MySQL 安装位置如下:/usr/

2021-01-21 20:10:38 23636

原创 linux 定时任务实战(定时任务+随机休眠执行)

linux 定时任务实战本文将以实例学习,如何在 linux 中定时执行脚本任务。添加定时任务执行命令:crontab -e进入编辑模式,添加定时任务: //每隔1分钟执行一次*/1 * * * * /root/test_demo.sh//每天10点执行0 10 * * * /root/test_demo.sh查看 crontab 任务执行情况查看已经执行过的任务,看 /var/log/cron 这个文件就可以,可以用 tail -n 20 /var/log/cron

2021-01-20 11:48:07 25151

原创 将本地生成的servlet上传到云服务器部署

将本地生成的servlet上传到云服务器部署将 servlet 项目导出选中项目,右键 -> Export -> WAR file:弹出框:这时,我们的 servlet 项目就导出好了,生成的一个 .war 为后缀的文件。将 .war 文件发送到服务器这里可以通过远程文件上传工具或命令来执行,不做过多讲解。部署将 .war 文件放到 tomcat/webapps 目录下即可。启动 tomcat,在启动 tomcat 服务器时,服务器会自动解压,并解压成一个与 .war 文

2021-01-20 11:37:47 22733

原创 MySQL 数据库及数据表的创建及操作

MySQL 数据库及数据表的创建及操作1. 登录 MySQLcd /usr/local/mysql/binmysql -u root -p这时,弹出输入密码,输入后即可登录。2. 查看当前数据库show databases;3. 创建一个数据库create database budaye_test01 default character set utf8;4. 使用新创建的数据库use budaye_test015. 查询已创建的表show tables;6. 创建

2021-01-20 11:36:08 23589 2

原创 HttpServlet 实现 MySQL 数据库的插入操作

HttpServlet 实现 MySQL 数据库的插入操作MySQL 数据库及表的创建过程,请参考前文《MySQL 数据库及数据表的创建》。本文重点来分步进行 HttpServlet 中,MySQL 数据库的插入操作实现。实现步骤1. 准备数据库的地址、用户名和密码public static final String url = "jdbc:mysql://localhost:3306/budaye_test01";public static final String name = "root

2021-01-20 11:34:13 23641 1

原创 Web 项目中,MySQL 最新驱动下载、及配置

Web 项目中,MySQL 最新驱动下载、及配置我们在进行 Web 服务开发中,要使用到 MySQL 驱动来进行数据库操作。下面来介绍如何来进行驱动下载及配置。驱动包下载在官网进行下载,地址:https://dev.mysql.com/downloads/connector/j/选择的版本如下:配置下载完成后,是一个压缩包。首先进行解压:复制 mysql-connector-java-8.0.23.jar 库。复制到项目目录添加到 lib 目录在 mysql-co

2021-01-20 11:31:07 24488

原创 crontab服务启动 停止 重启(linux 定时任务)

crontab 服务 启动 停止 重启crontab 服务用于执行 linux 定时任务。重启服务命令:service crond restart启动服务命令:service crond start停止服务命令:service crond stopPS:更多更多内容……,请查看 --> 《Server 开发》PS:更多更多内容……,请查看 --> 《Server 开发》PS:更多更多内容……,请查看 --> 《Server 开发》...

2021-01-20 11:29:17 25229

原创 web.xml配置及说明

web.xml配置及说明 <servlet> <servlet-name>NowListServlet</servlet-name> <servlet-class>com.budaye.management.self.servlet.NowListServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>NowList

2021-01-20 11:28:22 22501

原创 Web服务器获取各种路径的方法

Web服务器获取路径的方法 ServletContext context1 = this.getServletContext(); // 获取文件的服务器路径 // web目录下的资源访问 "/"+文件名 String b_path = context1.getRealPath("/b.txt"); out.println(b_path); // WEB-INF下的资源访问 Str

2021-01-20 11:27:33 23858

原创 doPost 乱码问题解决

doPost 乱码问题解决//解决中文乱码response.setContentType("text/html;charset=utf-8");//请求解决乱码request.setCharacterEncoding("utf-8");//响应解决乱码response.setCharacterEncoding("utf-8");PS:更多更多内容……,请查看 --> 《Server 开发》PS:更多更多内容……,请查看 --> 《Server 开发》PS:更多更多内容……

2021-01-20 11:26:49 22734

原创 javax.servlet 不存在的解决办法

javax.servlet 不存在的解决办法在使用 eclipse 使用 HttpServlet 时,提示 javax.servlet 不存在的错误。这时因为项目的依赖库中,缺少 javax.servlet 相关类库。下载 javax.servletServlet 相关类包,包含在 Tomcat 中,我们可以通过下载 Tomcat 来获得。例如,类库位置为:apache-tomcat-7.0.107/lib/servlet-api.jar解决方法1:将类库添加到 jre 扩展目录中拷贝 se

2021-01-20 11:26:00 49761 1

人件(项目管理经典)

项目管理经典之作,从人的角度分析软件开发的管理问题,经典!

2013-08-02

空空如也

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

TA关注的人

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