自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 资源 (6)
  • 问答 (1)
  • 收藏
  • 关注

原创 Android组件化开发方案

Android组件化开发方案Demo Github地址Demo基础框架图背景: 为什么要组件化开发?1. 随着功能的增加代码越来越臃肿,到底项目调试越来越困难2. 修改某个模块的代码,导致整个APP都会受到影响3. 代码量大,编译速度也越来越慢问题:进行组件化开发,需要解决哪些问题?1. 每个模块既可以单独运行又可以作为库项目被引入到主模块中2. 模块和模块之间代码和资...

2019-07-09 19:31:23 573 1

原创 【踩坑】异常捕获的时机不正确,引发的惨痛血案

在做业务的时候犯了一个低级错误,由于异常的捕获方式没对,导致出现了一个线上偶现崩溃来看看问题复现的demo代码/** * 这是一个view的扩展kotlin方法 */private inline fun View.loadIcon() { thread { try {//捕获异常 post {//这个地方实际上发生了线程切换,这里嵌套比较浅,容易发现,但是如果嵌套很深就很难发现了 throw NullPointerE

2022-03-07 22:09:35 145

原创 【懒人必备】一款Android自动设置代理神器

是不是每次设置代理的时候都感觉很头痛,同样的操作有的时候一天甚至要操作上10次,不用的时候还得关闭,不关闭有些软件还使用不了,那么现在就有一款神器,WiFi代理设置是基于Auto.js无障碍开发的安卓端一键自动设置WiFi代理的APP,配合Fiddler、Burp、Charles等抓包工具使用,一键解决您的烦恼设备要求:Android 7.0 +(他的文档虽然是这么要求的,但是我用6.0的手机验证也可以使用)使用方法:这款工具是开源的,可以根据自己需要修改功能源代码地址...

2022-02-23 22:33:36 12763 1

原创 RecyclerView.ItemDecoration几个重要方法的解释

public class RecyclerItemDecoration extends RecyclerView.ItemDecoration {// onDraw:通过该方法,在Canvas上绘制内容,在绘制Item之前调用。(如果没有通过getItemOffsets设置偏移的话,Item的内容会将其覆盖) public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { onDraw

2022-02-23 13:34:03 1574

原创 Kotlin协程实现的任务队列,支持同步和异步

开源一个用Kotlin实现的任务队列开源仓库地址

2022-02-20 23:43:54 2327

原创 FragmentStatePagerAdapter使用不当引起的内存泄漏问题

FragmentStatePagerAdapter使用不当引起的内存泄漏问题首先来看看问题的复现的代码class InnerPagerAdapter( fm: FragmentManager, private val fragments: ArrayList<out Fragment>, private val titles: List<CharSequence>) : FragmentStatePagerAdapter(fm) { overr

2022-02-17 21:55:19 3397

原创 ViewModel 数据保存和恢复原理源码分析过程

ViewModel 数据保存和恢复原理源码分析过程要理解ViewModel恢复和保存原理,首先需要看看ViewModel的使用方式private val vm: TestVM by *viewModels*()@MainThreadpublic inline fun <reified VM : ViewModel> ComponentActivity.viewModels( noinline factoryProducer: (() -> Factory)? = null

2022-02-05 22:21:29 1695

原创 Android最简单的日志存储框架

我19年的时候,也写了一版Android日志存储框架,是基于logback写的,在我的项目中也有引用,但是后来发现问题太多,于是决定重新造轮子,自己写一个框架项目地址使用方法第一步,引入依赖库项目根目录build.gradle文件添加 allprojects { repositories { google() jcenter() maven { url 'https://jitpack.

2021-02-08 16:42:24 517

原创 Android Studio gradle 设置使用系统代理下载依赖库

在gradle.properties 文件下增加下面指令systemProp.http.proxyHost=127.0.0.1systemProp.http.proxyPort=8001systemProp.https.proxyHost=127.0.0.1systemProp.https.proxyPort=8001

2020-04-28 18:33:58 776

原创 仿某App锁屏页Gallery

直接看效果图:项目代码:Github地址

2020-04-28 14:43:22 188

原创 mac版Genymotion无法连接adb问题

第一步打开genymotion设置找到adb保证本地的Android sdk设置为genymotion的adb路径第二步因为开始我用的VirtualBox6.X一直不行,后面换成VirtualBox5.X在终端输入adb devices,出现如下截图说明adb连接成功...

2020-04-28 11:42:48 309

原创 'org.apache.http.message.BasicHeader' does not implement interface 'org.apache.http.NameValuePair'

记录一个崩溃问题崩溃详情如下java.lang.IncompatibleClassChangeError: Class 'org.apache.http.message.BasicHeader' does not implement interface 'org.apache.http.NameValuePair' in call to 'java.lang.String org.apache...

2020-04-27 18:32:08 1161

原创 TextClock 24小时制

最近有一个需求,需要在页面上显示时间,于是才用了TextClock这个控件来进行显示,同时产品还要求需要显示成24小时,经过测试发现 TextClock显示的时间样式会根据系统的时间样式变化,看了源码后发现 如下public boolean is24HourModeEnabled() { if (mShowCurrentUserTime) { return...

2020-04-15 13:46:49 1002 2

原创 Android开发神器

下载地址https://android.myapp.com/myapp/detail.htm?apkName=cn.trinea.android.developertools

2020-02-08 23:42:16 804

原创 Android倒计时功实现

好久没有写博客了,趁着年末,总结了下最近一年所遇到的一些技术问题,还有一些自定义控件,比如倒计时功能首先倒计时的实现方式1.Handler2.Timer3.RxJava4.ValueAnimator5.其他这些方式中,我选择了ValueAnimator,主要是它的API比较友好,不需要我们去封装太多东西,具体的使用方式我就不单独写了,下面的代码都有备注项目地址代码实现:pack...

2019-12-24 17:02:33 652

转载 Genymotion-ARM-Translation.zip各安卓版本合集

安卓版本 代号 Genymotion-ARM-Translation GApps8.0 – 8.1 Oreo奥利奥 ARM_Translation_Oreo.zip 7.0 – 7.1.2 Nougat牛轧糖 6.0 – 6.0.1 Marshmallow棉花糖 ARM_Translation_Marshmallow.zip 5.0 – 5.1.1 Lollipop棒棒糖 ARM_Tra...

2019-09-04 23:09:45 1483

原创 Glide加载Https地址图片

最近在做项目中,发现图片加载不出来了,开始以为是布局出问题了,经过一顿操作后,无果,郁闷,之前都能加载,没办法,只好从URL地址下手了,图片是七牛云地址,从浏览器中打开是正常的,郁闷,我再次检查了一下代码,没有发现异常,正在苦思冥想中,发现图片地址是https,怀疑Glide是不是无法加载https的图片呢,于是我先把地址从json数据中取出来,然后,把地址修改成Http的,运行后,图片加载成功...

2019-08-16 14:44:04 823 4

原创 仿微信朋友圈图片上传

先贴上地址项目地址介绍仿微信朋友圈的图片上传,图片上传缓存,断网后重新连接网络或者APP重启,自动上传未上传的图片Config的阿里云配置需要自己添加public class Config { public static final String OSS_ENDPOINT = "***********"; public static final String B...

2019-08-14 10:56:56 932

转载 各个Android模拟器端口号

https://www.cnblogs.com/HakunaMatata-/p/10609307.html

2019-07-10 19:01:00 619

转载 Android各种模拟器的优缺点

由于是看的别人总结的文章,所以这里做一个记录https://www.cnblogs.com/AsionTang/p/7249522.html?utm_source=itdadao&utm_medium=referral

2019-07-10 14:53:18 2540

原创 Android Kotlin项目集成阿里ARouter

Arouter 是一个用于帮助 Android App 进行组件化改造的框架 —— 支持模块间的路由、通信、解耦,Arouter Github地址,是项目进行组件化开发的神器,今天来讲一下ARouter怎么在Kotlin项目中进行使用第一步,项目需要集成Kotlin插件apply plugin: 'kotlin-android'apply plugin: 'kotlin-android-ex...

2019-07-04 20:50:32 1460

原创 Android 日志存储框架

做互联网APP的小伙伴应该都会遇到这样一个问题,线上出现了偶现的Bug难以复现,又由于设备在用户手中,要获取用户的日志相当的困难,要解决这个问题需要考虑下面几个问题1.通过Log类打印的日志,只会打印在控制台上,并不会存储到本地2.如果把日志存储到本地,那么就要考虑日志怎么存储的问题(存储路径,存储名字,存储日志的级别,单个日志文件大小,最多能存储多少个日志文件)3.日志怎么传到开发者手中,...

2019-07-03 19:14:02 5044 3

原创 手动写一个Rxjava和源码理解(二)数据类型的转换 Map操作符

接上一篇手动写一个Rxjava和源码理解(一)事件的发送和订阅第一篇文章分析了数据的发送和订阅,这一篇我们来分析一下RxJava2是怎么实现数据转换的第一步,数据转换接口public interface Function<T,R> { R apply(T r);}第二步,需要实现一个数据转换被观察者public class ObservableMap<T,...

2019-07-03 09:42:40 142

原创 Android APK 安装(兼容8.0)

由于Android7.0开始,对权限控制加强,APK安装方法也有了一些变化,接下来直接进入到代码讲解kotlin代码 fun installApk(path: String, mContext: Activity) { val apkFile = File(path) if (!apkFile.exists()) { ...

2019-07-02 19:20:08 623

原创 Kotlin 匿名内部类对象引用当前Activity的this用法

Kotlin中匿名内部类,引用Activity的this用法为 this@MainActivity (对应自己的Activity)class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ...

2019-07-02 17:00:19 1169

原创 手动写一个Rxjava和源码理解(一)事件的发送和订阅

背景:很早之前其实就有这个想法,因为觉得RxJava真的很神奇,特别它的链式调用和线程切换,真的是一个很神奇的框架我的Rxjava的简单理解RxJava是一个观察者和被观察者,Observable是观察者,所有的事件创建,逻辑处理,事件发送,其实都是Observable中发送,只是RxJava采取了一个巧妙的方式,Observale只负责接收事件源,事件的发送交给了一个叫 Emitter的类,...

2019-06-11 16:11:10 192

原创 Android 快速获取设备分辨率和密度

获取分辨率adb shell wm size获取密度adb shell wm density

2019-05-28 15:14:28 737

原创 Android 线程死锁导致的ANR问题分析

最近遇到一个系统引起的ANR问题,遇到的时候特别懵,首先我取出了日志文件,由于网上分析ANR的例子比较少,无法找到参考,所以只能硬上了在/data/anr/目录下的trace文件ANR文件下面是本次分析所用到的trace文件首先需要分析ANR发生在哪个进程通过图可以分析出ANR发生在系统进程,接着往下看我看到这样的情况初步不可以确定可能是线程死锁导致ANR,继续往下面我看到...

2019-05-06 16:02:03 3281

原创 Android 解决依赖冲突问题

今天遇到一个Android依赖包冲突问题,以前也

2019-05-06 15:22:18 2106

原创 Android Studio R文件不能引入,但是APK可以打包和运行的解决办法

今天遇到一个奇怪的问题,R文件引入失败,但是APK可以打包和运行查了网上资料以为是 idea.max.intellisense.filesize=2500以为这个值太小了,然后我修改为idea.max.intellisense.filesize=100000但是还是没有解决问题后面想到是不是可能Gradle插件问题,我现在使用的Gradle版本是gradle-4.10.1-a...

2019-04-11 15:23:15 615

转载 Android中全局异常捕获以及动态logcat打印。方便上线项目分析

很多时候我们会出现出现了一个问题,但是我们自己并没有日志的情况。这个时候怎么办呢。其实在我们的软件中集成一些日志上报的功能有时候是有需要的。那么问题来了:我们该在自己代码中动态捕获自己应用的日志,以及错误信息呢。其实android 给出了两种:1.运行时异常捕获:这个很容易明白,就是在程序正常运行中,如果程序出现了全局的异常,那么我们就捕获异常,并且把异常信息给收集处理。比如我们可以通过指定的...

2018-10-09 13:24:26 909

原创 Android获取应用的安装包路径

获取当前应用的安装包路径context.getPackageResourcePath();获取其他应用的安装包路径getPackageManager().getApplicationInfo(packageName, 0).sourceDir;

2018-10-09 13:10:08 9014

原创 Android代码规范

前言无论你是个人开发还是团队,一个良好的代码规范,能够在项目当中发挥举足轻重的作用;它不仅能使你们的开发更加高效,而且还会减少BUG产生的几率,增强代码可维护性及稳定性。关于规范,我们分两部分来讲,因为Android主要是用Java语言来写的,所以我们区别对待。 JAVA代码规范强制性规范:代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。代码中的命名严...

2018-04-19 09:49:42 292

原创 Android5.0之后隐式启动服务的方式

第一种 Intent intent = new Intent(); //serviceName="com.xxx.Test1",serviceName 必须是完整的类名 ComponentName componentName = new ComponentName(pkgName,serviceName); intent.setComponent(componentName); contex

2018-01-12 09:31:06 365

原创 Android 不Root查看App /data/data/目录文件

条件: 首先必须是Android Debug签名的应用才可以adb shellrun-as 应用包名

2017-12-01 11:16:24 18606

原创 Mac搭建FTP服务器

启动sudo -s launchctl load -w /System/Library/LaunchDaemons/ftp.plist 停止sudo -s launchctl unload -w /System/Library/LaunchDaemons/ftp.plist帐号和用户用系统帐号登录 根目录为当前用户目录,试了很多种方法,没有找到修改根目录的方法测试终端输入 ftp localhos

2017-11-29 20:07:43 4629

原创 aar' is not a valid maven coordinate

@aar’ is not a valid maven coordinate

2017-11-21 16:13:42 644

原创 利用Python搭建简易的Http服务器

首先创建一个文件夹mkdir HttpServercd HttpServerpython -m http.server 9999服务器创建成功,把需要的文件放在HttpServer,在浏览器访问 127.0.0.1:9999 就可以看到文件了

2017-11-21 14:51:02 2420

原创 线程死锁的理解

假设在一个卫生间有两个小房间,每个房间就是一个线程,卫生间理解成线程池房间A代表线程A 房间B代表线程B在房间A上厕所的人有打开房间B的钥匙,但是没有自己房间的钥匙 在房间B上厕所的人有打开房间A的钥匙,但是没有自己房间的钥匙房间A里面的人想出来就必须要等待房间B里面的人出来后,打开房间A 房间B里面的人想出来就必须要等待房间A里面的人出来后,打开房间B但是由于2个人都没有打开自己房间的钥匙,

2017-11-15 00:10:53 269

原创 TCP 3次握手的通俗理解

看了很多篇讲TCP握手的文章,不知道是不是我理解的问题,感觉当时明白了,但是后面又忘了,始终不能在脑袋里面形成一个深刻的印象,所以决定自己利用平时生活的例子来加深对TCP握手的记忆,我把它称为外卖原理(嘿嘿,自创)。第一次握手: 外卖小哥打电话告诉顾客订单将会在30分钟送达,问顾客能接收吗?第二次握手: 顾客回复外卖小哥有时间取外卖。第三次握手: 外卖小哥打电话告诉顾客已到达指定地点,请顾客来

2017-11-14 21:46:42 488

Android ANR文件

Android ANR文件,用于对ANR分析的例子文件

2019-05-06

自定义圆角布局

自定义圆角布局

2016-11-02

给图片加上图标标记

给图片加上图标标记,比如酷狗给歌手头像加上标记。

2014-11-22

动态刷新TextView

ScrollView+TextView读取大文件

2013-12-29

Android Service传值

service通过发送数据给BroadcastReciver传值给activity

2013-12-10

ZendStudio破解文件

只能够破解ZendStudio10.0.1,吧jar放到安装文件夹的plus文件夹下,运行软件,如果还是不行,那么打开注册机输入注册码

2013-10-24

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

TA关注的人

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