
Android
文章平均质量分 80
Tech Ranger
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Flutter】时间轴高度自适应最佳实践
1 使用部件画圆圈:使用 canvas.drawCircle 和属性为_paint.style = PaintingStyle.fill;画笔画两个实心圆;画竖线:使用 canvas.drawLine 和属性为_paint.style = PaintingStyle.stroke;的画笔画直线,通过 p1 和 p2 两个端点使直线为竖线在 Container 中调用 decoration 组件使用 BorderTimeLine 类。decoration: BoxDecoration(border:原创 2021-10-20 01:09:14 · 1517 阅读 · 0 评论 -
【Android】Gradle入门
是什么?在语法上是基于Groovy语言的(Groovy 是一种基于JVM的敏捷开发语言,可以简单的理解为强类型语言java的弱类型版本),在项目管理上是基于Ant和Maven概念的项目自动化建构工具。基础知识准备Java基础,命令行使用基础官方文档:https://docs.gradle.org/current/dsl/Gradle使用指南: https://gradle.org/docs/current/userguide/userguideAndroid插件文档:https://github原创 2021-10-16 01:16:47 · 188 阅读 · 0 评论 -
【Flutter】应用开发笔记
1 获取Flutter SDK1.下载安装包2.将压缩包解压,然后把其中的 flutter 目录整个放在你想放置 Flutter SDK 的路径中勿将 Flutter 安装在需要高权限的文件夹内,例如 C:\Program Files\。2 配置环境变量2.1 更新path环境变量Environment Variables->User Variables->PATH->New加入 flutter\bin 目录的完整路径配置国内镜像,新增加环境变量2.2 配置Andro原创 2021-09-03 22:43:24 · 1291 阅读 · 3 评论 -
【Android】字节码插桩(一)
1 摘要字节码插桩技术可以帮我们实现业务层模块和功能模块的关联,并在项目结构避免其耦合,比如ARouter实现各模块路由表的注册;2 背景一般我们使用Transform会有下面两种场景我们需要对编译class文件做自定义的处理。 我们需要读取编译产生的class文件,做一些其他事情,但是不需要修改它。本篇主要介绍完成字节码插桩的第一步,通过Transform将编译后的class文件和jar包找到并输出;3 正文Transform的基本API参考:Transform的抽象方法:publi原创 2021-07-14 18:02:20 · 1003 阅读 · 0 评论 -
【Android】MediaStore三种刷新方式简介
1、Media是MediaStore的内部类(MediaStore.Image.Media),它提供了几个insertImage方法,以方便我们想MediaStore插入图片数据,该操作会生成一张缩略图。插入有两个重载方法,一个是传入图片路径,一个是传入Bitmap;区别:传入图片路径的方法,会将制定的图片拷贝一份到Picture目录下,也就是SDCARD中共有两种相同的图片。传入Bitmap的方法,会将图片直接保存到Picture目录下。/**Insert an image and creat原创 2021-01-06 18:00:34 · 2221 阅读 · 0 评论 -
【Android】Android Studio Database Inspector 使用
今天在逛技术网站的时候,看到了一个好东西,Database Inspector 第一眼看上去感觉没有用过,老样子赶紧百度一下,发现基本没有这方面的文章,看来这个应该是在内测还未推出的工具,首先说一下 Database Inspector 是干什么的?其实要解决的问题就是我们在调试数据库的时候,使它可以想编辑 Excel 一样的简单,直接修改直接生效,这有什么好处呢?不用我们在一点一点的去 Debug 数据了,这个看来还是非常有用的。本来想找一些资料来整理一下,但无意间看到一个 Google 的大佬工程师已转载 2021-01-01 18:00:27 · 1547 阅读 · 0 评论 -
《第一行代码》调用相机部分适配Android10/11
摘要《第一行代码》中的调用相机程序在新版本的Android10/11中已经不完全适用,会出现闪退等问题,此文针对需要修改的内容作出特别说明正文1.必须在AndroidManifest中添加CAMERA权限否则会导致闪退 <uses-permission android:name="android.permission.CAMERA"/>2.添加provider用于文件的存储和读取android:authorities的参数必须与FileProvider.getUriForFile中原创 2020-12-30 18:00:37 · 610 阅读 · 1 评论 -
【Android】ScrollView子节点配置android:height=“match_parent“失效问题
本文研究了ScrollView的measure过程,重点讨论ScrollView的子View配置了android:height=“match_parent”,却没有到达预想值(预想应该跟父容器一样高度),针对该问题进行探讨。1 xml配置<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layo原创 2020-12-09 18:00:14 · 674 阅读 · 0 评论 -
【Android】Android屏幕常亮方法
项目中,可能会有保持屏幕常亮的需求,下面我们说下保持屏幕常亮的两种方式。方式一// 就一行代码getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);解释: 给Window设置一个标记 - 保持屏幕常亮方式二// 声明PowerManager.WakeLockprivate PowerManager.WakeLock mWakeLock;@Overrideprotected void onCreate(B转载 2020-11-14 18:11:46 · 637 阅读 · 0 评论 -
【Android】CAS(Compare and Swap)操作及其ABA问题
独占锁:是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。乐观锁:每次不加锁,假设没有冲突去完成某项操作,如果因为冲突失败就重试,直到成功为止。一、CAS 操作乐观锁用到的机制就是CAS,Compare and Swap。CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。1、非阻塞算法 (nonblocking algorithms)一个线程的失败或者挂起原创 2020-11-10 18:00:14 · 402 阅读 · 1 评论 -
【Android】EventBus机制简介
一、EventBus机制简介EventBus支持单例模式,也支持建造者模式用于定制处理。,可以定制处理线程池,异常抛出开关,log记录开关等。主要是为了解决不同线程处理之后得到的数据的在其他线程(一般是主线程)的处理问题。使用方式注册EventBus.getDefault().register(Object );反注册:EventBus.getDefault.unregister(Object );抛出数据:EventBus.getDefault.post(Object);在注册的对象对应的类原创 2020-11-06 18:01:17 · 360 阅读 · 0 评论 -
【Android】AsyncTask源码简介
多线程的应用在Android开发中是非常常见的,常用方法主要有:1.继承Thread类2.实现Runnable接口3.Handler4.AsyncTask5.HandlerThread常用的异步框架:1.RxJava/RxAndroid2.EventBusGoogle提官方提供的类-AsyncTask, 如何使用这个类,内部原理是如何实现的?下面就来拆解看看AsyncTask的源码。AsyncTask是一个抽象类,核心方法如下:方法的执行顺序:AsyncTask的实现有三原创 2020-11-03 18:00:35 · 242 阅读 · 0 评论 -
【Android】屏幕适配总结终极方案
屏幕适配的概念碎片化既是 Android 的优势和弱点,也是开发者们头疼的问题,同时也为 Android 的全球影响力提供了基础。Android设备的外形和尺寸各不相同,性能水平和屏幕尺寸也都大不相同。此外,有许多不同版本的 Android在任何时候都同时处于活动状态,增加了另一层的碎片化。这意味着,开发各种Android设备的应用程序将是极具挑战性和耗时的。今年,我们看到了之前报告中出现的趋势的延续;更多的设备和更多的设备之间的区别。今年我们注意到的一件大事是品牌的碎片化,今年有超过1000个品转载 2020-10-31 18:00:52 · 1069 阅读 · 0 评论 -
【Android】ANR定位分析
1、anr产生的原因只有当应用程序的UI线程响应超时才会引起ANR,超时产生原因一般有两种。当前的事件没有机会得到处理,例如UI线程正在响应另一个事件,当前事件由于某种原因被阻塞了。当前的事件正在处理,但是由于耗时太长没能及时完成。根据ANR产生的原因不同,超时事件也不尽相同,从本质上将,产生ANR的原因有三种,大致可以对应到android中四大组件中的三个(Activity/View,BroadcastReceiver和Service)。KeyDispatchTimeout最常见的一种类原创 2020-10-30 18:00:34 · 4526 阅读 · 0 评论 -
【Android】绘图之Shader
Shader是绘图过程中的着色器,它有五个子类:BitmapShaderComposeShaderLinearGradientRadialGradientSweepGradient它一般用在paint.setShader(shader)中,paint是一个Paint对象,shader是一个Shader对象。一、BitmapShaderBitmapShader是用来做位图绘制时纹理的着色器,位图可以通过指定的平铺模式进行重复或者镜像。BitmapShader的构造方法:BitmapSha转载 2020-10-24 18:01:06 · 1116 阅读 · 0 评论 -
【Android】贝塞尔曲线原理简介
一、贝塞尔曲线的数学理论贝赛尔曲线的本质是通过数学计算公式去绘制平滑的曲线。下面以二阶贝塞尔曲线说明:步骤一:在平面内选3个不同线的点并且依次用线段连接。步骤二:在AB和BC线段上找出点D和点E,使得 AD/AB = BE/BC步骤三:连接DE,在DE上寻找点F,F点需要满足:DF/DE = AD/AB = BE/BC步骤四:根据DE线段和计算公式找出所有的F点,然后将其这些点连接起来。对应的公式为:B(t)=(1-t)2P0+2t(1-t)P1+t2P2,t属于[0,1]以此类推:三阶贝原创 2020-10-22 18:00:27 · 579 阅读 · 0 评论 -
【Android】应用拍摄视频功能
一、 Android中开发相机应用的两种方式Android系统提供2种使用手机相机资源实现拍摄视频功能的方法,一种是直接通过Intent调用系统相机组件,代码如下所示:Intent intent = new Intent(); intent.setAction("android.media.action.VIDEO_CAPTURE");intent.addCategory("android.intent.category.DEFAULT");intent.putExtra(MediaStore原创 2020-10-21 18:00:28 · 945 阅读 · 0 评论 -
【Android】Android蓝牙应用简介
首先,要了解蓝牙先要从蓝牙的整个体系进行了解。蓝牙工作在2402和2480 MHz之间,或2400和2483.5MHz之间,采用的是2.4G和2.485G 内使用的短泼的UHF无线电泼在短距离内在固定和移动设备之间交换数据。蓝牙的每个channel占1MH在,共79个Channel。且它的工作是以每秒1600次的速率进行跳频,它传输的数据包长度也都不长。在经典蓝牙2.0 传输上,将数据分成数据包,并在79个指定的蓝牙信道之一上传输每个数据包。而在低功耗蓝牙上则使用2MHz,可容纳40个通道。蓝牙协议原创 2020-10-20 18:00:27 · 358 阅读 · 1 评论 -
【Android】网页广告植入规避方案
一、问题网页经过dns,运营商或者被截取的时候,就可能被非法注入广告,甚至是诈骗链接。在移动端尤其严重,特别是webView。二、实现方案问题现象小米商城被植入广告图问题分析1、dns植入,经过dns时,有可能被注入2、移动运营商植入,使用数据网络的时候有可能被注入3、被重定向,嵌套iframe,著名的百度推广4、其他被截取和植入的情况Android网页容易出现广告植入的现象,给用户造成不好的体验,可能盗窃用户的信息,造成用户流失。解决方案:1、 将所有的网络请求和请求地址修改原创 2020-10-19 18:02:54 · 568 阅读 · 0 评论 -
【Android】组合动画升级
Android的动画组合的实现方式也分视图动画集和属性动画集,视图动画集的实现同样基于XML和代码动态调用的方式,废话不罗嗦能用示例代码看懂的直接上代码:示例-XML调用方式 定义一个动画集xml文件,test_animator_set.xml<?xml version="1.0" encoding="utf-8"?><set android:fillAfter="true" android:duration="3000" android:shareInter原创 2020-10-16 18:00:24 · 246 阅读 · 0 评论 -
【Android】特效动画基础
**一、动画掌握进阶路线**首先是动画基础的掌握,不同的技术对动画的支持都有各自的接口和框架,Android的动画基本使用不复杂,复杂动画可能得多动画组合以及自定义插值器等来达到动画效果。主要分类如下:View动画(补间动画)帧动画属性动画二、简介View动画:对view的一些渐变动画,但不会对view自身的属性值改变。动画执行结束后view会恢复为原来状态(如果想停留在动画结束后的状态需要在动画结束后回调事件里修改view的属性)。主要对view的位置、大小、旋转、透明度执行一系列的原创 2020-10-15 18:00:28 · 186 阅读 · 0 评论 -
【Android】事件分发机制
1.我们来简单描述一次点击事件,不涉及方法调用1)用户接触屏幕产生MotionEvent(点击事件)2)MotionEvent(点击事件)总是由Activity先接收3)Activity接收后将MotionEvent(点击事件)进行传递:Activity->Window→DecorView(DecorView是当前界面的底层容器,就是setContentView所设置View的父容器)4)DecorView是一个ViewGroup,将MotionEvent(点击事件)分发向各个子View2原创 2020-10-14 18:00:22 · 84 阅读 · 0 评论 -
【Android】组合动画简介
Android系统提供的动画组件除了最基本的帧动画、View动画和属性动画外,android还封装了一些动画方便开发者使用,当然这些动画自己也可以自定义实现的。(Android会在各个版本中提供一些新功能,去除过时的功能,所以动画知识也需要关注版本的改动)下面就来介绍一下5.0中引入的默认动画组件:Touch feedback 触摸反馈Circular Reveal 圆形展示Curved motion 曲线运动View state changes 视图状态变化Vector Drawables原创 2020-10-13 18:00:27 · 518 阅读 · 0 评论 -
【Android】Handler造成内存泄露分析
Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收。也就是说,一个对象不被任何引用所指向,则该对象会在被GC发现的时候被回收;另外,如果一组对象中只包含互相的引用,而没有来自它们外部的引用(例如有两个对象A和B互相持有引用,但没有任何外部对象持有指向A或B的引用),这仍然属于不可到达,同样会被GC回收。Android中使用Handler造成内存泄露的原因Handler mHandler = new Handl原创 2020-10-12 18:00:28 · 138 阅读 · 0 评论 -
【Android】动画原理简介
动画框架原理现有的 Android 动画框架是建立在 View 的级别上的,在 View 类中有一个接口 startAnimation 来使动画开始,startAnimation 函数会将一个 Animation 类别的参数传给 View,这个 Animation 是用来指定我们使用的是哪种动画,现有的动画有平移,缩放,旋转以及 alpha 变换等。如果需要更复杂的效果,我们还可以将这些动画组合起来,这些在下面会讨论到。要了解 Android 动画是如何画出来的,我们首先要了解 Android 的 Vi原创 2020-09-28 18:02:05 · 2645 阅读 · 0 评论 -
【Android】动态加载SD卡的jar文件并更新工程中jar文件的方法
Android在API中给出可动态加载的有:DexClassLoader 和 PathClassLoaderDexClassLoader:可从SD卡中加载jar、apk和dex.PathClassLoader:只能加载已经安装搭配Android系统中的apk文件。这两个都是集成dalvik.system.BaseDexClassClassLoader,当类加载请求,首先委派给父类去完成加载,父类加载不了,则自己再去完成加载,我们可以利用这个机制反过来,自定义TestClassLoader去加载本地J原创 2020-09-27 18:00:52 · 373 阅读 · 0 评论 -
【Android】ValueAnimator类解析
一、ValueAnimator的作用处理属性动画的类,作用于控件的属性,只针对控件的某一个属性来做动画,通过改变控件内部的属性值来达到动画效果的,例如改变控件的颜色值等等,二、ValueAnimator的使用(例如:两秒内TextView均速向右移动400,然后向左移动200)ValueAnimator animator = ValueAnimator. ofInt(0,400,200);animator.setDuration(2000);animator.setInterpolator(new原创 2020-09-23 18:00:50 · 977 阅读 · 0 评论 -
【Android】Android设备唯一标识简介
一、概念IMEIIMEI(International Mobile Equipment Identity) 是国际移动设备身份码的缩写,国际移动装备辨识码,是由 15 位数字组成的 “电子串号”,它与每台手机一一对应,而且该码是全世界唯一的。每一部手机在组装完成后都将被赋予一个全球唯一的一组号码,这个号码从生产到交付使用都将被制造生产的厂商所记录。IMEI 码由 GSM(全球移动通信协会)统一分配,授权 BABT(英国通信认证管理委员会)审受。IMEI 组成为:1、前 6 位数(TAC,Type原创 2020-09-22 18:00:26 · 2046 阅读 · 0 评论 -
【Android】简易自定义控件流程
android自定义组件一般有三种实现方式:一、组合控件:组合控件,顾名思义就是将一些小的控件组合起来形成一个新的控件,这些小的控件多是系统自带的控件。二、自绘控件: 何为自绘控件,就是完全用Paint和canvas画出来的,就是在onDraw()方法里面绘画,在onMeasure()方法里面进行测量,如果是容器在onLayout()方法中定位每个子组件。三、继承控件: 就是继承已有的控件,创建新控件,保留继承的父控件的特性,并且还可以引入新特性。自绘控件也分两种,自定义组件和自定义容器,自定义组件原创 2020-09-18 18:00:24 · 279 阅读 · 0 评论 -
【Android】APP中沉浸式状态栏的设计和实现
一、沉浸式状态栏简介在android4.4之后,api提供了透明状态栏的实现,以及沉浸式模式的实现。根据android开发官网来说,其实并没有沉浸式状态栏一说,只有Tranlucent Bar(透明状态栏) 和Immersive Mode(沉浸模式),下面是摘自官网的内容https://developer.android.com/training/system-ui/immersive解释:1.沉浸式全屏模式隐藏status bar,使屏幕全屏,让Activity接收所有的(整个屏幕的)触摸事件原创 2020-09-17 18:00:22 · 980 阅读 · 0 评论 -
【Android】Android View的绘制流程
Android 中 Activity 是作为应用程序的载体存在,代表着一个完整的用户界面,提供了一个窗口来绘制各种视图,当 Activity 启动时,我们会通过 setContentView 方法来设置一个内容视图,这个内容视图就是用户看到的界面。UI 管理系统的层级PhoneWindow 是 Android 系统中最基本的窗口系统,每个 Activity 会创建一个。PhoneWindow 是 Activity 和 View 系统交互的接口。DecorView 本质上是一个 FrameLayout,是原创 2020-09-16 18:00:27 · 117 阅读 · 0 评论 -
【Android】Webview与JavaScript交互介绍
交互方式总结Android 与 JS 通过 WebView 互相调用方法实现,实际上是:Android 去调用 JS 的代码JS 去调用 Android 的代码二者沟通的桥梁是 WebView对于 Android 调用 JS 代码的方法有 2 种: 1. 通过WebView的loadUrl() 2. 通过WebView的evaluateJavascript()对于 JS 调用 Android 代码的方法有 3 种: 1. 通过WebView的addJavascriptInterface()进.原创 2020-09-15 18:00:42 · 639 阅读 · 0 评论 -
【Android】Android UI显示原理
一、window相关Window可以说是Android Framework层提供的一个最基础的UI组件管理类,PhoneWindow是它的唯一实现类。它屏蔽了开发者与WindowManagerService的交互,统一了UI设计,并统一接收用户交互事件,比如背景、title和按键事件等。Activity/Dialog/Toast的UI展现都是依赖于Window来完成。对于UI编写,开发者只需要使用View相关即可。View最终会以ContentView的形式设置给Window:PhoneWindow.原创 2020-09-11 18:00:47 · 505 阅读 · 0 评论 -
【Android】RxJava源码流程分析
一、RxJava介绍Rxjava是很多项目中都会涉及用到的第三方库,项目中,有用到Rxjava+retrofit进行项目开发,故理解这第三方库的原理能解决很多隐藏的问题。二、流程分析最终会形成一条被观察者链,每个被观察者对象都有各自的线程Schedulers用来切换线程。OkHttpCall封装okhttp3相关的操作。分5个步骤来分析流程:第一步:设置RxJava2CallAdapter在retrofit.addCallApdapterFactory(RxJava2CallAdapte原创 2020-09-10 18:00:52 · 258 阅读 · 0 评论 -
【Android】Activity Window WMS源码关系流程
一、类图关系system_server_AMS类图_1:Activity_Window_相关类图:system_server_AMS类图_2:总体类图:流程图:二、相关概念1、ActivityThread:为应用程序的主线程类,所有的APK程序都有且仅有一个ActivityThread,程序的入口为该类static main()函数Activity:Activity包含一个Window,该Window在Activity的attach方法中通过调用new PhoneWindow()创原创 2020-09-09 18:00:54 · 285 阅读 · 0 评论 -
【Android】Android中的位运算应用
很多人都可能在面试的时候遇到过这样一道题目:有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,其中有一瓶含有剧毒(稀释后仍然具有毒性),你只有 10 条小白鼠,它们在喝下毒药后会马上死去,怎样利用它们在最短的时间内判断出哪瓶是毒药?我们都知道,在计算机语言当中,所有的数字最终都会转化为二进制进行计算,而二进制中每一个“位”能够表示两种状态,它们分别是数字 0 和 1。回到刚才的题目,每条小白鼠的生和死的状态都可以表示二进制中的一个“位”, 10 条小白鼠一共就能表示 1024 种组合状态,原创 2020-09-07 18:01:07 · 305 阅读 · 0 评论 -
【Android】Android加密和解密方式
一、不可逆加密不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。如信息摘要(Message Digest)和安全散列(Secure Hash)算法属于此类,常见的算法包括 MD5、SHA1、PBKDF2、bcrypt 等。特点:使用MD5和SHA进行加解密:// MD5加密private static String t原创 2020-09-04 18:00:37 · 2650 阅读 · 0 评论 -
【Android】Android Broadcast源码解析
Android Broadcast源码解析一、静态广播的注册静态广播是通过PackageManagerService在启动的时候扫描已安装的应用去注册的。在PackageManagerService的构造方法中,会去扫描应用安装目录,顺序是先扫描系统应用安装目录再扫描第三方应用安装目录。PackageManagerService.scanDirLI就是用于扫描目录的方法,由于代码比较少,这里我们直接把它贴了上来:private void scanDirLI(File dir, int flags,原创 2020-09-03 18:00:27 · 313 阅读 · 0 评论 -
【Android】Android Parcelable 源码解析
Android Parcelable 源码解析大家都知道,要想在Intent里面传递一些非基本类型的数据,有两种方式,一种实现Parcelable,另一种是实现Serializable接口。今天先不说Serializable 接口,只说Parcelable。我们知道,Parcelable 只是一个接口,里面有几个关键方法:一、writeToParcel /** * Flatten this object in to a Parcel. * * @param de原创 2020-09-02 12:29:47 · 464 阅读 · 0 评论 -
【Android】Android Service启动源码分析
Android Service启动源码一、简介Android Service的启动流程源码分析,在Android中服务有两种状态,一种是启动服务,一种是绑定服务,它们有着不同的生命周期。启动服务的生命周期:onCreate,onStart,onDestroy;绑定服务的生命周期:onCreate,onBind,onUnBind,onDestroy。至于服务具体如何使用,本篇将不做介绍。主要介绍从源码角度,解析启动服务过程。需要注意的是,阅读本篇文章之前建议先了解Activity的启动流程。二、源码解析原创 2020-08-31 11:10:28 · 440 阅读 · 0 评论