
Android
搬仓鼠
每一天的一小步,终将变成人生的一大步!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【懒人必备】一款Android自动设置代理神器
是不是每次设置代理的时候都感觉很头痛,同样的操作有的时候一天甚至要操作上10次,不用的时候还得关闭,不关闭有些软件还使用不了,那么现在就有一款神器,WiFi代理设置是基于Auto.js无障碍开发的安卓端一键自动设置WiFi代理的APP,配合Fiddler、Burp、Charles等抓包工具使用,一键解决您的烦恼设备要求:Android 7.0 +(他的文档虽然是这么要求的,但是我用6.0的手机验证也可以使用)使用方法:这款工具是开源的,可以根据自己需要修改功能源代码地址...原创 2022-02-23 22:33:36 · 14147 阅读 · 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 · 1648 阅读 · 0 评论 -
Kotlin协程实现的任务队列,支持同步和异步
开源一个用Kotlin实现的任务队列开源仓库地址原创 2022-02-20 23:43:54 · 2550 阅读 · 0 评论 -
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 · 4055 阅读 · 0 评论 -
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 · 1892 阅读 · 0 评论 -
Android最简单的日志存储框架
我19年的时候,也写了一版Android日志存储框架,是基于logback写的,在我的项目中也有引用,但是后来发现问题太多,于是决定重新造轮子,自己写一个框架项目地址使用方法第一步,引入依赖库项目根目录build.gradle文件添加 allprojects { repositories { google() jcenter() maven { url 'https://jitpack.原创 2021-02-08 16:42:24 · 610 阅读 · 0 评论 -
仿某App锁屏页Gallery
直接看效果图:项目代码:Github地址原创 2020-04-28 14:43:22 · 251 阅读 · 0 评论 -
mac版Genymotion无法连接adb问题
第一步打开genymotion设置找到adb保证本地的Android sdk设置为genymotion的adb路径第二步因为开始我用的VirtualBox6.X一直不行,后面换成VirtualBox5.X在终端输入adb devices,出现如下截图说明adb连接成功...原创 2020-04-28 11:42:48 · 433 阅读 · 0 评论 -
'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 · 1291 阅读 · 0 评论 -
TextClock 24小时制
最近有一个需求,需要在页面上显示时间,于是才用了TextClock这个控件来进行显示,同时产品还要求需要显示成24小时,经过测试发现 TextClock显示的时间样式会根据系统的时间样式变化,看了源码后发现 如下public boolean is24HourModeEnabled() { if (mShowCurrentUserTime) { return...原创 2020-04-15 13:46:49 · 1094 阅读 · 2 评论 -
Android开发神器
下载地址https://android.myapp.com/myapp/detail.htm?apkName=cn.trinea.android.developertools原创 2020-02-08 23:42:16 · 891 阅读 · 0 评论 -
Android倒计时功实现
好久没有写博客了,趁着年末,总结了下最近一年所遇到的一些技术问题,还有一些自定义控件,比如倒计时功能首先倒计时的实现方式1.Handler2.Timer3.RxJava4.ValueAnimator5.其他这些方式中,我选择了ValueAnimator,主要是它的API比较友好,不需要我们去封装太多东西,具体的使用方式我就不单独写了,下面的代码都有备注项目地址代码实现:pack...原创 2019-12-24 17:02:33 · 716 阅读 · 0 评论 -
aar' is not a valid maven coordinate
@aar’ is not a valid maven coordinate原创 2017-11-21 16:13:42 · 763 阅读 · 0 评论 -
Android组件化开发方案
Android组件化开发方案Demo Github地址Demo基础框架图背景: 为什么要组件化开发?1. 随着功能的增加代码越来越臃肿,到底项目调试越来越困难2. 修改某个模块的代码,导致整个APP都会受到影响3. 代码量大,编译速度也越来越慢问题:进行组件化开发,需要解决哪些问题?1. 每个模块既可以单独运行又可以作为库项目被引入到主模块中2. 模块和模块之间代码和资...原创 2019-07-09 19:31:23 · 678 阅读 · 1 评论 -
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 · 1574 阅读 · 0 评论 -
各个Android模拟器端口号
https://www.cnblogs.com/HakunaMatata-/p/10609307.html转载 2019-07-10 19:01:00 · 719 阅读 · 0 评论 -
仿微信朋友圈图片上传
先贴上地址项目地址介绍仿微信朋友圈的图片上传,图片上传缓存,断网后重新连接网络或者APP重启,自动上传未上传的图片Config的阿里云配置需要自己添加public class Config { public static final String OSS_ENDPOINT = "***********"; public static final String B...原创 2019-08-14 10:56:56 · 1000 阅读 · 0 评论 -
Glide加载Https地址图片
最近在做项目中,发现图片加载不出来了,开始以为是布局出问题了,经过一顿操作后,无果,郁闷,之前都能加载,没办法,只好从URL地址下手了,图片是七牛云地址,从浏览器中打开是正常的,郁闷,我再次检查了一下代码,没有发现异常,正在苦思冥想中,发现图片地址是https,怀疑Glide是不是无法加载https的图片呢,于是我先把地址从json数据中取出来,然后,把地址修改成Http的,运行后,图片加载成功...原创 2019-08-16 14:44:04 · 920 阅读 · 4 评论 -
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 · 1614 阅读 · 0 评论 -
利用Python搭建简易的Http服务器
首先创建一个文件夹mkdir HttpServercd HttpServerpython -m http.server 9999服务器创建成功,把需要的文件放在HttpServer,在浏览器访问 127.0.0.1:9999 就可以看到文件了原创 2017-11-21 14:51:02 · 2560 阅读 · 0 评论 -
Android 日志存储框架
做互联网APP的小伙伴应该都会遇到这样一个问题,线上出现了偶现的Bug难以复现,又由于设备在用户手中,要获取用户的日志相当的困难,要解决这个问题需要考虑下面几个问题1.通过Log类打印的日志,只会打印在控制台上,并不会存储到本地2.如果把日志存储到本地,那么就要考虑日志怎么存储的问题(存储路径,存储名字,存储日志的级别,单个日志文件大小,最多能存储多少个日志文件)3.日志怎么传到开发者手中,...原创 2019-07-03 19:14:02 · 5223 阅读 · 3 评论 -
手动写一个Rxjava和源码理解(二)数据类型的转换 Map操作符
接上一篇手动写一个Rxjava和源码理解(一)事件的发送和订阅第一篇文章分析了数据的发送和订阅,这一篇我们来分析一下RxJava2是怎么实现数据转换的第一步,数据转换接口public interface Function<T,R> { R apply(T r);}第二步,需要实现一个数据转换被观察者public class ObservableMap<T,...原创 2019-07-03 09:42:40 · 201 阅读 · 0 评论 -
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 · 427 阅读 · 0 评论 -
Android 不Root查看App /data/data/目录文件
条件: 首先必须是Android Debug签名的应用才可以adb shellrun-as 应用包名原创 2017-12-01 11:16:24 · 19089 阅读 · 0 评论 -
线程死锁的理解
假设在一个卫生间有两个小房间,每个房间就是一个线程,卫生间理解成线程池房间A代表线程A 房间B代表线程B在房间A上厕所的人有打开房间B的钥匙,但是没有自己房间的钥匙 在房间B上厕所的人有打开房间A的钥匙,但是没有自己房间的钥匙房间A里面的人想出来就必须要等待房间B里面的人出来后,打开房间A 房间B里面的人想出来就必须要等待房间A里面的人出来后,打开房间B但是由于2个人都没有打开自己房间的钥匙,原创 2017-11-15 00:10:53 · 324 阅读 · 0 评论 -
TCP 3次握手的通俗理解
看了很多篇讲TCP握手的文章,不知道是不是我理解的问题,感觉当时明白了,但是后面又忘了,始终不能在脑袋里面形成一个深刻的印象,所以决定自己利用平时生活的例子来加深对TCP握手的记忆,我把它称为外卖原理(嘿嘿,自创)。第一次握手: 外卖小哥打电话告诉顾客订单将会在30分钟送达,问顾客能接收吗?第二次握手: 顾客回复外卖小哥有时间取外卖。第三次握手: 外卖小哥打电话告诉顾客已到达指定地点,请顾客来原创 2017-11-14 21:46:42 · 552 阅读 · 0 评论 -
Android 开发 对话框Dialog dismiss和hide方法的区别
http://ningtukun.blog.163.com/blog/static/186541445201310151539697/dismiss和hide方法都可以隐藏对话框,在需要的时候也可以用show方法调用显示。但是,这两者是有区别的。 dismiss方法会释放对话框所占的资源,而hide方法不会。activity退出前必须调用dismiss方法关闭对话框。 如果对话框上有progre转载 2017-10-10 18:42:44 · 613 阅读 · 0 评论 -
Android 通过URI获取Bitmap
第一种方法:BitmapFactory.decodeStream(context.getContentResolver().openInputStream(bitmapUri));第二种方法:MediaStore.Images.Media.getBitmap(context.getContentResolver(), bitmapUri)原创 2017-10-10 13:14:09 · 3142 阅读 · 1 评论 -
Linux命令-使用echo命令在文件的末尾追加内容
echo命令在今天之前我的理解是输入日志到控制台,但今天因为需要把自己新建的一个文件路径,加入到环境变量中,发现原来echo还可以输入内容到文件中过程是这样的cd ~ //进入home目录mkdir Bin //创建 Bin文件夹echo PATH=$PATH:~/Bin/ >> .bashrc //把~/Bin/加入到当前用户的环境变量中,注意使用 >> ,是2个,不是一个,>是直接覆盖原来原创 2017-09-08 22:25:56 · 8494 阅读 · 1 评论 -
Android代码规范
前言无论你是个人开发还是团队,一个良好的代码规范,能够在项目当中发挥举足轻重的作用;它不仅能使你们的开发更加高效,而且还会减少BUG产生的几率,增强代码可维护性及稳定性。关于规范,我们分两部分来讲,因为Android主要是用Java语言来写的,所以我们区别对待。 JAVA代码规范强制性规范:代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。代码中的命名严...原创 2018-04-19 09:49:42 · 363 阅读 · 0 评论 -
Android获取应用的安装包路径
获取当前应用的安装包路径context.getPackageResourcePath();获取其他应用的安装包路径getPackageManager().getApplicationInfo(packageName, 0).sourceDir;原创 2018-10-09 13:10:08 · 9253 阅读 · 0 评论 -
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 · 733 阅读 · 0 评论 -
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 · 1283 阅读 · 0 评论 -
手动写一个Rxjava和源码理解(一)事件的发送和订阅
背景:很早之前其实就有这个想法,因为觉得RxJava真的很神奇,特别它的链式调用和线程切换,真的是一个很神奇的框架我的Rxjava的简单理解RxJava是一个观察者和被观察者,Observable是观察者,所有的事件创建,逻辑处理,事件发送,其实都是Observable中发送,只是RxJava采取了一个巧妙的方式,Observale只负责接收事件源,事件的发送交给了一个叫 Emitter的类,...原创 2019-06-11 16:11:10 · 255 阅读 · 0 评论 -
Android 快速获取设备分辨率和密度
获取分辨率adb shell wm size获取密度adb shell wm density原创 2019-05-28 15:14:28 · 813 阅读 · 0 评论 -
Android 线程死锁导致的ANR问题分析
最近遇到一个系统引起的ANR问题,遇到的时候特别懵,首先我取出了日志文件,由于网上分析ANR的例子比较少,无法找到参考,所以只能硬上了在/data/anr/目录下的trace文件ANR文件下面是本次分析所用到的trace文件首先需要分析ANR发生在哪个进程通过图可以分析出ANR发生在系统进程,接着往下看我看到这样的情况初步不可以确定可能是线程死锁导致ANR,继续往下面我看到...原创 2019-05-06 16:02:03 · 3926 阅读 · 0 评论 -
Android 解决依赖冲突问题
今天遇到一个Android依赖包冲突问题,以前也原创 2019-05-06 15:22:18 · 2236 阅读 · 0 评论 -
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 · 709 阅读 · 0 评论 -
Android中全局异常捕获以及动态logcat打印。方便上线项目分析
很多时候我们会出现出现了一个问题,但是我们自己并没有日志的情况。这个时候怎么办呢。其实在我们的软件中集成一些日志上报的功能有时候是有需要的。那么问题来了:我们该在自己代码中动态捕获自己应用的日志,以及错误信息呢。其实android 给出了两种:1.运行时异常捕获:这个很容易明白,就是在程序正常运行中,如果程序出现了全局的异常,那么我们就捕获异常,并且把异常信息给收集处理。比如我们可以通过指定的...转载 2018-10-09 13:24:26 · 986 阅读 · 0 评论 -
多屏幕多分辨率的支持和一些概念
快速预览Android 在不同的屏幕大小和密度上执行屏幕的显示会影响用户界面的效果系统处理大多数的自适应屏幕你应该针对屏幕创建资源以更好的控制你的UI Android 是一个系统,运行在这个系统上的很多设备它们的屏幕大小和密度都不一样。但我们需要解决这个问题。本节为详细的为你解释一些基础概念和教你怎么处理关于多屏幕多分辨率的支持。 虽然系统会根据不同的屏幕来执行缩放和调整你的App转载 2015-10-20 17:54:55 · 500 阅读 · 0 评论