自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(106)
  • 收藏
  • 关注

原创 从Android源码角度,深度分析Handler机制

Handler作为Android开发中,线程间通信的常用方案,其内部的机制原理到底是怎样的呢?我们这篇文章,来一探究竟。

2023-01-03 10:46:39 500 1

原创 Android应用实现开机自启动

如何实现Android应用开机自启动呢?实现原理:Android设备(比如我们的Android手机、Android智能硬件终端......)开机时会发送一条开机广播:android.intent.action.BOOT_COMPLETED。我们通过监听开机广播来实现。(即:我们写一个广播接收器,接收开机广播,通过Intent跳转应用的入口Activity)实现步骤:1、在AndroidManifest.xml中声明权限:<uses-permission android:n

2022-04-26 11:26:25 12423 3

原创 adb的那些事

前言:写篇文章,来简单讲下adb。正文:一、关于adb。adb,即Android Debug Bridge,也就是Android调试桥。adb是一个C/S架构的命令行工具。它主要由3部分组成:运行在PC端的Client:可以通过它对Android应用进行安装、卸载以及调试。比如说AndroidStudio中带的adb.exe。 运行在PC端的Service:其管理客户端到Android设备上adb后台进程的连接。adb服务启动后,Windows可以在任务管理器中找到adb.ex

2022-01-09 22:40:38 5331

原创 Activity启动过程解析(基于Android 10)

前言:元旦假期,闲暇之余,写篇文章,总结下Activity启动过程。概述:Activity作为四大组件(Activity、Service、BroadcastReceiver、ContentProvider)之首,也是我们使用最频繁的应用程序组件,它是用来展示给用户一个可以与之进行交互的界面。一般来讲,我们启动一个Activity有两种方式:显示意图和隐式意图。那么,如下所示:Intent intent = new Intent(this, BActivity.class);sta

2022-01-04 15:24:42 2352

原创 gradle打包流程(三)--- 对gradle的深入分析

这篇文章主要讲下android gradle plugin主要流程拿'com.android.application'来说,1、准备工作2、configureProject配置项目3、configureExtension配置Extension4、createTasksBeforeEvaluate创建不依赖flavor的task5、createAndroidTasks创建构建task1、准备工作BasePlugin.apply()(1)检查插件版本(2)检查modu

2021-12-27 16:08:50 1435

原创 gradle打包流程(二)--- 进一步理解gradle

一、gradle是什么1、gradle是一个自动化构建工具。gradle是通过组织一系列task来最终完成自动化构建的,所以task是gradle里最重要的概念。以生成一个可用的apk为例,整个过程要经过资源的处理,javac编译,dex打包,apk打包,签名等等步骤,每个步骤就对应到gradle里的一个task。2、gradle使用groovy或者kotlin编写。groovy是DSL。那么什么是DSL?DSL也就是Domain Specific Language的简称,也就是领域特定语言

2021-12-27 14:34:24 5600

原创 gradle打包流程(一)--- 整体把控

前言:Android构建系统编译应用资源和源代码,然后将它们打包成可测试、部署、签署和分发的APK或Android App Bundle。我们使用Android Studio开发的时候,使用gradle构建工具包来自动执行和管理构建流程,同时也可以灵活地自定义构建配置。Gradle和Android插件是独立于Android Studio运行的,所以我们除了可以在Android Studio上构建Android应用外,还可以通过命令行构建Android应用。构建流程图:编译

2021-12-15 16:03:22 6665

原创 Java的垃圾回收以及常用的垃圾回收算法

Java内存管理主要涉及三个部分:堆(Java代码可及的Java堆和JVM自身使用的方法区)、栈(服务Java方法的虚拟机栈和服务Native方法的本地方法栈)和保证程序在多线程环境下能够连续执行的程序计数器。Java堆是进行垃圾回收的主要区域,故其也称为GC堆;而方法区的垃圾回收主要针对的是新生代和中生代。总的来说,堆(包括Java堆和方法区)是垃圾回收的主要对象,特别是Java堆。判断对象是否需要回收?(也就是对象存活判断):这里有两种算法:1、引用计数每个对象有一个引用计数属性

