主要技术栈是安卓native和鸿蒙native应用层开发,其他的前后端、音视频和算法。
贴卡片的地方是技术栈对应的文章详情,链接是对应代码。
目录
Layout Inspector image server for API
AndroidManifest、Activity、Fragment和常用控件
代码https://gitee.com/flying-guy/office
日常练习
安卓
kotlin
kotlin
https://blog.csdn.net/mix39/article/details/144332743?spm=1001.2014.3001.5501
《第一行代码》和《安卓艺术开发探索》
https://gitee.com/flying-guy/ds/tree/master/HelloWorldDemo
生命周期
Activity生命周期:onCreate、onStart、onResume、onPause、onStop、onDestroy、onRestart、onSaveInstanceState
https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/ActivityLifeCycleTest/src/main/java/com/desay/activitylifecycletest/MainActivity.java
Activity
显示/隐式intent使用,传参
acitivtyTask、launchMode
Handler
ui更新
线程
线程:Thread、IntentService、AsyncTask、HandlerThread
线程池:FixedThreadPool、CachedThreadPool、ScheduledThreadPool、SingleThreadExecutor
照片墙
方形图片自定义view、图片压缩功能(高效加载图片避免oom/计算采样率)、是否是wifi、GridView、磁盘缓存DiskLruCache、图片加载器(图片从网络下载、存储、磁盘/内存缓存、线程池、图片加载策略)
广播
静态注册广播、动态注册广播、发送自定义标准广播、发送自定义有序广播、本地广播
接收广播
广播实战
sp、登录/踢登
内容提供者
读取系统联系人
申请权限、ContentResolver、ContactsContract、cursor、ContentProvider
自定义view
继承自view、ondraw/onmeasure、获取资源
碎片fragment
新闻实践。recyclerview、fragment
fragment
碎片
AIDL
使用AIDL完成跨进程通信
使用自定义Binder完成跨进程通信
binder池
IPC
跨进程通信方法,除了常用的AIDL还有下面几种。还有tx经典的mkkv
binder池
文件共享
Messenger
ContentProvider
TCP-Socket
文件存储IO
数据存到文件中,从文件中读数据、FileOutputStream 、FileInputStream 、BufferedWriter 、BufferedReader、OutputStreamWriter、InputStreamReaderhttps://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/FilePersistenceTest/src/main/java/com/desay/filepersistencetest/MainActivity.java
JNI
LBS
百度地图。LocationClient、BaiduMap、LocationClientOption、BDLocation 、权限申请、MapView、
ContentProvider
增删查改某个数据库表的数据。Uri、ContentValues、getContentResolver、Cursor
SQLite数据库存储
建表、升级表、增删查改数据。SQLiteDatabase、ContentProvider、UriMatcher、Cursor、ContentValues、SQLiteOpenHelper
RecyclerView
基础使用。LinearLayoutManager、RecyclerView.Adapter、RecyclerView.ViewHolder、Glide、PagerSnapHelper
竖直布局、横向布局和瀑布式布局
消息聊天。滚到指定行、消息插入
FlowLayout
流式布局。测量、布局
RemoteView
桌面小组件,自定义通知栏。通知NotificationManager、NotificationChannel、RemoteViews、PendingIntent、AppWidgetManager、AppWidgetProvider、Bitmap、广播
Permisson
运行时申请权限
Service
启动、停止、解绑服务。IntentService(独立线程处理后台任务不过已经被抛弃)、Service(主线程)
SharePreferences
SharePreferences存储。存储、读取数据
ProgressBar、AlertDialog
动画
-
通过xml实现动画AnimationUtils
-
通过代码实现动画AlphaAnimation
-
帧动画AnimationDrawable
-
给listView增加入场动画AnimationUtils/LayoutAnimationController
-
属性动画(ValueAnimator、AnimatorSet /ObjectAnimator、AnimatorInflater)
-
activity的切换效果overridePendingTransition
滑动冲突
-
外部拦截法:修改父容器需要拦截事件的条件
-
内部拦截法:父容器拦截除ACTION_DOWN以外的事件
获取屏幕宽度、获取当前进程名
View
View的事件体系Demo。绘制文字、绘制图片
-
view、位置参数、MotionEvent、TouchEvent、VelocityTracker、GestureDetector和Scroller
-
view的滑动
-
弹性滑动
-
view的事件分发机制
-
view的滑动冲突
WonderfulDay
天气实战。让背景图和状态栏融合在一起、处理省级市级县级数据、获取状态栏高度、长期在后台运行的定时任务、网络数据获取、图片加载、签名打包上线
window、SharedPreferences、Glide、JSONObject、JSONArray、Gson、okhttp、Service、Fragment、DrawerLayout、ScrollView、SwipeRefreshLayout、litepal
MediaVideoDemo
数据扫描,展示本地视频列表,文件夹+视频。基于LinkedHashMap实现一个LRU算法的Cahce对象
SQLiteDatabase、Fragment、RecyclerView
其他
Embedding
自定义view
自定义RecylerView
https://gitee.com/flying-guy/ds/tree/master/CustomComponent/CustomRecyclerview
旋转的小车
https://gitee.com/flying-guy/ds/tree/master/CustomComponent/CarView
自定义TextView
https://gitee.com/flying-guy/ds/tree/master/CustomComponent/CustomTextView
自定义游动的🐟
https://gitee.com/flying-guy/ds/tree/master/fish
粒子爆炸
https://gitee.com/flying-guy/ds/tree/master/subassembly/CanvasExplosion
歌词解析及展示
https://gitee.com/flying-guy/ds/tree/master/subassembly/LyricTest
旋转的小球+图片扩散
https://gitee.com/flying-guy/ds/tree/master/subassembly/LyricTest
常用组件
SeekBar、ProgressBar、DatePicker、TimePicker
https://gitee.com/flying-guy/ds/tree/master/subassembly/app
Glide
https://gitee.com/flying-guy/ds/tree/master/subassembly/GlideTest
LooperViewPager
LooperViewPager1
https://gitee.com/flying-guy/ds/tree/master/subassembly/LooperPage
ViewPager2+List
https://gitee.com/flying-guy/android-practice/tree/master/ViewPager/ListViewPager2
ViewPager2+Fragment
https://gitee.com/flying-guy/android-practice/tree/master/ViewPager/FragmentViewPager2
ExoPlayer
https://gitee.com/flying-guy/android-practice/tree/master/ExoPlayerDemo
组件化开发
APT
https://gitee.com/flying-guy/ds/tree/master/Start_Modular_APT
Gradle
https://gitee.com/flying-guy/ds/tree/master/Start_Modular_Gradle
Javapoet
https://gitee.com/flying-guy/ds/tree/master/Start_Modular_Javapoet
Rout
https://gitee.com/flying-guy/ds/tree/master/Start_Modular_Routing_Design
多渠道
https://gitee.com/flying-guy/ds/tree/master/%E5%A4%9A%E6%B8%A0%E9%81%93%E9%85%8D%E7%BD%AE/TestDemo
阿里云仓库代理配置
https://gitee.com/flying-guy/ds/blob/master/build.gradle
通过反射实体类创建数据库表
https://gitee.com/flying-guy/ds/tree/master/DatabaseTest
IPC
SDK、Gradle和应用资源
安卓demo-壁纸预览、分屏小窗与U盘播放时长记忆功能
Layout Inspector image server for API
AndroidManifest、Activity、Fragment和常用控件
构建首个应用和应用基础知识
NDK/JNI
使用ffmpeg从mp3提取pcm数据
https://gitee.com/flying-guy/practical-demo/tree/master/FFmpegDemo/FFmpegAudioPlayer
使用ffmpeg播放视频
https://gitee.com/flying-guy/practical-demo/tree/master/FFmpegDemo/FFmpegVideoPlayer
都到这了,肯定得来个交叉编译呀
Makefile&CMake
Makefile&CMake
https://blog.csdn.net/mix39/article/details/145415248?spm=1001.2014.3001.5501都交叉编译了,肯定要c++呀
C++11
https://gitee.com/flying-guy/c--practice/tree/master/c++11
C++(基础知识&c++11)
https://blog.csdn.net/mix39/article/details/145409131?spm=1001.2014.3001.5501学了c++,不得搞点demo,音视频拿捏~
音视频
播放原理&基础知识&SDL
音视频-播放原理&基础知识&SDL
https://blog.csdn.net/mix39/article/details/140507735?spm=1001.2014.3001.5501
ffmpeg基础介绍&常用命令
音视频-ffmpeg基础介绍&常用命令
https://blog.csdn.net/mix39/article/details/145416168?spm=1001.2014.3001.5501
demo-ffmpeg&sdl
音视频demo-ffmpeg&sdl
https://blog.csdn.net/mix39/article/details/151589491?spm=1001.2014.3001.5501
安卓demo-wifi点对点视频实时传输实例及原理
知识积累
JVM&内存分析
JVM内存模型、垃圾回收算法、内存抖动、内存溢出、内存泄漏、内存分析和内存泄漏检测(profiler、MAT、LeakCanary)、ADB命令
JVM&内存分析
https://blog.csdn.net/mix39/article/details/145408581?spm=1001.2014.3001.5501
字、字节、比特、进制、位运算
字、字节、比特、进制、位运算
https://blog.csdn.net/mix39/article/details/149673225?spm=1001.2014.3001.5501
进程&线程
进程常用的是安卓的多进程(开启多进程、进程间通信)
线程:线程状态切换、创建线程的方式、线程常用接口、并发编程、锁、死锁、同步异步
进程&线程
https://blog.csdn.net/mix39/article/details/145460352?spm=1001.2014.3001.5502
设计
solid
设计-面向对象的六大原则
https://blog.csdn.net/mix39/article/details/148034245?spm=1001.2014.3001.5502
设计模式
设计-设计模式Part01-Java版
https://blog.csdn.net/mix39/article/details/148036409?spm=1001.2014.3001.5502todo::mvvm/mvc/mvp
鸿蒙
鸿蒙基础开发
https://blog.csdn.net/mix39/article/details/145407967?spm=1001.2014.3001.5502
其他(未调试成功)
未调试成功的demo,但是后面可能又会遇到,到时候还得接着调所以记录一下
rtmp
rtmp推流
rtmpdump推流
NestedRecyclerView
header+tab+recyclerview 二级嵌套滑动
JAVA后端
在线办公系统-OA系统
时间:2021.4-2021.7(3个月)
简介
常见的oa系统。学习向,全后端开发,1人完成。前后端对接时0bug。
功能模块
注册/权限登录、角色管理、菜单管理、职位管理、职称管理、部门管理、操作管理、员工入职管理、工资账 套管理、聊天。
特点
前后端分离降低代码耦合性。squrity用户权限登录控制,Swagger管理接口前后端全功能对接只有1个bug,Postman单元测试接口,Redis缓存优化左侧菜单栏。RabbitMQ实现消息可靠性发送。使用存储函数/公式/优化sql等方法优化数据查找速度。
技术栈
Java、SpringBoot、SpringSqurity、EasyApi、MyBatisPlus、Redis、RabbitMQ、MySQL、WebSocket、 Vue.js、ElementUI。
代码
https://gitee.com/flying-guy/office
传统Web前后端
共享租赁平台
时间:2021.2-2021.4(2个月)
简介
该平台分为B端和C端。B端为厂商可以发布商品,对商品各信息进行管理,C端用户可以租赁商品。
功能模块
主要负责B端注册登录审核、三级管理功能前后端开发,B端发布商品、库存管理前端开发。C端登录注册功能开发,收藏夹、购物车后端开发以及部分功能的前后端对接。
特点
第一次搞这么完整的项目。收获颇多啊,hhhhhhh
技术栈
语言java、vue.js,后端使用SpringBoot、MyBatis-plus、shiro ,前端B端使用 LayUi 框架、C端使用 Uni-App ,数据库用mySQ
代码
音视频相关demo
安卓端到端投屏软件
简介
这是一个视频画面安卓端到端投屏软件
功能点
视频源数据采集(Camera或者屏幕信息)
视频画面点对点双向传输
H264、H265高清投屏
流程图
图1-1. 点对点视频流程图
功能界面展示
图1-2. H265高清投屏视频效果图
左边为服务端推流视频数据,右边为客户端连接服务端热点后接受视频数据,使用h265编码格式。将左边屏幕展示数据推到右边屏幕展示。
图1-3. H265高清投屏+摄像视频效果图
左边为服务端推流视频数据,右边为客户端连接服务端热点后接受视频数据,使用h265编码格式。将左边摄像头采集到的数据推到右边屏幕展示。
图1-4. H264双向摄像视频效果图
左右两边都为服务端和客户端。分别将自己摄像头采集到的数据展示在右下角并把数据推到对方的屏幕上。
技术栈
WebSocket、MediaProject、VirtualDisplay、Camera、MediaCodec。
测试手机
三星Glaxy a6s、红米Note40
实现详解
代码
https://gitee.com/flying-guy/practical-demo/tree/master/VideoTest
单屏分屏效果
简介
这是一个单个屏幕分屏效果的摄像头效果。
功能界面展示
图2-1. OpenGL分屏效果图
技术栈
CameraX、OpenGL(.fsh、GLThread)
在线电台(安卓应用)
时间:2022.6-2022.8(2个月),1人完成。
简介
在线电台是一个使用喜马拉雅在线电台SDK的免费api做成的一个在线听电台应用。具有推荐、订阅、历史、模糊搜索、播放控制(播放、暂停、按纽上下曲、滑动上下曲、列表模式切换、排序切换)、进度条、播放列表、订阅功能、电台节目详情页、ID3信息专辑图展示、mini播放器等功能。
用例图
图3-1. 喜马拉雅app用例图
功能界面展示
图3-2. 喜马拉雅 app 功能界面图
以上截图分别是推荐、订阅、历史列表界面、电台详情页、播放界面、搜索界面的截图。
demo 视频
待放入
代码
https://gitee.com/flying-guy/practical-projects
技术栈
喜马拉雅电台SDK、Java、SQLite、RxJava、Glide、RecyclerView、Android。
特点
面向对象编程,代码可移植性好,复用性高。
空间众包任务分配算法研究与实现(算法实现与改进)
时间:2021.12-2022.05(5个月)
简介
空间众包任务分配算法有打车、外卖配送等实际应用场景。该次算法实现是基于基础算法 TBG(基于阈值的贪婪算法)、BB(批处理算法)的基础上,使用 MNTP 算法进行改进,通过缩短最大延迟的方式以改善任务分配的整体延迟效果。
TBG 算法
基于阈值的贪婪算法(TBG)的基本思路就是多层的循环迭代,直到车辆与用户匹配完成。即来一个用户订单就分配一个可用工人去接单。
优点:该算法可以预防请求长时间没有工人接单的情况发生。
缺点:在算法中,服务器需要在每个任务到达的ε时间内对其进行响应,较短时间内对任务进行匹配,这可能会导致稍后到达但更适合请求的工人无法被选择。
BB 算法
为了缓解稍后到达但适合请求的工人无法被选择的这种现象,出现了 BB 算法。使用的基于批处理的算法对请求和工人都进行了缓冲,在缓冲时间内匹配更合适的工人和用户。
优点:该算法无需立刻对刚到达的新请求进行匹配。可以让服务器有更大的选择合适工人的空间,让稍后到达但更适合的工人可以被选择。
缺点:在算法中,对请求和工人都进行了缓冲,且每一批请求都需要缓冲至少一 个时间戳。因此,缓冲时间对任务分配的延迟有较大影响。
分析过程
图4-1. 2016 年 4 月纽约市出租车订单分布热力图
图4-2. 2016 年 4 月纽约市离群任务栅格化图
通过将 TBG、BB 算法跑实际数据测试和将任务订单可视化发现,较远的订单对整体的任务分配延迟有重要的影响。如果能对其进行优化则可以更大的可能缩短整体的订单任务分配延迟时间。
MNTP 算法
对地理位置栅格可视化化,通过分析前几日一个月的订单数据的分布规律,查到大部分任务分配时间长的订单都是在一些偏远的机场或者娱乐中心。我们根据这个规律提取安排合适数量的车辆在合适的时间前去等待。避免用户订单等太久或者没有工人接单的情况出现。
算法验证
使用可能会对算法结果造成影响的因素对算法进行测试,我们可以从图中看出,MNTP 在大多数情况下都优于其他算法。
图4-3. 请求和工人密度对任务分配延迟的影响
请求和工人密度对不同算法性能的影响。图4-3 给出了在请求和工人密度影响下不同算法的有效性,图4-3 中的横坐标 Amount 表示任务匹配完成的订单数, 图4-3(a)的纵坐标表示不同算法在匹配完成对应横坐标数的订单数时的竞争比,图4-3(b) 的纵坐标表示不同算法在匹配完成对应横坐标数的订单数时该批订单里面的最大延迟,图4-3(c)的纵坐标表示不同算法在匹配完成对应横坐标数的订单数时该批订单整体的平均延迟。
图4-4. 时空相对密度差异的影响
时空相对密度对不同算法性能的影响。图4-4 给出了不同时空相对密度下不同算法的有效性,我们通过改变时间跨度来模拟不同的时空相对密度,不同的时空相对跨度拥有不同密度的订单数和可用车辆。图4-4 中的横坐标 Amount 表示不同的时间跨度,图4-4(a)的纵坐标表示不同算法在不同时空跨度下的竞争比,图4-4(b)的纵坐标表示不同算法在对应横坐标数时间跨度下的匹配完成的订单里面的最大延迟,图4-4(c)的纵坐标表示不同算法在对应横坐标数时间跨度下的匹配完成的订单里面的平均延迟。
图4-5. 不同时间段的影响
析不同时间段对算法性能的影响。图4-5 给出了不同时间段下不同算法的有效性,图4-5 中的横坐标表示选取的时间段,我们这里选取一些具有代表性的时间段。图4-5(a)的纵坐标表示,不同算法在不同时间段的竞争比。图4-5(b)的纵坐标表示不同算法在不同时间段匹配完成的订单中的最大延迟。图4-5(c)的纵坐标表示不同算法在不同时间段匹配完成的订单中平均延迟。
创新点
对历史数据进行可视化分析发现,通常情况下,离任务群较远的任务点拥有最差的单个性能。本文的创新点是将时间段划分为时间片,将空间众包涉及的地理位置进行栅格化,分析历史数据,预测出单位时间片单位网格内的任务数量,得到离任务群较远的任务点,提前安排合适的工人前往任务请求的位置,缩短任务请求者等待合适工人出现的时间和工人行进到任务请求者的位置的时间,最大可能的最小化最差单个性能带来的最大延迟。
技术栈
算法实现(基于阈值的任务分配算法、基于批处理的任务发分配算法)、算法改进(基于任务预测的任务分配算法)、GIS数据处理(栅格化处理/.shp/.csv/GeoDataFrame)、可视化分析技术(matplotlib/pyplot/transbigdata/seaborn)、Jupyter、Python、GeoPandas、Numpy、数据预处理、中英文文献阅读并提取关键信息能力、算法有效性验证。
算法有效性验证方式
采用对不同时间段、不同密度的数据和影响算法关键参数进行分组的方式对程序进行分组测试。
介绍视频
待放入
代码
https://gitee.com/flying-guy/spatial-crowedsourcing-task-allocation-algorithm

2921

被折叠的 条评论
为什么被折叠?



