![](https://img-blog.csdnimg.cn/20200512112604490.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android
Android 开发过程中的点滴记录,既是笔记,也为分享。
ThornFUN
在光与影的迷幻中漂流,在雾与潮的漆黑里匍匐。
展开
-
gradle.properties 的常用配置
堆内存大小org.gradle.jvmargs=-Xmx5120m -XX:MaxPermSize=1280m -Dfile.encoding=UTF-8开启守护进程通过开启守护进程,下一次构建的时候,将会连接这个守护进程进行构建,而不是重新 fork 一个 gradle构建进程org.gradle.daemon=true按需加载org.gradle.configureondemand=true并行编译org.gradle.parallel=true开启 g..原创 2021-09-16 18:27:43 · 2858 阅读 · 0 评论 -
弱引用Handler
handler 导致内存泄漏问题很常见,因此需要让它弱引用 context。如下处理一下更好用消息处理回调接口public interface IMessageConsumer { //消费事件 void handleMessage(Message msg);}弱引用包装public class WeakHandler extends Handler { private final WeakReference<IMessageConsumer> co原创 2021-09-13 14:43:29 · 302 阅读 · 0 评论 -
Gradle解决依赖冲突
方法:强制统一版本号在项目级别 build.gradle文件中,强制修改依赖版本号例如:以下代码强制统一几个依赖库的版本 project.configurations.all { exclude group: 'com.google.guava', module: 'listenablefuture' resolutionStrategy.eachDependency { details -> if (details.requeste原创 2021-09-08 16:18:05 · 1106 阅读 · 0 评论 -
Gradle统一版本配置
增加 config.gradleext { //android开发版本配置 androidConfig = [ compileSdkVersion: 30, buildToolsVersion: "30.0.3", applicationId : "com.thorn.gradleconfig", minSdkVersion : 23, targetSdkVe原创 2021-09-08 15:22:19 · 758 阅读 · 0 评论 -
Android架构衍化
六大原则单一职责:类的职责应该单一开闭原则:对扩展开发,对修改关闭里氏替换:若要扩展类功能,应该继承类实现,而不是直接修改原有类依赖倒置:不同模块间通信,应该调用接口,而不是调用对象实体。程序要依赖于抽象接口,不要依赖于具体实现。接口隔离:与多个模块通信,应该接口最小化。客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。迪米特原则:一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解架构衍化发展:单文件 -》 MVC -》 MVP原创 2021-09-03 16:28:06 · 76 阅读 · 0 评论 -
Gradle 下载失败的问题解决
Gradle 下载失败的问题解决错误提示如下:Could not install Gradle distribution from 'https://services.gradle.org/distributions/gradle-XXXX…解决第一步方法一:直接复制链接到浏览器下载 xxx.zip 文件方法二:浏览器打开 https://gradle.org/releases/ 并找到 xxx.zip 文件,下载第二步打开目录C:\Users\Administrator.gra原创 2021-08-02 11:11:13 · 3678 阅读 · 0 评论 -
java 设计模式顺口溜
顺口溜正好 23 个字,对应 23 种 java 设计模式《观迭策》抽工建单原,适桥外装组;代享解模责,备状访命中。原创 2021-01-30 18:57:43 · 441 阅读 · 2 评论 -
如何使用 Windows 电脑向 Android 设备安装 apk 应用
一、工具说明本工具基于 windows 平台,使用 Android adb 命令行工具实现多项功能。其中 adb 文件已隐藏且只读。二、使用前提Android 设备使用 usb 数据线连接 window 系统的电脑三、安装 Android 设备的驱动1. 判断 Windows 是否安装了驱动?答:有两种方法判断,如下:可通过查看设备管理器中是否识别出 Android 端口来判断驱动是否安装也可以通过【Android通用驱动程序 - ADBDriverInstaller.exe】中的状原创 2021-01-14 13:22:14 · 6397 阅读 · 0 评论 -
常用工具类LogUtil
说明打印日志之前,通过 Thread.currentThread().stackTrace 方式获取栈信息,继而获取打印位置及打印行号。利用 studio 打印 (文件名:行号)格式会产生跳转的超链接这个特性,实现点击日志名跳转的功能。效果展示01-08 12:49:45.252 14800-14800/com.demo.logdemoI/MainActivity: (MainActivity.kt:26)【onClickEvent】test源代码LogUtil.ktimport and原创 2021-01-08 13:21:00 · 975 阅读 · 0 评论 -
Android Demo 基础模板
起因作为一个程序员,工作中经常需要写一些 demo 做测试,但是每次都要写布局和点击事件让人觉得厌烦。于是干脆直接写个基础类,想要什么直接动态添加到 View 中来。本来想利用 studio 模板语言 FreeMark 写一个模板的,但是 Android Studio 4.1 版本并不支持导入自定义模板,只能先把源代码放到博客上等用的时候直接复制了。目标动态添加点击按钮,并能够处理其点击事件动态添加输入框,并能够设置输入提示,限制输入长度动态添加结果输出板块,能够动态输出日志思路页面动态添原创 2020-12-24 15:19:07 · 535 阅读 · 0 评论 -
常用软件环境变量的配置
Java的配置:环境变量:Path: C:\jin_program\Java\jdk1.8.0_60\bin; C:\jin_program\Java\jdk1.8.0_60\jre\bin;CLASSPATH: .; C:\jin_program\Java\jdk1.8.0_60\lib\tools.jar; C:\jin_program\Java\jd原创 2017-04-18 09:18:05 · 421 阅读 · 0 评论 -
MVP 用例
MVP 模式的优点模型与视图完全分离,我们可以修改视图而不影响模型可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)MV...原创 2018-07-11 15:44:52 · 765 阅读 · 0 评论 -
FileUtil 项目标准写法
public final class FileUtil { //默认本地上传图片目录 public static final String UPLOAD_PHOTO_DIR = Environment.getExternalStorageDirectory().getPath() + "/a_upload_photos/";...原创 2018-07-19 17:14:50 · 609 阅读 · 0 评论 -
SharedPreference 项目中的标准写法
package com.thorn.milk.storage; import android.content.SharedPreferences; import android.preference.PreferenceManager; import com.alibaba.fastjson.JSON; import com.alibaba.fastjso...原创 2018-07-19 17:12:40 · 155 阅读 · 0 评论 -
搭建项目框架
1. 明确模块分工将项目按职能分工,划分不同的 Module ,比如app 业务模块 annotations 注解模块compiler 编译模块core 核心模块ec 其他模块 注意:这些模块要按照业务需要,依赖不同的库。如果需要使用标准 Java 中的一些类文件,则需要指定为 Java Library ,如果只需要使用 Android 中的类文件,则指定为 An...原创 2018-07-13 16:16:10 · 735 阅读 · 0 评论 -
JS 与 Native APP 互动示例
1. 网页端 JS 调用 Native APP 中的代码2. Native APP 调用 JS 端的代码3. 它们之间的数据传递如何实现4. 代码实现效果如下图:Manifest.xml 中添加权限<uses-permission android:name="android.permission.INTERNET" />MainActivity...原创 2018-07-06 23:31:54 · 1676 阅读 · 0 评论 -
WebView 用例
1. 使用 WebView 加载 HTML 四种方式//方式1:直接加载服务器对应的 URLwebView.loadUrl("http://baidu.com");//方式2:加载开发项目资源文件夹下的 HTML 文件 webView.loadUrl("file:///android_asset/test.html");//方式3:加载手机 sdcard 上的 HTML 文件we...翻译 2018-07-06 15:11:58 · 222 阅读 · 0 评论 -
Android Animation 之补间动画
1. 补间动画(Tween Animation)补间动画可以在一个视图容器内执行一系列简单变换(位置、大小、旋转、透明度)。补间动画只需指定动画开始,以及动画结束”关键帧”, 而动画变化的”中间帧”则由系统计算并补齐。对应关系如下: java类名 描述信息 AlphaAnimation 渐变透明度动画效果 ...转载 2018-07-11 17:35:47 · 209 阅读 · 0 评论 -
iconify 使用方式
1. github 地址https://github.com/JoanZapata/android-iconify2. 建立依赖方式 dependencies { compile 'com.joanzapata.iconify:android-iconify-fontawesome:2.2.2' // (v4.5) compile 'com....原创 2018-07-13 18:08:49 · 4092 阅读 · 0 评论 -
butterknife
butterknife 介绍使用 @BindView 代替 findViewById 的使用使用注解代替数组的逐个声明使用 @OnClick 代替 匿名内部类这样的监听器使用资源注释 代替 资源查找使用举例 class ExampleActivity extends Activity { @BindView(R.id.user) EditText usern...原创 2018-07-16 10:11:11 · 223 阅读 · 0 评论 -
Android 异常捕获存储
Android 异常就 Java 语言来说,所有的异常都继承自 ThrowableThorwalbeErrorException其中,Error 是底层代码产生的,在前端开发时可以不管,但是开发时需要避免引起这类错误,比如图片过大ErrorVirtualMachineException而 Exception 是因为代码不规范导致的异常错误,常见的代表性异常:-...原创 2018-07-30 16:26:06 · 217 阅读 · 0 评论 -
Android 自动化测试工具
Android 自动化测试工具UiAutomator 工具UiAutomator 2.0 优点获取应用 Context ,可以使用 Android 服务和接口基于 Junit4,无须继承于任何父类,方法名不限,支持使用注解 Annotation测试执行可使用 Instrumentation 命令方式及 gradle 方式API 优化,新增 UiObject2、Until、B...原创 2018-07-30 16:27:07 · 1001 阅读 · 0 评论 -
Gradle 配置项目全局共享变量
配置全局共享变量的好处保持项目中所有的 module 引用的版本一致如果有更新或更换开发环境,便于统一更改配置步骤项目根目录下新建 common_config.gradle 文件在文件中写明整个项目所有 module 中需要的变量,比如 minSdkVersion 等等在每个 module 都声明一遍文件的引用,或者,在 project 的 build.gralde 中...原创 2018-08-15 21:00:50 · 2385 阅读 · 0 评论 -
配置项目初始化参数
配置步骤为项目取名,例如 Apple 作为项目的名称设置要初始化的参数的枚举类,方便存取设置类似建造者模式的增删的接口代码实例ConfigType.java 枚举类,枚举所有需要初始化的参数,大概包含三类。public enum ConfigType { /* 1. 原生开发必需的常见参数 * */ CONFIG_READY, ...原创 2018-08-16 15:39:06 · 1360 阅读 · 0 评论 -
常用依赖
//常规api 'com.android.support:support-v4:28.0.0'api 'com.android.support:appcompat-v7:28.0.0'api 'com.android.support:design:28.0.0'api 'com.android.support:recyclerview-v7:28.0.0'api 'com.android...原创 2019-08-21 17:25:03 · 137 阅读 · 0 评论 -
Java 注解
什么是注解?java 提供的一种源程序中元素关联任何信息和任何数据的途径和方法。注解是对方法或者属性指定的标签。根据作用时期可以分为 编译时注解java 中的常见注解jdk自带注解:@Override \ @Deprecated \ @Suppvisewarnings第三方框架注解:@Autowired \ @Service \ @repository注解的分类按照运行机制分:源...原创 2019-09-06 16:04:02 · 117 阅读 · 0 评论 -
北京捷文科技有限公司Android笔试题
1.AIDL的全称是什么?如何工作?能处理哪些类型的数据?AIDL:Android Interface Definition Language,即Android接口定义语言。Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote原创 2017-03-07 09:17:38 · 305 阅读 · 0 评论 -
RecyclerView 用例
1. 使用思路添加 RecyclerView 依赖包在需要使用的 layoutview 中添加 RecyclerView 控件如果子视图复杂,写一个 item 的 layout 视图写一个数据封装实例类 DataBean写一个适合的 Adapter (继承自 RecyclerView.Adapter)实例化 RecyclerView 控件,拿到数据集,设置 LayoutManage...原创 2018-07-10 22:51:09 · 144 阅读 · 0 评论 -
使用gradle定义全局变量
考虑到很多时候调试过程中需要用的打印日志和 Toast 信息都不需要在正式发行版本中出现,常用的做法便是定义全局变量用于区分两种阶段的所需要达到的效果。那么通过在 gradle 中添加全局变量,可以简单方便的定义全局均可使用的变量,怎么做到的呢,来看看伐~找到本次项目中的 App 所依赖的 gradle 文件(build.gradle(Modle:app)),其中的 buildTypes 部分...原创 2018-04-10 00:24:21 · 3636 阅读 · 0 评论 -
功能强大的Log工具
最近从github上面看到一个非常强大的android开发工具,Logger,其 github 地址如下:https://github.com/orhanobut/logger ,下面介绍一下这个工具的用法,以便于自己开发使用的时候取用。第一步,在 app 的 gradle 中建立依赖,gradle 会自动下载编译,其对应的rar包可以在文件夹中找到 implementation '...原创 2018-04-09 23:48:46 · 5364 阅读 · 0 评论 -
ScrollView显示不全的问题
在使用高德地图的 api 做定位获取的时候出现界面显示的问题:我使用 ScrollView 包裹一个 TextView 的方式来布局界面,代码如下: <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/bt_loc原创 2017-04-14 10:12:59 · 6633 阅读 · 1 评论 -
Android Studio 最常用快捷键
格式化代码:ctrl+alt+l复制行:ctrl+d删除行:ctrl+y上下移动行:alt+shift+up/down查找引用:alt+f7注释代码-行注释:ctrl+/注释代码-块注释:ctrl+shift+/重命名:shift+f6提取方法:ctrl+alt+m替换文本:ctrl+r查找类:ctrl+n切换大小写:ctrl+shift+u方法折叠/展开:ctrl+加号/减号(光标在方法体中)逐步原创 2017-04-13 22:47:14 · 262 阅读 · 0 评论 -
App启动白屏问题
绘制整个App窗口需要按顺序执行以下几个步骤: 1. 绘制背景。 2. 绘制View本身的内容。 3. 绘制子View。 4. 绘制修饰内容(例如滚动条)。闪屏原因剖析StartingWindow(Preview Window)我们正常开发中会在Activity的onCreate()方法中调用setContentView(View)设置该Activity的显示布局,那么问题就来了,既转载 2017-04-14 11:50:15 · 335 阅读 · 0 评论 -
Android Studio导入library(第三方库)或者demo的方法
一般情况来说,我们使用studio导入别人的开源库的时候,大部分是会出现错误的,这个错误来源于对gradle的版本依赖。那么就会出现这种情况,我们正使用的gradle版本与我们正要导入的别人的库的版本不统一,这就造成studio自动向网站获取相应版本的gradle,然后问题就来了:这个网站并非国内网站,下载速度超级慢,就算使用翻墙软件也不一定会下载成功,继而你永远打不开别人的库。问题有了,办法在哪里原创 2017-04-13 23:12:49 · 870 阅读 · 0 评论 -
Layer-list介绍与使用
layer-list 其实就是将多个图片或两种效果按照顺序层叠起来用于叠加多个图片实现方式如下: 第一步,在 drawable 文件夹中新建 xml 文件: img_layers.xml 代码如下:<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/ap原创 2017-04-17 22:59:21 · 6548 阅读 · 0 评论 -
程序,进程和线程的详细描述
程序:是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合。为实现预期目的而进行操作的一系列语句和指令。进程:当一个程序进入内存空间开始运行时,即变成一个进程。进程是操作系统进程是操作系统进行资源分配和调度的一个独立单位。线程:是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。线程也被称作轻量级进程。线程在进程中是独立,并发的执行流。原创 2016-10-12 10:30:10 · 404 阅读 · 0 评论 -
EditText使用细节,完美客户体验
1.设置默认输入类型(中英文)有时候为了提高用户体验,在弹出输入法时需要设置默认的输入状态,比如单词应用弹出输入法时,输入法最好是在英文输入状态下。如果是字典应用,弹出输入法时最好是在中文输入状态下,Android并没有提供设置默认的输入状态的接口,但我们可以通过如下方法一样能够达到想要的效果:默认中文:mEditText.setInputType(EditorInfo.TYPE_CLASS_TEX翻译 2016-08-08 21:48:46 · 229 阅读 · 0 评论 -
项目框架文件夹分类
框架分类方法:1.Activity:活动窗口文件2.adapter:适配器3.base:是一些实体类,包括viewbean,databean等等。4.action类:可作为接收显示层的数据,连接显示层和业务逻辑实现层的控制层。5.model类:MVC中model层就是到层。在java中无特殊含义就是模块。6.原创 2016-08-02 22:19:35 · 1154 阅读 · 0 评论 -
Android编程成员变量的命名规范
Google官方介绍:Non-public, non-static field names start with m. Static field namesOther fields start with a lower case letter. Public static final fields (constants) are ALL_CAPS_WIT...原创 2018-04-26 20:11:26 · 1117 阅读 · 0 评论 -
Android Studio常用设置
设置自动导入包文件 settings –&amp;amp;amp;gt; editor –&amp;amp;amp;gt; auto import –&amp;amp;amp;gt; 勾选 optimize imports on the fly、勾选 add unambiguous imports on the fly原创 2018-04-26 20:18:10 · 104 阅读 · 0 评论