自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 跨端方案的发展和比较

java借助JVM编译到不同平台?并不是现在说的跨端,现在的跨端通常指使用某一种UI框架或者技术,将一套代码适配到多端。而实际上从业务来说都是前端技术想裂变成其他端的过程,尤其是移动端。上面对主流的跨端方案做了简述,跨端的目的是为了统一,统一的目的是为了更好的服务于业务,实现业务是第一要义。

2024-04-23 20:28:45 920 2

原创 单片机基础知识扫盲一

计算机系统的三大组成部分:CPU、内部存储器、IO单片机属于计算机的一种CPU是单片机系统的核心部分,别的模块通过总线和CPU进行关联;IO就是芯片的引脚,不同的单片机型号有不同的IO数量和定义;单片机就是一台微型计算机,MCU、单片机、单片微型计算器、微控制器、微控制单元都是一个意思;即常说的PCB ,printed circuit board,印刷电路板;PCB的作用就是骨架和连接。最终目的就是把所有的原件按照正确的电路图连接起来形成一个完整的可以工作的电路。

2023-04-24 16:19:06 699

原创 Android | 进程保活与拉活

保活拉活的主要手段和原理代码梳理

2022-09-07 11:20:06 3088

原创 Android | Handler源码解析

handler源码解析

2022-06-26 17:42:12 671

原创 Android | HEIF图片格式显示问题

HEIF/HEIC格式图片显示问题

2022-06-01 15:07:09 2790

原创 Android 应用构建 | Gradle基础 & 编写一个插件

