Android
文章平均质量分 50
MirkoWug
如果生存不是为了撸代码,那还有什么意义
展开
-
Android本地服务器NanoHttpd配置Https双向认证
Android本地服务器Nanohttpd配置HttpsSSL双向认证原创 2023-01-13 17:31:06 · 1915 阅读 · 0 评论 -
鸿蒙系统调用openInputStream(uri)打开Uri文件时卡顿阻塞
鸿蒙系统调用openInputStream(uri)打开Uri文件时卡顿阻塞原创 2022-11-16 14:24:40 · 917 阅读 · 0 评论 -
Mac上配置 Android 环境变量
Android 开发过程中,用到 adb 命令,提示:zsh: command not found: adb,需要在 Mac 上配置 Android 环境变量1、打开 Mac 的 Terminal 终端,输入 cd ~/ 【进入当前用户的home目录】2、输入【如果没有.bash_profile这个文件,则创建一个这个文件】3、输入【打开我们创建的这个文件,此时应该弹出一个文本编辑框,如果是第一次配置环境,那么文本编辑框为空白】原创 2022-09-20 10:44:05 · 3350 阅读 · 0 评论 -
Binder原理
Binder原理原创 2022-07-23 23:45:06 · 163 阅读 · 0 评论 -
BroadcastReciver 和LocalBroadcastManager区别
BroadCastRecevier 和 LocalBroadCastRecevier区别原创 2022-06-23 10:35:02 · 310 阅读 · 0 评论 -
Bitmap加载内存分析
Bitmap加载内存分析一个像素所占的内存,有以下几种像素格式:2.从本地磁盘 、asset、等方式中加载图片当使用第三方库时,则不能用这些公式来计算,因为三方库内部会重新对内存进行优化。eg:fresco:不管图片来源是哪里,即使是 res,图片占用的内存大小仍旧以原图的分辨率计算。Glide:如果有设置图片显示的控件,那么会自动按照控件的大小,降低图片的分辨率加载。图片来源是 res 的分辨率转换规则对它也无效。1、图片分辨率,也就是图片尺寸2.........原创 2022-06-22 18:26:43 · 502 阅读 · 0 评论 -
Activity的onSaveInstanceState回调时机
Activity的onSaveInstanceState回调时机原创 2022-06-21 17:22:48 · 266 阅读 · 0 评论 -
Android组件化依赖库,Base库、网络、UI、相册、拍照、扫码、JsBridgeWebview等库一键引入
Android组件化依赖库,base库一键引入原创 2022-06-21 15:43:39 · 293 阅读 · 0 评论 -
Android任务栈ActivityStack、TaskRecord、ActivityRecord关系
ActivityStack、TaskRecord、ActivityRecord关系原创 2022-06-21 15:10:04 · 1303 阅读 · 1 评论 -
ProgressBar.setIndeterminateDrawable不生效或不显示
ProgressBar.setIndeterminateDrawable不生效或不显示如果要修改IndeterminateDrawable时,发现第一次设置能正常显示,再次设置就会不显示,这时需要和setProgressDrawable方法一起调用ProgressBar.setIndeterminateDrawable()ProgressBar.setProgressDrawable()就会生效了。...原创 2022-02-25 16:48:16 · 1752 阅读 · 1 评论 -
APP反编译工具JADX
JADX的安装clone源码:git clone https://github.com/skylot/jadx.git接着进入JADX目录并运行构建命令:cd jadx./gradlew dist原创 2021-11-05 10:00:39 · 234 阅读 · 0 评论 -
Android NDK放置 .so 文件
简介mips / mips64: 极少用于手机可以忽略x86 / x86_64: x86 架构的手机都会包含由 Intel 提供的称为 Houdini 的指令集动态转码工具,实现 对 arm .so 的兼容,再考虑 x86 1% 以下的市场占有率,x86 相关的两个 .so 也是可以忽略的armeabi: ARM v5 这是相当老旧的一个版本,缺少对浮点数计算的硬件支持,在需要大量计算时有性能瓶颈armeabi-v7a: ARM v7 目前主流版本arm64-v8a: 64位支持类型armea原创 2021-08-19 18:29:40 · 254 阅读 · 0 评论 -
避免从桌面启动程序后,会重新实例化入口类的activity
// 避免从桌面启动程序后,会重新实例化入口类的activity if (!this.isTaskRoot()) { // 当前类不是该Task的根部,那么之前启动 Intent intent = getIntent(); if (intent != null) { String action = intent.getAction(); if (intent.hasCategory原创 2021-08-16 11:00:45 · 219 阅读 · 0 评论 -
Andoriod @NonNull、@NotNull 重复问题
安装配置把 优先级调整到 Android库的注解就好了原创 2021-08-13 17:27:57 · 272 阅读 · 0 评论 -
Android混淆配置(含androidx、kotlin)
一、首先认识几个关键字#libraryjars 声明lib jar文件#dontwarn 不提示警告 dontwarn是一个和keep可以说是形影不离,尤其是处理引入的library时.#引入的library可能存在一些无法找到的引用和其他问题,在build时可能会发出警告,#如果我们不进行处理,通常会导致build中止.#因此为了保证build继续,我们需要使用dontwarn处理这些我们无法解决的library的警告.#dontnote:指定不去输出打印该类产生的错误或遗漏#keep 保原创 2021-06-22 17:20:13 · 6541 阅读 · 2 评论 -
Android Apk瘦身攻略
代码保持良好的编程习惯,不要重复或者不用的代码,可以使用Lint等工具查看。谨慎添加libs,移除使用不到的libs。使用proguard混淆代码,它会对不用的代码做优化,并且混淆后也能够减少安装包的大小。native code的部分,大多数情况下只需要支持armabi与x86的架构即可。如果非必须,可以考虑拿掉x86的部分。资源使用Lint工具查找没有使用到的资源。去除不使用的图片,String,XML等等。assets目录下的资源请确保没有用不上的文件。生成APK的时候,aapt工具本身原创 2021-06-03 19:11:38 · 92 阅读 · 0 评论 -
Dialogfragment嵌套显示闪烁问题
// //dialog中显示dialog 因为dimAmout原因会显示原背景闪一下,这里移除相关flag可以在第二个dialog中设置window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);原创 2021-05-11 14:55:44 · 1421 阅读 · 1 评论 -
Android Studio无法运行Java main方法的解决办法
gradle.xml<?xml version="1.0" encoding="UTF-8"?><project version="4"> <component name="GradleMigrationSettings" migrationVersion="1" /> <component name="GradleSettings"> <option name="linkedExternalProjectsSettings">原创 2021-03-29 18:53:31 · 314 阅读 · 0 评论 -
Handler消息Message屏障消息
Message分为3中:普通消息(同步消息)、屏障消息(同步屏障)和异步消息。我们通常使用的都是普通消息,而屏障消息就是在消息队列中插入一个屏障,在屏障之后的所有普通消息都会被挡着,不能被处理。不过异步消息却例外,屏障不会挡住异步消息,因此可以这样认为:屏障消息就是为了确保异步消息的优先级,设置了屏障后,只能处理其后的异步消息,同步消息会被挡住,除非撤销屏障。同步屏障是通过MessageQueue的postSyncBarrier方法插入到消息队列的。MessageQueue#postSyncBar原创 2021-03-22 18:55:27 · 518 阅读 · 0 评论 -
多个Activity生命周期交叉
多个Activity生命周期说起单个Activitity的生命周期,大家都不陌生,那么多个Activity之间的调用流程你知道吗?demoActivityA、ActivityB。从A 启动跳转到B,再从B结束返回A。流程如下,当B结束时A:onPause ->B:onCreate ->B:onStart ->B:onResume ->A:onStop ->B:onPause -> A:onStart -> A:onResume->B:onStop-&原创 2021-03-01 16:16:24 · 340 阅读 · 1 评论 -
AES加密工具
AES加密工具 之前有些坑在里面,现在整理一下,条例清晰点/** * AES 加密工具 */public class AESUtil { /** * 算法/模式/填充 * 加密模式(Cipher Mode)有CBC、ECB、CTR、OFB、CFB五种。 * 初始向量Iv(Initialization Vector),使用除ECB以外的其他加密模式均需...原创 2019-10-14 09:20:56 · 715 阅读 · 1 评论 -
Android输入框对应的软键盘的几种属性
windowSoftInputMode它总共有9种状态,官方给的9种状态的解释大概如下:【1】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置【2】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示【3】stateHidden:用户选择activity时,软键盘总是被隐藏【4】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的原创 2020-11-27 15:10:37 · 648 阅读 · 0 评论 -
Android自动旋转屏幕仿b站客户端视频
自动旋转屏幕如果不想Activity重建 需要配置 android:configChanges="orientation|keyboardHidden|screenSize"然后还要监听手机的旋转角度,这个一般搭配 看手机是否开启 自动旋转功能。因为一般只有开启了 自动旋转才会用到处理自动旋转屏幕这块的逻辑,而且和锁定屏幕方向的处理情况会不太一样。public class ScreenAutoRotationHelper { private OrientationEventListene原创 2020-11-05 18:14:58 · 360 阅读 · 0 评论 -
Android事件分发和传递
传递流程Activity -> PhoneWindow -> DecorView -> ViewGroup -> View三大事件1.dispatchTouchEvent2.onInterceptTouchEventActivity 和View 都没有此方法,因为Activity 而View是因为没有子View不需要拦截3.onTouchEvent所有人都不处理D/Activity: dispatchTouchEvent 0D/MyViewGroup: dis原创 2020-08-27 16:51:07 · 241 阅读 · 0 评论 -
Android 模块化和组件化等多模块library混淆proguard配置
主模块的配置基本buildTypes { release { minifyEnabled true //是否开启混淆 shrinkResources true //去除无用资源 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' debuggabl原创 2020-08-27 15:00:11 · 1047 阅读 · 0 评论 -
Android APP 卡顿问题分析及解决方案
用户对卡顿的感知, 主要来源于界面的刷新. 而界面的性能主要是依赖于设备的UI渲染性能. 如果我们的UI设计过于复杂, 或是实现不够友好,计算绘制算法不够优化, 设备又不给力, 界面就会像卡住了一样, 给用户卡顿的感觉.如果你的应用界面出现卡顿不流畅的情况,不用怀疑,这很大原因是你没有在16ms完成你的工作。没错,16ms要完成你的工作,再慢点,用户就会感觉到卡顿,也许就会在屏幕对面开始吐槽你的APP,然后狠心把你辛辛苦苦开发出来的APP给卸载掉,打住,跑偏了!1、16ms原则Android 在不同的版本都转载 2020-08-22 18:57:42 · 2738 阅读 · 0 评论 -
JNI静态注册和动态注册区别
废话不多说,直接开始注意:无论是动静态注册还是动态注册,Java端代码都是一样的,所谓的静动态注册是指在C/C++里面的操作,下面会具体讲静态注册java代码:public class JniTest { static { System.loadLibrary("jniTest"); } public static native String stringFromJNI(); public static native String stringFro原创 2020-08-22 18:10:35 · 1131 阅读 · 0 评论 -
HashMap知识点和红黑树知识点
HashMap知识点初始容量 16 装载因子 0.75 默认限制扩容数 64 转换红黑树阈值 8 转换链表阈值 6当链表长度大于8 链表转为红黑树(前提是HashMap容量达到64) 当红黑树中的元素个数小于6 再转回链表(前提是根节点或者子节点为空)。(其实不准确:https://www.jianshu.com/p/edbde2897da22.1 大于8,是先考虑table数组扩容,达到限制扩容64后,才转换2.2 只有在resize()时根据阀值转换;remove()时会先判断原创 2020-08-20 16:58:34 · 266 阅读 · 0 评论 -
Android单例模式剖析
前言对Android开发者来说,相信对并发编程知识的掌握是非常薄弱的,一直是个人进阶的软肋之一。对于并发实践经验缺乏的开发者来说,文绉绉的技术书籍和博客,会比较羞涩难懂。从本文开始,尝试着逐个攻破并发编程的基础知识点。面试10问本文结合个人实际面试经验和最近学习归纳总结而出,欢迎各位大佬点赞支持。通过面试10问,让大家掌握单例模式的双重检查模式和静态内部类单例模式,并了解其中原理。从原理进而引出本文的重点:volatile和synchronized。第1问:平常在Android开发中,有用到哪么设原创 2020-08-05 18:03:56 · 199 阅读 · 0 评论 -
APK反编译之一:Smali语法基础知识
APK、Dalvik字节码和smali文件APK文件 大家都应该知道APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,例如修改后缀后用RAR打开鳄鱼小顽皮APK能看到的是(Google Play下载的完整版版本): Where's My Water.zip\asset\ ..原创 2020-07-17 11:43:12 · 517 阅读 · 0 评论 -
Android 各个版本获取IMEI、MEID
MEID/IMEI1/IMEI2 (可通过在手机拨号键盘中输入 *#06# 即可查询)IMEI:(International Mobile Equipment Identity)国际移动设备身份码的缩写,由15~17(中国基本都15)位数字组成的电子串号与每台手机一一对应,且该码全世界唯一。MEID:(Mobile Equipment Identifier)移动设备识别码,是CDMA手机的身份识别码,也是每台CDMA手机或通讯平板唯一的识别码,由14位数字组成。在中国 移动卡和联通卡使用的是GSM制原创 2020-06-19 17:39:57 · 21272 阅读 · 8 评论 -
Android用MediaCodec硬解码H264流
Android用MediaCodec硬解码H264流import android.graphics.ImageFormat;import android.media.MediaCodec;import android.media.MediaCodecInfo;import android.media.MediaFormat;import android.view.Surface;imp...原创 2020-03-27 17:44:46 · 1715 阅读 · 0 评论 -
MediaCodec硬编码为H264并通过UDP发送
最近研究视频通话,写一下关于摄像头采集视频并使用MediaCodec硬编码为H264的过程,希望对有需要的朋友有所帮助。说实话,刚开始不太熟折腾了挺久的,网上这方面的东西比较少,很多都是代码片段或者就是其他语言写的。这里贴的是本人亲测能用的,希望需要的朋友能少走一些弯路吧。直接来看看代码吧。都有详细的注释的。 package com.kokjuis.travel.activit...转载 2020-03-27 17:26:42 · 1575 阅读 · 0 评论 -
NoScrollViewPager+WebView渲染异常,部分显示白块
场景NoScrollViewPager + Fragment + WebView下面是异常显示(左)和正常显示(右)的WebView 截图 这里有2个因素导致显示异常1.NoScrollViewPager 即自定义的不可滑动的ViewPager,这个不多说,网上很多。 一般我们在复写public void setCurrentItem(int i...原创 2019-12-25 16:33:54 · 665 阅读 · 0 评论 -
获取运动数据权限怎么来的?
获取运动数据权限现象由来总结现象Android 开发过程中 我们可能会申请到各种权限 有些属于高危权限,需要用户同意才能获取,有些则不需要动态申请只要在AndroidManifese.xml中注册就好了。今天我们来讲一下一些’'诡异的权限",为什么说它诡异呢,因为这些权限根本不需要动态申请,只需要在AndroidManifese.xml中注册就好,甚至根本练清单文件里都不需要注册,但是这些权限...原创 2019-12-13 15:44:08 · 3474 阅读 · 0 评论 -
RecyclerView嵌套卡顿的特殊解决方法
这些简单粗暴的方法 是可以帮你解决卡顿问题的a.调用 预加载方法 setInitialPrefetchItemCount(int) 来优化嵌套时预加载性能,例如横向RecycleView上有3.5个item需要显示,可以调用LinearLayoutManager.setInitialPrefetchItemCount(4),默认的数值是2。b.设置recycleview的子项缓存rv.set...原创 2019-11-19 15:44:26 · 2780 阅读 · 0 评论 -
RxJava学习(一)
Observable.create(new Observable.OnSubscribe() { @Override public void call(Subscribersuper String> subscriber) { //这里一定要注意 使用new OnSubscribe()方式要手动调用ononCompleted,onNext subsc原创 2017-01-09 17:08:32 · 248 阅读 · 0 评论 -
BaseToolbar :给你一个通用的Toolbar,一行代码搞定标题栏
相信大家对Toolbar已经很熟悉了,因为页面中基本少不了标题栏。每写一个页面就要设置一堆标题菜单什么的,简直想吐血啊有没有。现在有了一个通用的Toolbar,让你分分钟摆脱烦躁的Toolbar设置,废话不多说,直接传送门 biu:https://github.com/MirkoWu/BaseToolbar懒人福利可直接依赖 implementation ‘com.mirkow...原创 2018-04-01 10:54:43 · 972 阅读 · 0 评论 -
分享一套Android快速开发模板,包含常用主流框架,下载即用。
BaseLibrary本库旨在开发项目时能快速搭建框架,提供较为常用的开发工具。建议下载作为依赖库, 便于修改。部分功能会仅在demo中有体现,请详细看完demo。下面介绍本库的主要内容1. MVP模式(变种)Model :使用 Retrofit + OkHttp + RxJava 框架View :Activity/FragmentPresenter :执行代理 使用方法:1.继承...原创 2019-02-22 10:14:02 · 2140 阅读 · 0 评论 -
android App冷启动秒开,解决黑白屏和延迟卡顿问题(填坑)
冷启动当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用。进程创建后,初始化Application,在创建和初始化它的Launch Activity(onCreate onMesure onLayout,ondraw),最后展示在界面上,在这一过程中就会有耗时,如果耗时较久,给用户的体验就不好黑白屏黑屏或者白屏是有应用的主题Theme来决定的,如果主题继承的是Ba...原创 2019-03-15 14:16:35 · 1716 阅读 · 1 评论