自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

LinChengChun的博客

一个自我反思与升华的地方

  • 博客(18)
  • 收藏
  • 关注

原创 [JetPack] LiveData源码解析

1. 背景 官网LiveData笔者在开发一款即时通讯和音视频应用时,发现需要花费很大的力量去处理系统组件之间的数据传递,稍微有点不注意,就会出现状态错乱不同步的问题,影响用户体验,也给系统稳定性带来了许多影响。因此,在我们2.0版本的重构过程中,毅然决定引入LiveData,经过实践证明,其是一种优秀的解决方案,很适合处理此类问题,但也有一些细节需要注意,因此有了这篇文章,希望可以记录下来。1.1 定义数据持有类感知组件生命周期数据能够被观察者所观察1.2 使用 LiveData 的优势

2020-11-24 11:11:43 500

原创 Android Styling System 知识体系

Android Styling System1. 背景2. 主题背景与样式的区别2.1 主题背景 != 样式2.1.1 共同点2.1.2 不同点2.2 样式2.2.1 样式里面有什么2.2.2 使用方法2.2.3 范围2.3 主题背景2.3.1 什么是主题背景?2.3.2 使用方法2.3.3 范围3.常见的主题背景属性3.1 还可以使用哪些主题背景属性的功能呢?3.2 命名空间3.3 如何自定义一个主题背景3.3.1 在 attrs.xml 中定义主题背景属性:3.3.2 在不同的主题背景中使用不同的值:3

2020-10-27 15:40:15 157

原创 [JetPack] androidx.lifecycle库中ViewModel的新旧版本API差异

1.背景谷歌官方的JetPack框架给开发者带来了丰富、好用的接口组件,很大程度上提升了应用质量和开发效率。但在开发过程中,笔者遇到一个问题,从截图(如下)上面可以看到,旧版本的API被添加了Deprecated,也就是 不给推荐使用。2.ViewModelProviders接口构造ViewModel的实现原理查看 ViewModelProviders.of(this) 方法 @Deprecated @NonNull @MainThread public stat

2020-10-09 10:04:32 593

原创 我的 HarmonyOS入门笔记

我的 HarmonyOS 入门笔记##1.背景本文主要介绍如何入门HarmonyOS。分为三部分:概念、源码下载、源码编译、Hello World。##2.概念 官网HarmonyOS是一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持多种终端设备。##2.1 分布式操作系统##2.2 分布式理念##2.3 系统能力##2.4 终端形态#

2020-09-15 10:20:35 2911

原创 如何理解Linux系统SSH协议和原理

一、基础概念1、概念:ssh,全称叫Secure Shell,由IETF的网络工作小组(Network Working Group)所制定;SSH为一项创建在应用层和传输层基础上的安全协议。2、传统网络服务程序缺点:rsh/ftp/telnet 在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。3、SSH安全协议的优点:专...

2019-03-05 14:31:45 612

原创 Android硬编解码MediaCodec使用笔记

一、MediaCodec介绍MediaCodec类可以用来访问底层媒体编解码器,即编码器/解码器的组件。 它是Android底层多媒体支持架构的一部分(通常与MediaExtractor,MediaSync,MediaMuxer,MediaCrypto,MediaDrm,Image,Surface和AudioTrack一起使用)。 In broad terms, a codec proc...

2018-05-06 22:30:56 2249

原创 时间复杂度与常见排列算法

一、时间复杂度概念1、时间复杂度概念提到时间复杂度,第一时间想到的是算法,简单说,算法就是你解决问题的方法,而你用这个方法解决这个问题所执行的语句次数,称为语句频度或者时间频度,记为T(n)。什么是时间复杂度,算法中某个函数有n次基本操作重复执行,用T(n)表示。 现在有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n...

2018-05-06 15:39:55 1809

原创 Gradle日常开发技巧总结

一、基础概念篇1、Gradle:是一个工具,同时它也是一个编程框架。使用这个工具可以完成app的编译打包等工作。通过安装Gradle插件让系统能支持运行Gradle。安装AS后就已经帮我安装了Gradle插件。但Gradle插件是独立于Android Studio运行的。2、Gradle version:配置文件路径==>youProject/gradle/wrapper...

2018-05-06 15:37:49 248

原创 Linux常用命令

本文档主要为了记录和总结Linux环境各个常用命令用法。每一个命令分三部分罗列,包括命令功能作用、命令参数与格式、常用命令及其功能。只是为了查找方便,进行知识整合。1、查看目录所占空间大小 du <目录路径> <参数> du -h // 罗列当前目录各个子目录所占空间大小,并显示单位为 kb/mb/gb等等 du /opt -h // 罗列...