Gradle1.定义:![image.png](https://img-blog.csdnimg.cn/img_convert/0d2a0f9e4bb95bfee51849d67c843051.png#clientId=u6849671e-e9de-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=77&id=u6fdd952a&margin=[object Object]&name=i

2022-05-10 10:23:02 467

原创 通信的基本概念与通信系统的组成

一:通信的基本概念广义上,通信指需要信息的双方或多方在不违背各自意愿的情况下采用任意方法,任意媒介,将信息从一方准确安全的传递到另一方。狭义上,通信就是信息的传输与交换,即信息的传递。## 1.信息系统的层次结构传输—传递—利用物理层次-逻辑层次-系统层次2.通信网络的结构:三类主要设备:传输、交换、终端所有设备按照通信协议的规定协调工作。3.发展1864麦克斯韦预言电磁波的存在;1887赫兹实验证实了电磁波的存在;1896马可尼、波波夫发明无线电通信;1962年,美国发射第一

2022-03-26 22:17:56 8154

原创 设计模式|原型模式

作用和场景对象创建成本过大,同一个类的不同对象之间差别不大,利用已有的对象进行复制,减少创建成本。原型模式属于创建型的设计模式。创建成本过大?对象数据涉及大量计算,排序、哈希计算、io等等。深拷贝与浅拷贝原型模式的实现关键浅拷贝:java语言中的clone()方法就是浅拷贝,他只会拷贝基本数据类型,复制引用对象的内存地址,不会复制对象本身。对于需要方B来说,浅拷贝得到的对象和来源方A是共享的,这就会出现一个问题,相互间的修改会导致来源方数据不统一,比如一次耗时的更新,期望依托临时的散列表B来

2022-03-26 18:43:00 3034

原创 设计模式 | 享元模式

一、作用和场景享元,即共享的单元,该模式的目的是为了,复用对象,节省内存,前提是复用的对象是不可变的对象。关于不可变对象:书中的解释是:对象一旦被创建后,对象所有的状态及属性在生命周期内不会发生任何变化,也就是对象创建后不能进行任何修改,不能改变对象内的成员变量,包括基本数据类型的值,引用类型的变量指向的对象也要具有不可变性public class Object{ private int value; public Object(int value){ this.value = valu

2022-03-14 12:06:15 418

原创 Android | 数据存储整理备忘

存储的类别Android 提供两类物理存储位置:内部存储空间和外部存储空间。在大多数设备上,内部存储空间小于外部存储空间,内部存储是手机系统自带的存储,一般空间都比较小,外部存储一般是SD卡的存储,空间一般都比较大,但不一定可用或者剩余空间可能不足。默认情况下,应用本身存储在内部存储空间中,可以在应用的清单文件中指明偏好设置,以便将应用安装到外部存储空间:<manifest ... android:installLocation="preferExternal"> ...&lt

2022-03-09 19:07:12 3221

原创 LiveData | observer引起的业务场景BUG

LiveDataLiveData组件是Jetpack新推出基于观察者的消息订阅/分发组件,具有宿主(Activity/Fragment)生命周期感知能力,这种感知能力可确保LiveData仅分发消息给处于活跃状态的观察者,即只有处于活跃状态的观察者才能收到消息。出现的问题业务场景A页面有一个持续性的业务任务,并同时播放BGM,任务的成功失败依赖后端下发的IM消息控制,在业务层则通过LiveData去分发结果问题:A页面跳转到另一个页面B之后,任务仍然执行,BGM任然播放,但停留在页面B的时候,失

2022-01-16 19:05:35 1474

原创 MotionLayout动画使用参考

MotionLayoutConstraintLayout的子类,是一种可以管理应用中的运动和微件动画的布局类型,关联手势和组件动画。支持在XML中完全描述一个复杂的动画。常规使用依赖implementation ‘androidx.constraintlayout:constraintlayout:2.0.0-rc1’​布局<androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://s

2021-12-25 16:23:23 1470

原创 设计模式一

文章目录前言一、设计模式的分类二、设计模式的拙见三、六大原则1.开闭原则2.依赖倒转3.里氏替换总结前言设计模式对于代码结构很有帮助,想提高代码逼格就绕不过设计模式,所以有必要整理一波。一、设计模式的分类从应用场景上设计模式的分类:很多都是常见的,在使用的开源框架中或者原生代码中都有用到,比如:责任链在网络框架Okhttp中拦截器的使用,java中提供了观察者相关的类可以直接使用,RxJava也是基于观察者模式,甚至LiveData也算是观察者模式,工厂模式也经常看到比如BitmapF.

2021-11-21 22:20:24 1586

原创 Android 问题记录大图加载

Android 问题记录大图加载1.场景:列表中动态内容的预览查看功能;2. 异常报错:出现RuntimeException canot draw too large(***kb) bitmap3. 问题分析:使用glide加载网络图片时的报错,对于一些大长图加载可能会出现内存不足的报错,而业务开发时没有做大图加载的相关处理,而ImageView的宽高都是自适应原始高度,所以内存占用过大。比如一个1M的图片,尺寸是3500/2500,一个像素占4个字节:内存为 350025004/1024/

2021-11-14 18:28:19 1375

原创 Android实现自定义密码输入框

一、实现效果及方案预期效果图:如上图所示,要实现一个这种密码输入框的样式,原生并未提供类似的效果,所以需要自定义控件的方式实现。预期的基础效果:只接受数字;支持输入加密显示;支持删除;密码位数可配置;文字大小、颜色、数字框背景可配置;方案分析:需要解决的问题:配置性;输入、删除如何实现?整体UI如何实现?1.对于输入删除可以通过setOnKeyListener监听软件盘的事件。2.可配置性数据可以通过自定义的属性文件配置;3.对于UI效果:A:可以基于原生控件做开发,每一

2021-11-07 10:40:25 5420 3

原创 Android优化工具及常用方法

Android优化工具及常用方法前言一、优化方向二、常用工具SystraceLayout InspectorCloneographerStrictModeProfile总结前言大部分的时间都在做业务开发,优化方面的工作其实相对占比较少,但也总会出现一些莫名其妙的问题,比如卡顿丢帧,必要的优化方法和工具还是要了解的。此处只做一下备忘和记录,至于具体深层次的使用网上有大佬写的已经很详细了,推荐极客时间张绍文的Android开发高手课程,里面对性能优化做了很明确的引导,但有些难度,追求深度的话可以研究,但文

2021-08-20 17:36:19 215

原创 Kotlin | DSL

这里写目录标题KotlinDSL篇(一)前言一、What's the DSL?二、使用步骤1.引入库2.读入数据总结二、使用步骤1.引入库2.读入数据总结三级目录KotlinDSL篇(一)提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录KotlinDSL篇(一)前言一、What's the DSL?二、使用步骤1.引入库2.读入数据总结二、使用步骤

2021-07-24 16:36:32 2084 3

原创 FFempeg绘制视频

从开始的解封装,初始化解码器,解码,接受,所有的东西都看不到实际的效果,接下来就是展示视频音频的步骤了。一:音频的重采样 在数据接受后判断音频流还是视频流,在音频流中做处理 SwrContext *actx=swr_alloc(); //2p:通道格式默认 声道数 3p:输出格式 actx = swr_alloc_set_opts(actx, av_get_default_channel_layout(2), AV_SAMPLE_FMT_S16,ac-&gt

2020-12-26 18:23:16 163

原创 FFmpeg方法记录

AVPacket:.AVBufferRef *buf;//引用计数int64_t pts;//pts *(num/den) 显示时间int64_t dts;//解码时间av_packet_alloc(void);创建并初始化 会申请空间需要释放av_packet_clone();创建并并用计数void av_packet_free();清空对象并减少引用计数void av_init_packet();默认值av_seek_frame:(seek操作):int av_seek_frame(

2020-12-17 19:39:35 102

原创 FFmpeg音视频解码及单多线程测试

一:解码器初始化步骤 AVCodec *codec = avcodec_find_decoder(ic->streams[videoStream]->codecpar->codec_id); AVCodecContext *vc = avcodec_alloc_context3(codec) avcodec_parameters_to_context(vc,ic->streams[videoStream]->codecpar) vc-&gt

2020-12-17 19:37:27 1087

原创 FFmpeg引入项目

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言二、使用步骤前言之前已经将ffmpeg源码交叉编译完成,下面主要在Android studio中创建项目使用# 一、项目中使用 创建项目,项目目录下图所示,将编译好的ffmpeg文件拷贝到app目录下: ![项目目录](https://img-blog.csdnimg.cn/20201206210035295.png?x-oss-process=image/watermark,type_ZmFuZ3

2020-12-07 22:30:59 430

原创 FFmpeg交叉编译、脚本参数配置

一:下载ffmpeg源码到/root/ff目录使用git下载的话先安装git(https://github.com/FFmpeg/FFmpeg.git):或者使用wget直接下载相应的版本:官网地址https://ffmpeg.org/download.html#releaseshttps://ffmpeg.org/releases/ffmpeg-3.4.tar.bz2因为之前已经配置共享目录,也可以直接把windows中下载好的直接拷贝过去。这时去查看ff目录下文件:执行 tar -xvf

2020-12-06 17:19:27 545

原创 Ubuntu常用工具安装并配置samba共享

一:## 详细步骤1 网盘下载:https://pan.baidu.com/s/1o92PAZ4#list/path=%2F2涉及到的一些Linux命令:https://blog.csdn.net/luansj/article/details/972726723下载ubantu:https://cn.ubuntu.com/download/thank-you?version=20.04&architecture=amd64计划用来做交叉编译所以下载server版不需要桌面版下载VMware

2020-12-05 22:22:57 173

原创 Android启动模式选用存在的问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言出现的问题二、使用步骤1.引入库2.读入数据总结前言 当前迭代的项目Muza在1.48版本中加入一对一视频通话的功能,场景与微信视频通话类似,在私信界面发起方发起进入视频界面,接收方收到视频邀请进入视频,接收方接受后开始通话。功能的搭建基于声网的SDK,但在开发测试环节出现了启动模式相关的问题。出现的问题对于双方视屏交互界面的Activity,考虑到要做退出小窗悬浮,以及视屏功能对于整个APP来说同一时刻唯

2020-12-03 21:04:19 148

原创 Android结构模式的主要区别(MVC)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、MVC简述MVC总结前言Android中的项目结构主要有MVC,MVP,MVVM,原始级别的MVC演变出来后两种,每种模式都各有优缺点,每一种模式的目的都是为了让业务逻辑更清晰,代码分离降低耦合度,方便长期的快捷维护,由于现在公司的项目比较old,还是原始的MVC模式,部分业务使用MVP模式,由于快速的迭代业务,部分代码甚至已经脱离模式,所以有必要重新整理下;一、MVC简述1.MVC(Model--View--Co

2020-10-27 22:59:36 220

原创 简述Java中的注解

Java中的注解 一.注解(Annotation): 1.解释:其实就是代码的特殊标记,这些标记可以在编译、运行时、类加载时被读取,并执行相应的操作。 2.代码中常常出现的注解,java提供的基本注解:@Override、@Deprecated、@SuppressWarnings、@SafeVarargs、@FunctionalInterface。其中ov是最常见用来指定方法的覆盖,强制一些子类必须覆盖父类的一些方法,编译器会检查是否重写,避免类名写错等低级的错误。Depreca

2020-06-21 12:46:59 169

原创 关于内存的小结

关于内存:一:OOM原因分析项目OOM设备信息截图:8.0系统以下发生OOM的频率较高。Bitmap图片是造成OOM的主要原因。应用程序的内存分配和垃圾回收都是由Android虚拟机完成的,在Android 5.0以下,使用的是Dalvik虚拟机,5.0及以上,则使用的是ART虚拟机。系统变更Bitmap在内存中分配位置的变化:1.Android 3.0之前是存放在Java堆内存中,像素数据存储在Native heap中,如果不手动调用 recycle,Bitmap Native 内存的回收

2020-06-01 17:45:07 147

原创 Android中的ActivityThread和ApplicationThread

一:ActivityThread和ApplicationThread1.ActivityThread:主线程、UI线程,程序的入口(main函数),不是线程是运行在主线程中的一个对象主要的成员变量如下: mActivities、mServices和mProviderMap 这三个变量保存了应用中所有的对应组件(相对生命周期长的,BroadcastReceiver生命周期很短暂);main方法中:public static void More …main(String[] args) {

2020-06-01 17:34:47 2293

空空如也

空空如也

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

TA关注的人

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