- 博客(94)
- 资源 (5)
- 收藏
- 关注
原创 Ubuntu20.04.2.0安装使用常见的问题:找不到命令、无法定位软件包、共享文件夹失败
1、sudo: vim:找不到命令sudo apt-get install vim-gtk执行完以上命令后,最好再执行以下命令,更新一下现有的程序sudo apt-get update2、关于Ubuntu出现无法定位软件包的问题解决出现该问题,大概率是由于执行的命令不正确、软件未安装或source.list镜像缺少,按如下步骤排查先执行:sudo apt-get update如不行则需要修改source.list添加开源的镜像//第一步 使用vim 打开source.list文
2021-02-21 23:09:45
11517
9
原创 DevEco Studio和Android Studio的简单对比
如大会上所描述的,安卓程序猿真的可以快速的转接到鸿蒙的开发中,通过类比Android Studio?(以下简称AS)和DevEco Studio (以下简称DS),结合官方的开发文档,可以很容易上手鸿蒙的应用层开发,下面我们通过对比的方式,编写第一个运行程序。1、AS和DS的整体对比通过对比可以发现,其整体结构基本一样,包括build、libs、java文件基本一致,主要区别如下:java文件目录:里面包含的一些控件和编写语言有所区别,AS中使用actiivty、serivice、java或kotl
2020-09-16 08:20:33
7533
原创 DevEco studio 一直加载gradle
在使用DevEco studio 时一直处于提示gradle的问题,该现象和之前的Androoid Studio类似一直去网络中请求下载指定的gradle的版本,此时类比Android Studio先将gradle版本下载下来,然后放置在指定的目录下,重新同步一下即可,操作流程如下:1、下载指定的gadle版本可以到 官网下载或者借助网友提供的下载好的版本,直接下载使用。2、打开DevEco studio自动加载路径在File–Settings–Gradle 中配置 Grale user home
2020-09-14 07:10:57
4853
4
原创 Android adb 命令行 卸载系统预安装的应用(无需root)
昨天刚买了个华为手机,性价比还可以,就是里面预安装 了好多其他应用,像“抖音”,“淘宝”和“支付宝”等应用,可以直接自己卸载,但是有些系统预安装应用就无法通过桌面卸载,例如“华为音乐”,“华为视频”和“钱包”等,此时可通过直接执行adb命令的方式卸载,无须root。1、说明主要通过以下命令行:adb shell pm uninstall [-k] [--user USER_ID] 包名参数说明:-k :卸载应用但保留数据与缓存,如不加 -k 则应用卸载,数据与缓存删除(应用可通过恢复出厂设置
2020-08-30 15:59:47
5143
原创 安卓音视频基础:AudioRecord和AudioTrack的简单使用
在之前的文章安卓实现录音/播放/暂停/继续的功能中介绍了通过MediaRecorder和MediaPlayer实现简单的录音和播放功能,但相比于安卓二次封装后的API,AudioRecord和AudioTrack更接近底层,可通过获取的PCM数据,进行二次的算法处理,实现更加接近需求的声音。1. AudioRecordAndioRecord类的主要功能是让各种JAVA应用能够管理音频资源,以便它们通过此类能够录制声音相关的硬件所收集的声音。此功能的实现就是通过”pulling”(读取)AudioRec
2020-06-27 15:01:04
1741
原创 Okhttp源码解析(一)
Okhttp(官网、github)作为安卓主流的网络加载框架,其基本使用相信大家已经很熟悉,通过简单的依赖和设置参数即可完成网络的请求,且包含丰富的API方便调用,例如简单的图片加载实例。本文旨在学习其源码相关的知识,了解网络加载背后源码的执行流程,方便更好的使用该框架和解决问题。1、网络加载的执行流程 OkHttpClient client = new OkHttpClient .Builder() .build();
2020-05-31 23:21:36
402
原创 算法中时间复杂度和空间复杂度简介
作为程序员,大家应该都听过这样一个公式:程序设计 = 算法 + 数据结构,我们所编写的程序都可以使用这个公式来概括,其中算法主要是针对世间和空间两个维度进行考核。时间维度:执行当前算法所消耗的时间,即,时间复杂度;空间维度:执行当前算法所消耗的空间,即,空间复杂度。1、时间复杂度1.1 计算表达式要计算算法的时间消耗,可以通过加日志打印,获取该程序执行算消耗的时间,但在实际的使用中,...
2020-04-19 13:32:07
359
原创 Android的IntentService的源码分析
1、简述由于Service作为四大组件之一,其运行在主线程中,无法执行耗时操作,通过如果需要执行耗时操作需要创建线程来执行异步任务,但其实不用自己创建线程,安卓原生中提供了一种类:IntentService。其是一种继承自Service的异步请求类。2、简单使用public class TestIntentService extends IntentService { privat...
2020-02-03 22:50:22
214
原创 Android的HandlerThread的源码分析
1、简介HandlerThread顾名思义,就是Thread与Handler相结合,其本质还是一个线程,只是在该线程中添加了该线程相关的Handler,实现了轻量级的异步类,具有以下特点:普通线程类:与普通线程的使用类似,需要通过新建线程对象并调用start()开启线程;内部嵌套了Handler:包含与该线程相绑定的Handler,方便线程之间的数据交互;串行运行:其内部通过Looper...
2020-02-03 20:29:45
318
原创 Android的Handler常见的面试问题
本文是对常见面试问题的分析,关于Handler的运行机制详细分析见:Android Handler的源码分析1、Handler是怎么实现切换线程的?2、handler.sendMessage()与handler.post()的区别?3、MessageQueue是怎么增删消息的?4、一个线程可以有几个Handler?几个Looper?几个MessageQueue?5、A Handler发送...
2020-02-03 15:46:53
933
原创 Android Handler的源码分析
1、简述由于安卓中为了确保界面的更新同步,限制了只有UI(主)线程可以更新界面,但是UI线程不能执行耗时操作,相关的文件读取、数据加载和网络请求等操作,需要放置在子线程进行处理,但处理完成后怎样将子线程的处理结果及时的发送至主线程呢?此时就需要引入Handler的运行机制,通过Hnadler的创建、发送和处理方式,实现跨线程的数据通信。其实Handelr主要用于线程间通信的,但在安卓开发中一...
2020-02-02 17:32:14
1793
原创 Android 的 LocalBroadcastManager 源码分析
1、简述在安卓中广播通常分为普通广播、有序广播、粘性广播和本地广播,其中本地广播相比而言具有以下特点安全:本地广播只能在其APP中发送和接收,其他应用无法获取和接收;高效:本地广播发送和接收效率较高;简单:无静态注册方式,使用其封装后的注册、发送和解除方法。2、简单使用获取对象:通过LocalBroadcastManager获取LocalBroadcast对象;mLocalB...
2020-02-01 19:34:08
2925
原创 android中的scheme协议
1、什么是 URL Scheme?Android中的是Scheme是一种页面的跳转协议,主要用于以下场景:服务器下发:服务端通过自定义的字段下发至APP,APP通过解析该字段,跳转至相应的界面;H5跳转:通过H5的操作界面,跳转至安卓的原生界面中;APP的界面跳转:通过该协议跳转至APP内或其他APP的界面中。2、怎样使用URL Scheme1、AndroidMaintest.xm...
2020-01-31 21:59:12
636
原创 微信小程序开发工具 常用快捷键
格式调整Ctrl+S:保存文件Ctrl+C :注释代码Ctrl+[, Ctrl+]:代码行缩进Ctrl+Shift+[, Ctrl+Shift+]:折叠打开代码块Ctrl+C Ctrl+V:复制粘贴,如果没有选中任何文字则复制粘贴一行Shift+Alt+F:代码格式化Alt+Up,Alt+Down:上下移动一行Shift+Alt+Up,Shift+A...
2020-01-04 22:56:13
413
原创 Dalvik和ART
在-----讲解了Java的虚拟机JVM相关的知识,但JVM主要是用于pc端的应用,针对Android设备中提出了Dalvik和ART两种虚拟机,但关于这两种虚拟机涉及的知识点十分广,本文针对学习《Android晋级之光》和平时的工作总结,作简单分享。一、Dalvik 虚拟机Dalvik 没有遵循JVM规范来实现,因此Dalvik 与JVM存在以下不同点:基于架构不同:JVM基于栈去读写数...
2019-10-20 19:34:48
2556
原创 理解Java虚拟机
声明:学习刘望舒《Android晋级解密》第10章Java虚拟机总结一、Java虚拟机的执行流程Java虚拟机的运行流程包括两部分,编译时和运行时。其中编译时是将.java文件编译为.class文件;运行时是将.class文件交给Java虚拟机,进行程序的执行。由于最终Java虚拟机执行的是.class文件,因此在编译时是通过何种语言生成的.class文件,Java虚拟机并不关心,因此任何语言...
2019-10-19 19:56:27
229
原创 Android中UID、GID和PID的讲解
一、概述在实际的开发中经常会碰到各种ID,这是由于在计算机的发展过程中,需要对程序执行的每一步做标记,通过这些标记的关联便于系统的统一管理。像PID、UID、GID、和EUID等,其实对于这些ID不需要刻意记忆,只需要了解其名称含义,就明白其所对应的意义。二、Linux中的概念解析2.1 UID在Linux中用户的概念分为:普通用户、根用户和系统用户。普通用户:表示平时使用的用户概念,在...
2019-10-07 15:04:33
5103
原创 Android 8.0系统启动流程_Launcher(四)
本系列主要介绍Android8.0系统启动过程中涉及到的init、Zygote、SystemServer和Launcher。在之前的三篇文章中,讲解了如下的过程:初始化化:电源上电,加载BootLoader程序; 启动init.cpp,解析init.rc配置文件;启动Zygote进程:启动虚拟机和注册JNI方法;注册Socket服务端,预加载资源;执行runSelectLoop()方法等待...
2019-09-29 07:04:48
3269
原创 Android 8.0系统启动流程_SystemServer(三)
本系列主要介绍Android8.0系统启动过程中涉及到的init、Zygote、SystemServer和Launcher。
2019-09-28 17:10:38
610
原创 Android 8.0系统启动流程_Zygote(二)
本系列主要介绍Android系统启动过程中涉及到的init、Zygote、SystemServer和Launcher。文本分析的源码时基于Android8.0源码。Zygote(孵化器),系统中DVM、ART、应用程序进程和SystemServer进程都是由Zygote创建,其中SystemServer是应用层开发经常碰到的,因为应用层APP的进程是通过SystemServer进程创建出来的。...
2019-09-12 07:52:25
966
原创 Android 8.0系统启动流程_init(一)
本文主要介绍Android系统启动过程中涉及到的init、Zygote、SystemServer和Launcher。文本分析的源码时基于Android8.0源码。1.init1.1init启动前准备init进程是Android系统的第一个进程,其进程号为1,该进程启动后,主要处理一些重要的初始化工作,比如创建Zygote和各种属性服务。在电源按键,按下后,经历如下几个步骤后,便开始引入in...
2019-09-01 18:30:38
481
原创 FFmpeg解码流程简介
本文基于雷神的《基于 FFmpeg + SDL 的视频播放器的制作》课程的视频 ,本文就是基于该系列文章的学习后,总结出来的学习经验。1、FFmpeg的解码流程流程分析如下:av_register_all():注册所有组件,FFmpeg所有的方法调用,第一步都是先注册组件;avformat_open_input():打开需要解码视频文件路径,注册视频流;avformat_find_s...
2019-08-12 06:52:05
1848
原创 Android的dex热修复的实现基本原理
本文通过学习聊聊 APK —— Dex 热修复与 Classpath 总结在将java文件直接运行在JVM和Dalvik中,中讲解了java程序如何在JVM和Dalvik中运行,其中在Android部分实现是,先将java文件转为dex文件,导入至安卓手机中,通过Dalvik对该文件编译运行,实现将java文件运行在手机中功能。本文重点讲解如何利用该功能实现简易热修复的效果。热修复的根本原理是...
2019-07-20 16:17:20
362
原创 将java文件直接运行在JVM和Dalvik中
本文通过学习:聊聊 APK —— 直接运行 Dex 总结。1.运行工具分析在java学习时,如果想顺利的运行java程序,需要安装JRE,对于开发者而言,需要安装JDK,但最终执行Java程序的是在JVM中运行。将**.java文件转为一个或多个字节码.class文件,然后将其打包到.jar包中,JVM从相应的.class文件和.jar中获取相应的字节码。.java—.class–JVM运...
2019-07-20 12:23:18
725
原创 AndroidStudio 开发中字符串国际化string.xml与Excel表格的互相导入
在Android 的开发中有时需要适配国际化,需要将string.xml中的字符串导出翻译,然后再将翻译后的字符串导入至AndroidStudio中相应的string.xml中,关于国际化的实现,可参考Android适配国际化的三种方式(应用和系统),本文主要讲解如何快速的实现xml与excel中内容的互相导入,关键效果如下所示。1.String.xml导出至excel中按照以下步骤操作:...
2019-07-15 07:24:59
3408
1
原创 详细讲解Socket服务器与多客户端的长链接通信(含Demo)
目录简介Socket服务器实现Sokcet客户端实现Socket服务器与多客户端的长连接的交互1.简介在讲解Socket通信之前,需要先了解一下常见的网络层级,如下图所示ISO将网络传输分为7层,其中Socket通信处于传输层,使用的协议包括TCP和UDP,UDP是基于面向无链接的传输,TCP是基于链接的传输,关于TCP的工作原理,可参考《TCP/IP详解》笔记——TCP/IP基本...
2019-07-06 17:37:11
4849
1
原创 Android适配国际化的三种方式(应用和系统)
1.应用层实现在应用层开始时,经常会需要用到国际化的处理,常见的包括中文和英文的切换,对于该功能的实现比较简单,只需要在res目录下创建相应的资源文件即可,如果手动创建比较麻烦,可以下载AndroidStudio的插件AndroidLocalizationer或直接在plugins中搜索添加。安装完成后,重启AndroidStudio,在values的选择strings.xml,右键选择“Co...
2019-06-30 20:39:28
4526
原创 Android静默安装和卸载APK的代码实现
1.前言 在实际的终端设备开发中,为保证设备的正常运行,通常会同时运行两个APK,一个用于客户端交互的主APK,另一个是用于监护主APK的辅助APK。 在市面上常见的安卓APK中,为保证该设备能正常运行通常会集成腾讯的Bugly用于系统的维护和升级,但对于有些APK由于运行环境或使用场景限制,无法使用该第三方功能,就需要我们通...
2019-06-23 21:56:46
4570
原创 Android 系统签名实现的三种方式
在项目开发时,如果需要使应用具有系统权限,例如可以支持静默安装和卸载APK,此时就需要使用系统签名。常用的系统签名方式包括在ubuntu环境下、手动签名和在AndroidStudio环境配置,三种方式中,实现最简单的是通过AndroidStudo方式,该方式的签名实现与正常的APK签名相同,唯一不同的就是签名文件是通过系统生成的。注意,无论采用何种签名方式,如果想实现具有系统权限的应用,在AP...
2019-06-22 17:23:35
30994
9
原创 详解Android屏幕亮度和息屏的实现
1.前言在实际应用的设备中,特别是对于基于安卓平控制的终端设备,需要投放至外面使用, 例如自动售货机、安卓采集器、广告牌等,但外面环境由于光照环境的影响,屏幕显示的效果有所差异,因此需要基于关照强度的变化修改屏幕显示的亮度。同时由于特殊的应用场景,例如检测到有人员流动等屏幕亮起,否则处于息屏状态。2.屏幕亮度的修改对于屏幕的亮度修改有两种方式,一种是修改基于当前Activity的修改,该...
2019-06-22 14:42:26
11715
1
原创 Window下FFmpeg的安装和基本指令使用简介
1.下载软件在[Zeranoe](https://ffmpeg.zeranoe.com/builds/)网站中下载自己需要的FFmpeg的静态程序,包括Windows和macOS(注意不要直接去官网下载源代码),如需下载Linux环境可到[FFmpeg的官网](http://ffmpeg.org/download.html)下载。2.配置ffmpeg环境将cmd目录切换至ffmpeg.ex...
2019-04-27 17:58:08
777
1
原创 音视频常见码率、帧率等概念介绍
本文主要简介音视频开发的基本概念的知识,不涉及具体的编程应用。码率(比特率):指单位时间内连续播放的媒体(压缩后的音频/视频)的比特数,也就是单位时间内传入的比特数,其值越大,带宽销毁越严重。,单位为千位每秒(kbps),分为静态码率(CBR)和动态码率(VBR),静态码率的视频文件从头到尾都是恒定码率,优点运算量小,压缩快,支持设备范围广,缺点支持范围大,画质较差;动态码率没有固定的比特率,...
2019-04-27 17:54:49
6366
原创 Java对txt文件内容的增删改查操作
在之前文章中介绍了怎样在java中实现对txt文档的读取和写入的操作,并且可以通过保存为json格式方便数据的使用,但是如果需要对txt中的数据修改或删除操作,通常的做法是通过读取操作,将所有的数据读取出来放在一个临时的变量中,例如String中,但是如果数据量比较少则这样操作没有问题,但是一旦数据量比较大,例如需要对5G的数据进行删除操作,则会存在内存不足的情况。因此在对于数据的删除和修改操作...
2019-04-05 10:12:45
9128
3
原创 Android Camera之常用接口(人脸追踪源码)简介
1.CameraInfo用于描述camera的内部类,主要包括以下参数:facing:代表相机的朝向,只能取CameraInfo中的两个静态值,源码说明如下: /** * The facing of the camera is opposite to that of the screen. */ public static final...
2019-03-17 19:22:08
3540
3
原创 Android四大组件之Service使用详解
Service作为安卓的四大组件之一,适合长期在后台运行而不需要用户界面的操作,Service默认运行在UI线程中,因此Service中同样不适合做耗时操作,如果需要做耗时操作需要开启子线程。常用Service的开启包括start和bind两种启动方式。创建自定义Servicepublic class ServiceTest extends Service { /** ...
2019-03-04 23:30:44
384
原创 java.lang.ClassCastException: android.os.BinderProxy cannot be cast to
在使用Service进行绑定操作时,如果使用不当会出现以下问题: java.lang.ClassCastException: android.os.BinderProxy cannot be cast to .....如果出错该问题,需检查AndroidManifest.xml中,绑定的主件(activity或Service)与需要绑定的Service是否在同一个进程中,默认不配置 an...
2019-02-24 11:11:04
3796
1
原创 Android okhttp3.0配置https的自签证书和信任所有证书
1.Https相关知识1.1 http与https的区别HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的...
2019-02-22 22:23:11
3226
原创 Android中使用Handler为何造成内存泄漏?
目录:1.内存泄漏定义2.Handler造成内存泄漏的原因3.优化方案1.内存泄漏定义首先我们需要了解Java中的常见内存分配,包括静态存储区(方法区)、栈和堆等。 静态存储区:存储的是静态方法和全局的static数据和常量等,该区域的内存在程序编译时已经分配完成,在程序运行的整个过程都存在。 栈区:在执行方法时,方法体内的局部变量(包括基础数据类型和对象的引用等)都在栈...
2019-02-17 10:46:40
298
原创 Kotlin 基本语法
1.变量定义基本数据类型KotlinJavaBytebyteShortshortIntintLonglongFloatfloatDoubledoubleCharcharBooleanboolean通过以上对比可以发现,Kotlin相比较Java数据类型变化为类型首字母大写,有点类似Java中的装箱操作,但是需要...
2018-12-30 16:59:59
191
Learning Deep Models for Face Anti-Spoofing Binary or Auxiliary Supervision.zip
2019-09-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人