Android
文章平均质量分 88
winskyan
这个作者很懒,什么都没留下…
展开
-
app\build\intermediates\external_file_lib_dex_archives\debug\out解决方法
查看AndroidStudio对应的目录,不存在的话手动创建吧,能解决问题的。原创 2022-11-03 14:37:55 · 348 阅读 · 0 评论 -
探索 Android 消息机制
1. Android 消息机制概述Android 消息机制是由 Handler、Looper 和 MessageQueue 三者合作完成的,消息机制可以分为消息机制初始化、消息轮询、消息发送和消息处理 4 个过程来理解,消息机制是基于 Linux 的事件轮询机制 epoll 和用来通知事件的文件描述符 eventfd 来实现的 。消息机制初始化过程是从消息轮询器 Looper 的 prepare() 方法开始的,当线程调用 Looper 的 prepare() 方法时,prepare() 方法会转载 2021-08-10 10:34:11 · 816 阅读 · 0 评论 -
Android 组件通信中有哪些不为人知的细节?
我们知道Android 四大组件:Activity/Service/Broadcast/ContentProvider 能够进行跨进程通信,它们均是借助Binder实现跨进程通信的能力。四者之间又有千丝万缕的联系,本篇将从宏观角度分析四者通信核心以及联系与区别。通过本篇文章,你将了解到:1、四大组件通信基础2、Activity 与AMS 交互3、Service 与AMS 交互4、Broadcast 与AMS 交互5、ContentProvider 与AMS 交互1四大组转载 2021-08-02 11:30:00 · 143 阅读 · 0 评论 -
华为统一扫码服务(Scan Kit)
简介华为统一扫码服务(Scan Kit)提供便捷的条形码和二维码扫描、解析、生成能力,帮助开发者快速构建应用内的扫码功能。得益于华为在计算机视觉领域能力的积累,Scan Kit 可以实现远距离码或小型码的检测和自动放大,同时针对常见复杂扫码场景(如反光、暗光、污损、模糊、柱面)做了针对性识别优化,提升扫码成功率与用户体验。Scan Kit 支持 Android 和 iOS 系统集成。其中,Android 系统集成 Scan Kit 后支持横屏扫码能力。支持的设备平台 设备类型转载 2021-07-28 14:47:46 · 4372 阅读 · 3 评论 -
IDEA那些既好用又好玩的30多款宝贝插件,你知道多少?
安装插件教程在这里直接搜索就行了强烈推荐的插件Presentation Assistant 快捷键展示录屏或者共享的时候,效果极佳Codota— 代码智能提示还可以搜索相关代码的示例Codota还包含一个网站:https://www.codota.com/codeAlibaba Java Code Guidelines— 阿里巴巴 Java 代码规范可以切换中英文有什么不符合阿里巴巴Java开发手册的都会显示出来Translat转载 2021-07-23 13:35:30 · 109 阅读 · 0 评论 -
MotionLayout:布局中的战斗机 Oyeah!
MotionLayout 是 ConstraintLayout 的子类,可以基于动画和手势实现效果炫酷的布局切换。implementation'androidx.constraintlayout:constraintlayout:2.0.0'ConstraintLayout 的 2.0 以上就可以使用 MotionLayout 了,目前最新版是2.1.0-beta02。将布局转换为MotionLayoutMotionLayout 是ConstraintLayout 的子类,用Cons..转载 2021-07-23 09:58:07 · 231 阅读 · 0 评论 -
探索 Android 网络优化方法
目录前言1. 网络优化的三个要点1. 多维网络优化应该是多维的,一般情况下,一谈到网络优化,大部分人首先想到的就是流量消耗,但是实际上流量消耗多少只是网络优化的其中一个维度。只对流量消耗一个维度进行优化是不够的,甚至有的团队即便在流量优化上也没有做好,比如对于网络流量的消耗统计不够全面和精确。2. 精准在做网络流量统计时,我们要做精准度量,如果只是获取了具体消耗了多少的值,对于我们定位和解决问题是没有太大的帮助,因为这个值只能表明用户用了多转载 2021-07-23 09:48:36 · 971 阅读 · 0 评论 -
Android实现一个炫酷的自定义View 时钟
一、背景1.1、控件效果要实现的自定义控件效果大致如下,实现过程中用到了比较多的自定义View的API,觉得比较有代表性,就分享出来也当做学习总结 项目代码已上传github github.com/DaLeiGe/And…1.2、从功能上分析一下这个控件,大致有以下特点随机运动粒子从圆周向圆心运动,并与切线方向有正负30°的角度差,粒子透明度、半径、运动速度随机,运动超过一定距离或者时间消失 背景圆有一个从内到外的渐变色 计时模式下圆环有一个颜色渐变的顺时针rotate动画 整转载 2021-07-23 09:40:23 · 502 阅读 · 0 评论 -
Glide做了哪些优化?
前言Glide可以说是最常用的图片加载框架了,Glide链式调用使用方便,性能上也可以满足大多数场景的使用,Glide源码与原理也是面试中的常客。但是Glide的源码内容比较多,想要学习它的源码往往千头万绪,一时抓不住重点。本文以Glide做了哪些优化为切入点,介绍与学习Glide的源码与原理,如果对您有所帮助,欢迎点赞。Glide做了哪些优化?要想要回答这个问题,我们可以先想一想,如果我们自己要实现一个图片加载框架,我们会思考什么问题?1.图片下载是个耗时过转载 2021-07-21 13:50:38 · 437 阅读 · 1 评论 -
哔哩哔哩在Hilt组件化的使用 | 技术探索
DI(Dependency Injection),即“依赖注入”:组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。最近业务同学需要接入谷歌推的Hilt框架。因为哔哩哔哩的业务上很容易出现业务层面的交叉,而因为项目.转载 2021-07-20 10:35:55 · 513 阅读 · 0 评论 -
卡顿分析过程中的一些疑问 | Systrace 实战
当我们说 流畅度 的时候,我们说的是什么?不同的人对流畅性(卡顿掉帧)有不同的理解,对卡顿阈值也有不同的感知,所以有必要在开始这个系列文章之前,先把涉及到的内容说清楚,防止出现不同的理解,也方便大家带着问题去看这几篇问题,下面是一些基本的说明:1、对手机用户来说,卡顿包含了很多场景,比如在 滑动列表的时候掉帧、应用启动白屏过长、点击电源键亮屏慢、界面操作没有反应然后闪退、点击图标没有响应、窗口动画不连贯、滑动不跟手、重启手机进入桌面卡顿 等场景,这些场景跟我们开发人员所理解的卡顿还有点不一样,开发人转载 2021-07-20 10:31:48 · 691 阅读 · 0 评论 -
IDEA酷 主题
第一款:Xcode-Dark Themehttps://plugins.jetbrains.com/plugin/13106-xcode-dark-theme/versions第二款:Vuesion Themehttps://plugins.jetbrains.com/plugin/13106-xcode-dark-theme/versions第三款:One Dark themehttps://plugins.jetbrains.com/plugin/11938原创 2021-07-12 15:41:08 · 1587 阅读 · 0 评论 -
AAB 什么鬼?竟敢打压鸿蒙?
Google 自8月起要求 Google Play 上架的应用必须采用 AAB 的新格式,对我来说这并非新闻,早在去年12月份官方就提前做了通知:https://android-developers.googleblog.com/2020/11/new-android-app-bundle-and-target-api.html令我惊讶的是,这样一条“旧闻”最近却被炒得沸沸扬扬,原来竟还是因为蹭了鸿蒙的热度:要知道 AAB 的首次亮相是在2018年的 GoogleI/O 上,难道彼时谷歌转载 2021-07-12 15:35:17 · 301 阅读 · 0 评论 -
什么是NIO?NIO的原理是什么机制?
NIO和IO到底有什么区别?有什么关系?首先说一下核心区别: NIO是以块的方式处理数据,但是IO是以最基础的字节流的形式去写入和读出的。所以在效率上的话,肯定是NIO效率比IO效率会高出很多。 NIO不在是和IO一样用OutputStream和InputStream 输入流的形式来进行处理数据的,但是又是基于这种流的形式,而是采用了通道和缓冲区的形式来进行处理数据的。 还有一点就是NIO的通道是可以双向的,但是IO中的流只能是单向的。 还有就是NIO的缓冲区(其实也转载 2021-07-12 15:30:50 · 272 阅读 · 0 评论 -
Systrace实战:彻底搞懂卡顿原理!
当我们说 流畅度 的时候,我们说的是什么?不同的人对流畅性(卡顿掉帧)有不同的理解,对卡顿阈值也有不同的感知,所以有必要在开始这个系列文章之前,先把涉及到的内容说清楚,防止出现不同的理解,也方便大家带着问题去看这几篇问题,下面是一些基本的说明。1、对手机用户来说,卡顿包含了很多场景,比如在 滑动列表的时候掉帧、应用启动白屏过长、点击电源键亮屏慢、界面操作没有反应然后闪退、点击图标没有响应、窗口动画不连贯、滑动不跟手、重启手机进入桌面卡顿 等场景,这些场景跟我们开发人员所理解的卡顿还有点不一样,开发人转载 2021-07-08 10:28:31 · 2455 阅读 · 0 评论 -
Android平台HTTPS抓包解决方案及问题分析
HTTP协议发展至今已经有二十多年的历史,整个发展的趋势主要是两个方向:效率和安全。效率方面,从HTTP1.0的一次请求一个连接,到HTTP1.1的连接复用,到SPDY/HTTP2的多路复用,到QUIC/HTTP3的基于UDP传输,在效率方面越来越高效。安全方面,从HTTP的明文,到HTTP2强制使用TLSv1.2,到QUIC/HTTP3强制使用TLSv1.3,越来越注重数据传输的安全性。总而言之,HTTP协议的发展对用户是友好的,但是对开发者而言却不那么友善。抓包是每个程序员的必修技能之一,尤其是在接转载 2021-07-08 10:26:01 · 762 阅读 · 0 评论 -
抖音 Android 性能优化:新一代全能型性能分析工具 Rhea!
本文选自「抖音 Android 性能优化」系列文章。「抖音 Android 性能优化」系列文章是由抖音 Android 基础技术部门技术专家倾力打造的技术干货内容,和大家分享基础技术团队在打造极致用户体验的抖音的过程中,收获的性能优化方法论、工具和实践,与各位技术同学一起交流成长。用户交互响应的耗时,作为 Android 用户日常感知最深的一项性能指标,在日常开发中有着非常重要的意义。而抖音 Android 基础技术团队为打造极致的交互响应体验,一直在致力于极致性能的探索,其中就包括如何打造极致的耗时.转载 2021-07-07 13:39:19 · 617 阅读 · 0 评论 -
Java序列化和反序列化为什么要实现Serializable接口
目录 序列化和反序列化 什么时候需要用到序列化和反序列化呢? 实现序列化和反序列化为什么要实现 Serializable 接口? 实现 Serializable 接口就算了,为什么还要显示指定 serialVersionUID 的值? Java 序列化的其他特性 static 属性为什么不会被序列化? 最近公司的在做服务化, 需要把所有 model 包里的类都实现 Serializable 接口,同时还要显示指定 serialVersion...转载 2021-07-05 15:07:57 · 89 阅读 · 0 评论 -
从害怕到玩转Android代码混淆
0x0、引言Android代码混淆,老生常谈了,不过大部分Android仔对它的认识可能还处于这样的阶段(比如:写这篇文章前的我):1、日常开发Debug包时不用混淆,正式发布Release包前开启代码混淆; 2、混淆好处① → 类、方法、变量名变成短且无意义的名字,提高反编译后代码的阅读成本; 3、混淆好处② → 删除无用的类、方法与属性,缩减了APK包的大小; 4、混淆好处③ → 对字节码进行优化,移除无用指令,应用运行更快; 5、怎么混淆 → 主项目的 build.gradle 设置转载 2021-07-02 15:32:32 · 575 阅读 · 0 评论 -
Android转场动画的前世今生
前一段时间做图片查看器的升级时,在打开图片查看器的时,找不到好的过渡方式。医生推荐了Android最新的Material Motion动画,虽然最终没有给我们的App安排,但给我学习Material Motion动画提供了一次契机。推荐给大家的学习资料:“官方教程和项目:《material-component-android》Android官方:《使用动画启动 Activity》我的Demo:https://github.com/mCyp/Hoo什么是转场动画?在学习动画的时候,转载 2021-07-02 11:06:11 · 295 阅读 · 0 评论 -
盘一下 Fragment 间的五种通信方式
今年 Google I/O 上介绍了 Jetpack 近期的更新内容,其中包括 Fragment 新增的 Result API 。本文借机盘点一下 Fragment 各种常见的通信方式。Fragment 间的通信可以借助以下几种方式实现:1、EventBus2、Activity(or Parent Fragment)3、ViewModel4、Result API1基于 EventBus 通信EventBus的优缺点都很突出。优点是限制...转载 2021-07-02 10:26:59 · 3780 阅读 · 0 评论 -
Android:关于AAB的知识点整理
2018年,google推出了aab技术。在此之后google发布通知:从 2021 年 8 月起,新应用需要使用 Android App Bundle 才能在 Google Play 中发布。这意味着以GP为主要平台的海外版本,都需要使用aab。那么什么是aab,和apk有什么不同呢?aab官方介绍:https://developer.android.com/guide/app-bundle简单地说aab就是一个带有很多分包数据的压缩包。它将一个apk拆分了多个小包,比如按CPU架构拆分,按语转载 2021-07-02 09:28:09 · 4763 阅读 · 0 评论 -
Android-Gradle详解
Android 构建系统非常灵活,可让你在不修改应用核心源代码文件的情况下执行自定义构建配置。本部分将介绍 Android 构建系统的工作原理,以及它如何帮助你对多个构建配置进行自定义和自动化处理。构建过程涉及许多将你的项目转换为 Android 应用程序包 (APK) 的工具和过程。构建过程非常灵活,因此了解一些幕后发生的事情很有用。下图为Android 应用模块的构建过程。Android 应用模块的构建过程(如上图所示)遵循以下一般步骤:1、编译器将你的源代码转换为 DEX(Dalv转载 2021-07-01 15:42:05 · 593 阅读 · 0 评论 -
Android混淆从入门到精通
简介作为Android开发者,如果你不想开源你的应用,那么在应用发布前,就需要对代码进行混淆处理,从而让我们代码即使被反编译,也难以阅读。混淆概念虽然容易,但很多初学者也只是网上搜一些成型的混淆规则粘贴进自己项目,并没有对混淆有个深入的理解。本篇文章的目的就是让一个初学者在看完后,能在不进行任何帮助的情况下,独立写出适合自己代码的混淆规则。说在前面这里我们直接用Android Studio来说明如何进行混淆,Android Studio自身集成Java语言的ProGuard作为压缩,优化和混淆工转载 2021-07-01 15:26:47 · 288 阅读 · 0 评论 -
Android是如何管理内存的?
前言很高兴遇见你~内存优化一直是 Android 开发中的一个非常重要的话题,他直接影响着我们 app 的性能表现。但这个话题涉及到的内容很广且都偏向底层,让很多开发者望而却步。同时,内存优化更加偏向于“经验知识”,需要在实际项目中去应用来学习。因而本文并不想深入到底层去讲内存优化的原理,而是着眼于宏观,聊聊 android 是如何分配和管理内存、在内存不足的时候系统会如何处理以及会对用户造成什么样的影响。Android 应用基于 JVM 语言进行开发,虽然 google 根据移动设备特点开转载 2021-07-01 14:53:21 · 659 阅读 · 0 评论 -
Android优雅处理重复点击
一般手机上的 Android App,主要的交互方式是点击。用户在点击后,App 可能做出在页面内更新 UI、新开一个页面或者发起网络请求等操作。Android 系统本身没有对重复点击做处理,如果用户在短时间内多次点击,则可能出现新开多个页面或者重复发起网络请求等问题。因此,需要对重复点击有影响的地方,增加处理重复点击的代码。之前的处理方式之前在项目中使用的是 RxJava 的方案,利用第三方库 RxBinding 实现了防止重复点击:fun View.onSingleClick(inte转载 2021-07-01 14:40:36 · 172 阅读 · 0 评论 -
关于LeakCanary2.0你应该知道的知识点
作者:RicardoMJiang链接:https://juejin.cn/post/6968084138125590541前言LeakCanary是一个简单方便的内存泄漏检测框架,相信很多同学都用过,使用起来非常方便,它有以下几个特点1.不需要手动初始化2.可自动检测内存泄漏并通过通知报警3.不能用于线上那我们自然可以提出以下几个问题1.说一下LeakCanary检测内存泄漏的原理与基本流程2.LeakCanary是如何初始化的?3.说一下LeakCanary是如何查找内存泄转载 2021-07-01 09:11:51 · 292 阅读 · 0 评论 -
卡顿、ANR、死锁,线上如何监控?
作者:蓝师傅链接:https://juejin.cn/post/6973564044351373326一、前言最近参加了几轮面试,发现很多5-7年工作经验的候选人在性能优化这一块,基本上只能说出传统的分析方式,例如ANR分析,是通过查看/data/anr/ 下的log,分析主线程堆栈、cpu、锁信息等,然而,这种方法有一定的局限性,并不是每次都奏效,很多时候是没有堆栈信息给你分析的,例如有些高版本设备需要root权限才能访问/data/anr/ 目录,或者是线上用户的反馈,只有一张ANR的截转载 2021-06-23 10:55:47 · 262 阅读 · 0 评论 -
你真的懂 Fragment 吗?—— AndroidX Fragment 核心原理分析
点赞关注,不再迷路,你的支持对我意义重大!???? Hi,我是丑丑。本文 GitHub · Android-NoteBook 已收录,这里有 Android 进阶成长路线笔记 & 博客,欢迎跟着彭丑丑一起成长。(联系方式在 GitHub)前言Fragment 是一个历史悠久的组件,从 API 11 引入至今,已经成为 Android 开发中最常用的组件之一; 在这个专题里,我们将从「使用 & 核心原理 & 面试」三个层面来讨论 Fragment。如果能帮上忙,请务必点转载 2021-06-23 10:23:39 · 2000 阅读 · 1 评论 -
Fragment换装ViewPager2
作者:fundroid链接:https://juejin.cn/post/69482498547242762311开启ViewPager2之旅距离ViewPager2正式版的发布已经一年多了,目前ViewPager早已停止更新,官方鼓励使用ViewPager2替代。ViewPager2底层基于RecyclerView实现,因此可以获得RecyclerView带来的诸多收益: 抛弃传统的PagerAdapter,统一了Adapter的API。 ...转载 2021-04-21 09:16:57 · 513 阅读 · 0 评论 -
Android 读取文件内容工具类
import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.InputStream;import java.io.InputStreamReader;public class FileUtils { //读取文.原创 2020-12-09 17:45:21 · 311 阅读 · 0 评论 -
Android Studio 4.1 代码无错误提示(警告、报红等)
蓝瘦香菇,万万没想到竟然是一个插件引起的,我也是醉了。谁能想到是它导致的呢,是他就是他,千呼万唤使出来。没错就是他 android-butterknife-zelezny 插件导致的。后面升级了的同学要注意了,要么把他卸载了要么别升级了,最后只能等他升级了。作者:星邪Ara链接:https://www.jianshu.com/p/50831d273477来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。...转载 2020-10-21 14:54:55 · 2284 阅读 · 8 评论 -
Win子系统Ubuntu调试Android5.1.1方法
1 Win10子系统Windows10支持Linux子系统了,告别繁琐的双系统、虚拟机安装,原生安装方便快捷。windows subsystem for linux简称WSL。1.1 安装(1)启用开发者模式按下 Windows 键,打开设置设置-->更新和安全-->开发者选项-->开发人员模式(2)开启适用于Linux的Windows子系统按下 Windows 键,输入控制面板 打开控制面板打开 应用或关闭Windows功能 ,勾选 ...原创 2020-10-10 16:23:12 · 178 阅读 · 0 评论 -
Ubuntu18.04 安装 JDK7
直接下载jdk压缩包方式安装1.官网下载JDK 地址:http://www.oracle.com/technetwork/articles/javase/index-jsp-138363.html 选择相应的 .gz包下载链接:https://pan.baidu.com/s/1HQtnfEDlHI7JxOuvPMJTLw提取码:u6442. 解压缩,放到指定目录(以jdk-7u60-linux-x64.gz为例) 创建目录:sudo mkdir...转载 2020-09-30 11:31:16 · 1506 阅读 · 0 评论 -
Android 自定义IP输入框
package com.my.androidtext.view;import android.content.Context;import android.text.Editable;import android.text.TextUtils;import android.text.TextWatcher;import android.util.AttributeSet;import android.util.Log;import android.view.LayoutInflater;.原创 2020-09-22 17:22:28 · 415 阅读 · 0 评论 -
Android 自定义TextView,水平滚动
package com.my.androidtext.view;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;import android.os.Parcel;import android.os.Parcelable;import android.text.TextPaint;import .原创 2020-09-22 17:17:50 · 247 阅读 · 0 评论 -
Android XML JSON互转
xml JSON互转//xml转jsonpublic void parse() { GLog.e("parse xml start"); XmlToJson.Builder builder = new XmlToJson .Builder(readConfigXmlToStr()); //ConfigXmlJsonConstants.FORCE_LIST 为数组的标签,例如option标签 for (S...原创 2020-09-22 17:13:21 · 572 阅读 · 0 评论 -
Android DOM修改xml值并保存
//创建DocumentBuilderFactory对象 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); try { //创建DocumentBuilder对象 DocumentBuilder documentBuilder = documentBui...原创 2020-09-22 16:50:00 · 345 阅读 · 0 评论 -
XmlPullParser解析方式
File file = new File(XmlConstants.CONFIG_XML_PATH); InputStream is = null; try { if (!file.exists()) { is = context.getResources().openRawResource(R.raw.local_config_info); } else { ...原创 2020-09-22 16:45:04 · 282 阅读 · 0 评论