关闭

[置顶] 海康萤石摄像机远程监控机制分析

背景介绍有一个远程监控的需求,正常情况下采用服务器转发视频流对服务器要求很高,所以p2p看似是一个比较好的方案,但是p2p打洞却不是一件容易的事情,所以打算分析下海康萤石摄像机远程监控的机制,是否采用了p2p的方式。初步分析结果少废话,先说结果:对称型nat的p2p打洞是一个比较困难的技术问题,萤石摄像机并没有很好的解决对称型p2p打洞的问题,而是采用服务器转发的方式实现远程监控。 *注:由于测试...
阅读(152) 评论(0)

[置顶] 记录一次kernel内存泄漏的查找定位过程

Bug描述:压力测试一个小工程时发现内存逐渐减少,10个小时后出现OOMBug定位过程: 对整个工程模块进行分解,逐步缩小范围,由于整个工程包括几个相对独立的小模块,而整个工程采用单进程多线程的模型,导致进行分解时,要特别注意相互之间的耦合,只能逐步分离各个模块,运行测试(这里如果采用多进程模型,定位会更快一些,一个完整的功能,放在一个进程和多进程中,多进程天然的将功能细化了,定位问题,范围更小)...
阅读(277) 评论(0)

[置顶] 踩过的一个android原生“坑”