2018-04-21 23:16:34 300

原创 Android不同系统版本的悬浮窗权限问题

Android悬浮窗权限问题一、悬浮窗适配的两种方法:1、按照正规的流程,如果系统没有赋予 APP 弹出悬浮窗的权限,就先跳转到权限授权界面,等用户打开该权限之后,再去弹出悬浮窗,比如 QQ 等一些主流应用就是这么做得; 2、利用系统的漏洞,绕过权限的申请,简单粗暴;不建议使用,因为兼容性有待商榷。 3、大脑模糊区域:悬浮窗与对话框权限是不同的,是不一样的。二、不同系统版本...

2018-02-24 15:29:34 1406

原创 librtmp开源库与android平台编译记录

一、编写目的为了记录编译librtmp开源库过程遇到的问题,帮助后来人提供参考,希望本文能为大家提供参考。二、简介(官方介绍)The Real-Time Messaging Protocol (RTMP) is used for streaming multimedia content across a TCP/IP network. This API provides most client f

2018-01-03 16:29:14 3620

原创 Android JNI模板与读取系统属性笔记

一、编写目的本文主要提供一个简单可用的 jni 模板,便于在APK中编写native代码。通过记录,希望能对jni学习有一个更深的认识。二、APP中的jni模板1、jni文件在项目中的截图2、详细步骤1)、在src/main/ 层,创建jni目录用于存放,native代码2)、增加Android.mk# Android.mk for check is rightful boardLOCAL_PAT

2018-01-02 16:17:53 2792

原创 个人技术发展方向

今天看到一篇文章,里面有一段话,我想对于现在的我很有感触。学习技术不外乎以下两个方向:1、广度:整个使用链条有哪些环节构成的?每个环节的作用是什么?都有哪些类似的可替代方案?它们之间有什么区别?各自优劣点是什么?。。。2、深度:这个【技术、产品】的本质是什么?都能做什么?运行原理是什么?底层是如何实现的?可以做怎样的改进?。。。不管你在做什么工作,都应该先把自己每天都要用的核心

2017-07-24 22:04:09 478

原创 如何对应用进行Android系统签名和常用adb命令总结

如何对应用进行Android系统签名和常用adb命令总结一、非系统APP应用添加系统权限的两种方法:应用场景:系统权限(AndroidManifest.xml中manifest节点中加入android:sharedUserId=”android.uid.system”这个属性)方法一:将APP工程放置到系统源码环境,进行编译,并打包到系统ROM包里面;则默认具有系统权限;方法二:利用系统的签名

2017-06-19 15:38:11 2351

原创 21分钟入门MySQL笔记

概念:Relational Database Management System,关系型数据库登录到MySQL:mysql -h 主机名 -u 用户名 -p创建一个数据库:create database 数据库名 [其他选项]; create database samp_db character set gbk; // 设置编码格式选择所要操作的数据库: 1、登陆时指定:mysql -D

2017-06-19 14:44:34 358

原创 C++:string类型与char*类型转换方法

string类型与char*类型转换方法string 是c++标准库里面其中一个,封装了对字符串的操作;把string转换为char* 有3中方法;利用string类的 data()方法string str="abc";char *p=str.data();printf("%s\n", p); // 输出abc利用string类的 c_str()方法string str="abc";ch

2017-06-19 14:38:09 668

原创 EasyNVR 使用记录

一、简介(引用官方描述) EasyNVR能够通过简单的摄像机通道配置、存储配置、云平台对接配置、CDN配置等,将传统监控行业里面的高清网络摄像机IP Camera、NVR、移动拍摄设备接入到EasyNVR,EasyNVR能够将这些视频源的音视频数据采集到设备端,进行全平台终端直播、录像存储、录像检索和录像回放。并且EasyNVR能够将视频源的直播数据对接到第三方视频平台、CDN网络,实现互联网

2017-03-29 23:40:41 6247

转载 Ubuntu(linux) 下编译ffmpeg 记录

ffmpeg是基于Linux开发的,所以在linux系统(Ubuntu)上编译ffmpeg其实很简单。下面介绍如何在Ubuntu上编译基本的ffmpeg库(不带其他扩展的解码编码库)。1、下载ffmpeg源代码ffmpeg官网链接:https://ffmpeg.org/ffmpeg下载链接:git clone https://git.ffmpeg.org/ffmpeg.git

2017-02-04 13:56:40 441

空空如也

空空如也

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

TA关注的人

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