2021-11-30 10:31:41 478

原创 JVM的内存模型

Java虚拟机所管理的内存包含程序计数器、Java虚拟机栈、本地方法栈、Java堆和方法区5个部分。模型图如下图所示:1、程序计数器:为了线程切换后能恢复到正确的执行顺序,每个线程都需要一个独立的程序计数器,各个线程之间的计数器互不影响。独立存储,这类内存区域为【线程私有】的内存。程序计数器具有如下的特点:是一块较小的内存空间。 线程私有,每条线程都有自己的程序计数器。 生命周期方面,随着线程的创建而创建,随着线程的结束而销毁。 是唯一一个不会出现OutOfMemoryErro

2021-11-29 14:02:43 268

原创 Android Manager之SensorManager---距离传感器

一、获取距离传感器实例:SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);Sensor proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);二、注册传感器事件监听器:sensorManager.registerListener(this, proximitySensor

2021-11-24 15:52:29 3129

原创 Android Manager之SensorManager---基础知识

一、传感器的定义:一种物理设备或者生物器官,能够探测、感受外界的信号,物理条件(如光、热,适度)或化学组成(如烟雾),并将探知的信息传递给其他的设备或者器官。二、传感器,我们这里要讲的是移动设备(手机)上的传感器。手机上搭载的基本都是物理传感器其又可以分为:·方向传感器(Orientation sensor)·加速传感器(Accelerometer sensor)·陀螺仪传感器(Gyroscope sensor)·磁场传感器(Magetic field sensor)..

2021-11-24 14:59:21 2130

原创 电话通信功能知识总结

·sip固话·移动双呼·手机系统电话程序功能·将我们的通话能力开放出去,第三方APP可以通过调用API调起我们的APP,进行拨打电话。一、sip固话我们使用的是PJSIP。原生安卓系统自带的SIP是很不靠谱的,我们自己测试过,这是因为很多手机厂商对这一块进行了阉割,所以我们采用PJSIP。PJSIP的官网:PJSIP - Open Source SIP, Media, and NAT Traversal Library1、sip协议:Session initializat

2021-11-20 15:20:44 2502

原创 首个Flutter应用记录

应用功能描述:为一个创业公司生成建议的公司名称。用户可以选择和取消选择的名称、保存喜欢的名称。该代码一次生成十个名称,当用户滚动时,会生成新一批名称。我们这个应用分成两个部分:第一部分和第二部分。第一部分,我们将构建:·Flutter如何在Android、iOS和Web里自动适应不同的UI体系·Flutter工程/项目的基本结构·查找和使用packages来扩展功能·使用热重载(hot reload)加快开发周期·如何实现有状态的widget·如何创建一个

2021-11-16 16:51:25 1056

原创 Android Telephone

我们实现了通信能力:第一、我们支持sip固话通信功能,是一个完整的电话程序。我们支持sip呼出、sip呼入,打开/关闭扬声器,调整自己说话音量、调整对方音量,调起拨号盘进行指令输出。第二、axb双呼。流程就是我们调用后端的借口,然后后端调用运营商的接口,然后运营商通过中间号打电话过来,并且打电话给我们要打的那个号码,然后我们之间建立了通信。第三、支持axb双呼的自动接听,支持使用我们的程序替代系统默认电话程序。这里我们先主要说下,我们的程序替代系统默认电话程序。首先需要将我们的APP

2021-09-24 14:53:45 644

原创 实现一个通用的支持输入原因并且可以滑动消失的Dialog

package com.zdj.zdj_library.widget;import android.app.Dialog;import android.content.Context;import android.view.Gravity;import android.view.MotionEvent;import android.view.View;import android.view.Window;import android.view.WindowManager;import a.

2021-08-12 16:38:38 289

原创 View源码之scrollBy()、scrollTo()解析

scrollBy()源码:/** * Move the scrolled position of your view. This will cause a call to * {@link #onScrollChanged(int, int, int, int)} and the view will be * invalidated. * @param x the amount of pixels to scroll by horizontally * @param y the amount

2021-08-11 10:37:53 308

原创 View的绘制

measure layout drawmeasure:测量宽、高layout:确定在父容器中的位置,布局draw:绘制在屏幕上一、总体流程:视图的测量、布局、绘制都是按照视图树从上到下的,大致可分为DecorView--->ViewGroup--->View这样三个层级。当Activity对象被创建完成,会将DecorView添加到Window中(显示),同时创建ViewRoot的实现对象ViewRootImpl与之关联。ViewRootImpl会调用perfor

2021-08-04 18:10:19 180

原创 鸿蒙系统(HarmonyOS)理论基础合集(六):创建鸿蒙工程

关于创建鸿蒙工程的几个配置说明:·Project Name: 工程的名称,可以自定义。·Project Type: 工程的类型,标识该工程是一个原子化服务(Atomic Service)或传统方式的需要安装的应用。说明:如果是创建的原子化服务,则:1、原子化服务是免安装的,config.json中自动添加installationFree字段,取值为“true”。2、如果entry模块的installationFree字段为true,则其相关的所有hap模块的installationFree字

2021-06-07 17:55:51 2699

原创 鸿蒙系统(HarmonyOS)理论基础合集(五):国际化能力的支持

·时间日期国际化·电话号码国际化·文本识别·度量衡格式化·敏感禁忌时间日期国际化不同的区域具有不同的时间日期显示习惯。界面时间日期字串和时间类控件显示,应当遵循当地习惯的规则,当需要展示时间或日期时,建议获取当前地区的时间日期规格,并对显示的字串根据获取到的规格进行格式化再使用。示例1:Locale locale = new Locale(“de”, “CH”);String skeleton = “MMMMd”;String bestPattern = DateFormatUti

2021-06-07 17:50:33 645

原创 鸿蒙系统(HarmonyOS)理论基础合集(四):资源文件

resources目录应用的资源文件(字符串、图片、音频等)统一存放于resources目录下。resource目录包括两大类目录,一类是base目录与限定词目录,另一类为rawfile目录recources|—base //默认存在的目录| |—element| | |—string.json| |—media| | |—icon.png|—en_GB-vertical-car-mdpi //限定词目录示例,需要开发者自行创建|

2021-06-07 17:41:36 1334

原创 鸿蒙系统(HarmonyOS)理论基础合集(三):颜色模式的定义

应用可以在config.json的module字段下定义“colorMode”字段,“colorMode”字段用来定义应用自身的颜色模式,值可以是“dark”,“light”,“auto”(默认值)。示例:"colorMode":"light"当应用的颜色模式值是“dark”时,无论系统当前颜色模式是什么,应用始终会按照深色模式选取资源;同理,当应用的颜色模式值是“light”时,无论系统当前颜色模式是什么,应用始终会按照浅色模式选取资源;当应用的颜色模式值是“auto”时,应用会跟随系统的颜色模式值

2021-06-07 17:37:20 1652

原创 鸿蒙系统(HarmonyOS)理论基础合集(二):应用配置文件

HarmonyOS中的config.json,类似于Android中的AndroidManifest.xml配置文件的组成配置文件“config.json”采用JSON文件格式,其中包括一系列配置项,每个配置项由属性和值两部分构成:·属性属性出现顺序不分先后,且每个属性最多只允许出现一次。·值每个属性的值为JSON的基本数据类型(数值、字符串、布尔值、数组、对象或者null类型)。如果属性值需要引用资源文件,可参见资源文件。配置文件的内部结构“config.json”由“app”、“dev

2021-06-07 17:12:56 555

原创 鸿蒙系统(HarmonyOS)理论基础合集(一):鸿蒙基本介绍

系统定位:HarmonyOS是面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统。应用的发布形式:以APP Pack(Application Package)形式发布它是由一个或多个HAP(HarmonyOS Ability Package)以及描述每个HAP属性的pack.info组成。HAP是Ability的部署包,HarmonyOS应用代码围绕Ability组件展开。Android以apk(Android Application Package)形式发布iOS以ipa

2021-06-07 17:01:16 3846 1

原创 android:windowSoftInputMode属性详解

android:windowSoftInputModeactivity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题。这个属性能影响两个事情:【一】、当有焦点产生时,软键盘是隐藏还是显示【二】、是否减少活动主窗口大小以便腾出空间放软键盘它的设置必须是下面列表中的一个值,或者多个值的组合。值含义stateUnspecified软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置stateUnchanged当这个activity出现时,软键盘将一

2021-04-07 19:27:37 524

原创 即时通信(二)--- 腾讯云IM接入具体实现

一、

2021-04-07 19:21:45 1812

原创 即时通信(一)

即时通信(Instant Messaging IM)最早我们接触的即时通信软件,无非就是QQ了,再后来就是国民级应用软件微信了。国外比较有名的即时通讯软件有Whatsapp等。国内后来,像支付宝、美团等软件上也都增加了即时通信功能。包含即时通信功能都软件,大体上可以分为两类:一、社交类应用软件。比如QQ、微信。这些都是社交聊天为基础,然后再往上加各种功能的。二、其他软件,但是需要聊天这个功能。比如支付宝、美团、BOSS直聘。APP(无论是Android,还是iOS,或者将来的鸿蒙)上实现即时通讯

2021-03-24 17:16:37 779 1

原创 《View事件体系专栏》二------>关于事件分发的一些结论

(1)同一个事件序列是指从手指接触屏幕的那一刻起,到手指离开屏幕的那一刻结束,在这个过程中所产生的一系列事件,这个事件序列以down事件开始,中间含有数量不定的move事件,最终以up事件结束。(2)正常情况下,一个事件序列只能被一个View拦截且消耗。这一条的原因可以参考(3),因为一旦一个元素拦截了某此事件,那么同一个事件序列内的所有事件都会直接交给它处理,因此同一个事件序列中的事件不能分别由两个View同时处理,但是通过特殊手段可以做到,比如一个View将本该自己处理的事件通过onTouchEven

2020-10-02 16:37:42 119

原创 唤起地图应用进行路线规划、导航

需求:在APP中唤起地图应用(高德地图/百度地图/腾讯地图)进行路线规划、导航。前提:系统支持(即系统支持唤起第三方地图软件,并直接进入对应的模块,目前来看,Android、iOS、web/h5都是支持的)。原理:使用地图方(高德地图/百度地图/腾讯地图)开放的能力。链接:高德地图:https://lbs.amap.com/api/amap-mobile/guide/android/navigation百度地图:http://lbsyun.baidu.com/index.php?title=uri

2020-09-06 09:13:17 1096

原创 调用隐式意图跳转至设置-应用详情界面以及跳转至设置-应用通知设置界面

1、调用隐式意图跳转至设置-应用详情界面:Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.fromParts("package", getPackageName(), null)); startActivity(intent); 2、调用隐式意图跳转至设置-应用通知设置界面:try { Intent intent = new Intent(Settings.AC

2020-07-02 16:37:36 622

原创 在Fragment中申请运行时权限

注意,在Fragment中申请运行时权限,有一点与在Activity中不同,即不能使用ActivityCompat. requestPermissions而应该直接使用fragemt的requestPermissions方法,否则进不了fragment中的回调,而进去了Activity中的回调。...

2020-06-15 14:22:05 594

原创 关于普通for循环和增强for循环

什么时候使用普通for循环,什么时候使用增强for循环首先,增强for循环的写法比普通for循环简便,不过我们还得考虑效率。--->首先,我们先看结论:对于基本数组类的遍历,两者的效率是相同的;对于ArrayList的遍历,普通for循环的效率高于增强for循环;对于LinkedList的遍历,增强for循环的效率高于普通for循环。--->然后,我们来看...

2020-03-26 15:17:31 1138

原创 音视频 协议 概念

协议:RTSP:Real-Time Stream Protocol 由Real Networks和Netspace共同提出,基于文本的多媒体播放控制协议。RTSP定义流格式,流数据经由RTP传输;RTSP实时效果非常好,适合视频聊天,视频监控等方向。RTP:Real-Time Transport Protocol 由IETF提出。RTMP(基于TCP):Real-Time Message...

2020-02-21 16:16:19 2446

原创 自定义ImageView实现圆角图片

自定义ImageView实现圆角图片,满足以下需求:1、四个角的度数均要支持自定义2、可以在布局当中添加自定义的度数实现步骤:1、自定义一个ImageView,继承自AppCompatImageView。(关于AppCompatImageView,继承自ImageView,是一个在平台的旧版本上支持兼容功能的imageView。)实现它的构造方法,创建一个init()方法,保证构造方法...

2019-10-11 14:03:32 471

原创 结合项目经验来谈使用MPAndoridChart的总结(二)

二、画折线图。效果如上。我们使用LineChart这个类。1、在布局文件中,<com.github.mikephil.charting.charts.LineChart android:id="@+id/lineChart" android:layout_width="m...

2019-08-07 20:48:32 675

原创 结合项目经验来谈使用MPAndoridChart的总结(一)

MPAndroidChart是一款基于Android的开源图表库,MPAndroidChart不仅可以在Android设备上绘制各种统计图表,而且可以对图表进行拖动和缩放操作,应用起来非常灵活,并且功能强大,有Android图表“一哥”的称号。其官方地址为:MPAndroidChart。使用时需要注意,不同版本的MPAndroidChart的API有所差异。我们项目中使用的是3.0版本。需...

2019-08-07 20:44:21 566

原创 关于Fragment的那些事

Fragment是当今Android APP设计中常用的一个东西了,可以把它理解为碎片,Fragment是依附于Activity的。前面有一篇文章详细介绍说Fragment的生命周期Android中Fragment的生命周期详解。今天,主要讲讲使用Fragment时的一些其他事情。情形一:我们经常会拿ViewPager和Fragment一起使用。由于ViewPager默认具有预加载机制(默认...

2019-08-03 17:44:46 306

原创 阿里云OSS使用总结

一、阿里云OSS:OSS(Object Storage Service),即对象存储服务。OSS是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。OSS提供与平台无关的RESTful API接口,我们可以在互联网任何位置存储和访问。二、基本概念:1、存储空间(Bucket)。存储空间是用于存储对象(Obje...

2019-07-04 09:35:37 1197

原创 计算ListView的滚动距离

采用getScrollY()方法无效。直接ListView的滚动距离可采用如下方法: private int getListViewScrollY(ListView listView) { View itemView = listView.getChildAt(0); if (itemView == null) { retur...

2019-07-01 13:48:10 546

原创 Android平台上集成乐橙SDK

这篇文章,就Android平台上如何集成乐橙SDK进行讲解。前言:乐橙是浙江大华技术股份有限公司旗下的一家专注视频智能硬件,视频云和视频智能技术,为视频应用提供云视频能力的服务商。我们接入乐橙设备,实现实时预览、远程回放、抓图、切换画质等功能。类似于萤石的处理方式,我们也需要在乐橙开放平台注册应用,得到应用配置,并且我们也需要获取AccessToken,关于这些东西,大家可移步乐橙开放平台...

2019-05-08 17:31:11 1957

原创 Android平台上集成萤石SDK

这篇文章,就Android平台上如何集成萤石SDK进行讲解。前言:萤石是海康威视集团旗下的一家做视频云的公司。我们接入萤石设备,实现实时预览、远程回放、抓图、切换画质等功能。关于具体如何接入,包括添加依赖,声明权限等,大家可以参考萤石云开放平台Android SDK使用说明。我们这篇文章就不对这个进行具体讲解了,下面我们直接上代码,/** * Created by Administra...

2019-05-08 15:43:43 1654 2

空空如也

空空如也

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

TA关注的人

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