“坑”描述:在对我们自己研发的一个android终端时进行camera拍照压力测试时,发现当拍照张数达到几万张时,查看内存占用情况,发现内存泄露。填“坑”:frameworks/base/core/jni/android/graphics/YuvToJpegEncoder.cppbool YuvToJpegEncoder::encode(SkWStream* stream, void* inYuv,...
阅读(316) 评论(0)

[置顶] 基于pjsip实现p2p语音对讲

需求为实现跨网络的语音对讲,使位于NAT后的两个设备进行p2p的语音通讯,此处选用pjsip开源项目说实现。 未解决的问题:对称型的NAT无法实现p2p打洞,pjsip采用的turn服务进行转发,不能称之为纯粹的p2p。pjisp简介PJSIP是一个开放源代码的SIP协议栈,它支持多种SIP的扩展功能 。它的实现是为了能在嵌入式设备上高效实现SIP/VOIP。(摘自百度百科) 项目网址:http...
阅读(1150) 评论(0)

[置顶] 嵌入式软件开发工程师谈软件架构的设计

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl...
阅读(2590) 评论(3)

技术选型一上来就看源码这是一种什么行为?

选择开源库,做了些简单了解,就看源码,这种做法感觉也就是刚毕业的小年轻喜欢干的吧,且不说源码要看多久,就你能不能看懂都不好说吧,哈哈。...
阅读(2) 评论(0)

Android应用开发—重载fragment构造函数导致的lint errors

背景:在一次release打包中发现lint报以下错误: Error: Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead [ValidFragment] 根据后面的log提示是由于重载了fragment的构造函数...
阅读(108) 评论(0)

基于git统计某个人的代码提交行数

git log --author="xxx" --pretty=tformat: --since=1.hour.ago --numstat | awk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,lo...
阅读(53) 评论(0)

Android应用开发—TabLayout定制化Tab样式

TabLayout的使用详解基于此文,了解下setCustomView(childView)的使用。...
阅读(39) 评论(0)

Android应用开发—浅谈MVX模式

MVX模式的文章太多了,这里不会再重述,关键我还不太懂,本文会从自己的一些思考,分下MVX的分离思想,先占个坑! Android应用架构这篇文章最后讲到: Activity和Fragment变得非常轻量。他们唯一的职责就是建立/更新UI和处理用户事件。因此,他们变得更容易维护。 我不太赞同这个做法:如果view中处理用户事件,那么view就和特定的数据逻辑绑定了,这样这个view很难复用,如果vi...
阅读(53) 评论(0)

Android应用开发—ViewPager FragmentPagerAdapter和FragmentStatePagerAdapter下Fragment的生命周期

ViewPager配合不同的PagerAdapter,对应Fragment的生命周期有着不同的表现,了解这个生命周期机制对于开发者选择合适的PagerAdapter实现不同的效果,有着很大的帮助。 FragmentPagerAdapter和FragmentStatePagerAdapter的区别:FragmentPagerAdapter:类内的每一个生成的 Fragment 都将保存在内存之中,因此...
阅读(61) 评论(0)

实现一个通用的生产者消费者队列(c语言版本)

背景:笔者之前一直从事嵌入式音视频相关的开发工作,对于音视频的数据的处理,生产者消费者队列必不可少,而如何实现一个高效稳定的生产者消费者队列则十分重要,不过按照笔者从业的经验,所看到的现象,不容乐观,很多知名大厂在这种基础组件的开发能力上十分堪忧。 音视频数据处理的特点: 音视频数据大:音视频数据特别是视频数据,占据了计算机数据的很大一块,不信就看看每个的硬盘里,去除电影,照片,mp3是不是很空荡荡...
阅读(77) 评论(0)

WeakReference带来了什么

转载自:WeakReference带来了什么 很多人说到:java存在内存泄漏。我不想反驳,因为我也开始慢慢说了,但我知道:内存泄漏和规范编码是两个完全不同的概念,所以我想说:请规范编码java的“内存泄漏”:堆内存不够用了,为什么不够用了?因为你认为已经过时的东西,没有被系统释放掉内存,为什么没有释放掉内存? - 因为你没有显示释放(c++版本) - 因为你还拥有着该对象的引用,而该对象没...
阅读(56) 评论(0)

软件工程—让软件包自带commit id

软件开发中软件版本号是一个重要的概念,而对于工程师软件版本号所对应的git(svn)commit id则更重要,嵌入式固件,移动端app开发中,理想的情况下是我拿到一个固件包,或者一个嵌入式设备,或者手机app,我们需要准确的找到该软件版本对应的commit id,如何来做最准确以及最方便:让软件包自带commit id。 Linux kernel的做法:不得不说linux kernel的很多做法思...
阅读(69) 评论(0)

git使用—rebase还是merge

转载自:https://segmentfault.com/q/1010000007704573/ 我猜现实中的情况是这样的:使用 git 的人群中,不会用 rebase(哪怕是基础功能的)的至少一半(这个估计恐怕很保守了) 剩下一半里真正理解何时应该正确 rebase 的恐怕也就一半…… merge 还是 rebase 并不是一个二者选其一的问题,而是应该根据具体情况来选择使用,而这个“具体情况...
阅读(49) 评论(0)

android应用开发—获取当前运行的services列表

public static void listServices(Context mContext) { ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); List<Activit...
阅读(49) 评论(0)

我为什么“放弃”从事八年的嵌入式领域

由于嵌入式平台性能所限,以及相应的开发平台,工具,语言所限,导致很多前沿领域的软件工程理论,方法无法实施,有些跟不上时代的感觉。...
阅读(84) 评论(0)

java打印调用堆栈的方式

Log.d(TAG,Log.getStackTraceString(new Throwable()));...
阅读(61) 评论(0)

Android应用开发—RecyclerView绘制蒙层

背景:如何在跨越两个或两个以上的item绘制一个view,该view需要跟随recyclerView的滑动而整体移动。...
阅读(68) 评论(0)

Android ImageView的scaleType(图片比例类型)属性与adjustViewBounds(调整视图边界)属性

转载自Android ImageView的scaleType(图片比例类型)属性与adjustViewBounds(调整视图边界)属性 ImageView的scaleType的属性可设置为matrix(默认)、center、centerCrop、centerInside、fitCenter、fitEnd、fitStart、fitXY android:scaleType=”center” 保持原图的...
阅读(52) 评论(0)

Android应用开发—通用的GridView网格分割线

注本文基于 Android RecyclerView 使用完全解析 体验艺术般的控件 中关于GridView网格分割线部分代码扩展而来。 public class DividerGridItemDecoration extends RecyclerView.ItemDecoration { private static final int[] ATTRS = new int[]{android...
阅读(50) 评论(0)

如何判断软件架构的好与坏

判断一个软件的架构的好与坏有很多方法,不过如果让我一句话来描述的话: 如果一个软件开发程度在70%以上的情况下,加入一个新功能,还需要涉及到大量的文件,代码的修改,那么这个软件架构一定很烂,而好的架构此时应该已经完成大部分底层组件的开发,而且相互独立,加入的大部分新功能基本上是原有组件的功能的组合(不涉及组件内部的修改,而不是在根据新功能,无休止的扩充组件的参数),以及加入新功能特有的独立组件。此处...
阅读(75) 评论(0)

Android应用开发—数据更新问题的思考

占位符...
阅读(56) 评论(0)

Android应用开发—LayoutParams的用法

Android应用开发—TextView的动态创建 这篇文章讲到了“TextView控件布局位置的控制”,主要依赖于RelativeLayout.LayoutParams的使用,本文简单介绍下LayoutParams的用法 注:本文大部分内容参考android,利用layoutParams代码动态布局空间位置和总结:代码中添加LinearLayout和RelativeLayout布局或者是一份c...
阅读(71) 评论(0)

Android应用开发—RecyclerView+SwipeToLoadLayout

占位符...
阅读(52) 评论(0)
33条 共2页1 2 下一页 尾页
    个人资料
    • 访问:7216次
    • 积分:369
    • 等级:
    • 排名:千里之外
    • 原创:29篇
    • 转载:4篇
    • 译文:0篇
    • 评论:3条
    最新评论