LJ的Blog

学海无涯苦做舟

0%

题外话

最近在学习Android的NDK相关的东西,看了JerryloveEmily这位大神写的JNI相关的文,看到了他用opencv做的一个毛玻璃效果,感觉还挺好玩的。本文记一下在集成过程中对我帮助比较大的几篇文,希望能帮到有同样需求的人,c++代码主要靠copy……

小记

OpenCV有多个平台的API,咱Android的也有~首先上官网把sdk下载下来。OpenCV官网,下载页在这,自己点击android的包就可以了。下载下来是这么一个情况:

OpenCV-sdk
apk包内有七个apk,分别对应了不同架构的cpu和其abi,这个apk类似于运行依赖的环境。samples包下是一些例子,这些例子需要依赖apk包内的apk。如果你打开这些例子看一下的话,会发现aidl文件,这些例子利用aidl和OpenCV提供的apk通信,实现功能。这种使用方法对于一般的开发者来说是无法接受的,因为总不能让用户装了自己的apk不算,还得装个自己不了解是什么东西的apk把。但是这种方式也是有应用场景的,比如这硬件就是你产的……不过这种情况在这不讨论,我选择的继承方式自然也不是装这个apk,然后调用java的api。在网上看到了一篇文,跟着操作了一下。这篇文章:Android开发配置opencv环境超详细教程,真的非常详细,每一步操作都写的非常简单明了。这里记一下我遇到的一个问题:ndk-build失败,

阅读全文 »

最近一段时间公司项目越来越大,编译运行很久不说,写代码的时候也会经常性的发生卡顿。讲道理不应该的,内存16G+ssd怎么说也不该这么卡的。于是抱着试一试的心态搜了一下,在知乎看到了解决方法:https://www.zhihu.com/question/32282404

解释就是虽然内存16G,但是默认设置不会用到那么多内存的,我看了一下我的配置,默认只会用1G。于是在项目越来越大之后,可能会频繁的触发GC(话说idea也是java开发的吧),自然就会卡顿。于是将之设置为4G。卡顿情况明显好转。

说一下配置的方法吧,我是Mac,首先找到Android Studio的目录,我是在Application中的,进入如下目录:

1
/Applications/Android Studio.app/Contents/bin

当然,这是我用pwd输出的目录,你直接用这个是不行的,因为空格需要转义。你可以自己输加上tab自动补全,非常方便。

阅读全文 »

写在前面

最近这两天非常烦躁,移植A项目的功能到B项目里,中间牵扯到的种种资源什么的就不说了,有耐心慢慢剥离就行。中间有一个so库一直加载失败,我真的是日了狗了,尝试了各种办法还是不行。最后用了他的sample里的东西作为module导入才解决,但是我觉得这并不算特别完美的解决办法,唉,没办法,对ndk了解的还是太少,从现在开始做相应的了解。

第一个总是Hello World

Android Studio在现在的版本可以非常方便的生成一个带jni的项目,只要在创建的时候勾选一个include c++ 那玩意就行了。不过对于我这种刚接触的人来说,还是要自己折腾一下。

首先是配置ndk开发环境,其实也没什么要配置的,一顿下载就ok了。

ndk

阅读全文 »

Socket基础

在说到计算机网络模型的时候一定都会提到这两个模型:OSI七层网络模型和TCP/IP四层网络模型,因为OSI七层过于复杂,现在普遍采用的是TCP/IP的四层网络模型。

七层OSI & 四层TCP/IP

tcp/udp协议位于TCP/IP协议栈的传输层,tcp是一个面向连接、可靠的协议,而udp协议是一个不可靠的、无连接协议。刚开始我有点疑惑,什么样的场景才需要udp协议呢?因为udp协议并不保证数据一定传输到目的地,有什么场景能容忍可能发生丢包的情况呢?后来在项目的某个解决方案的讨论中,听到了老大的解释。当时我们可以选用udp和tcp方案,问我该选用什么方案。我当时也了解了一些tcp和udp,记得在网上看到过这么一句话,如果你需要用额外的操作保证数据准确的传递到目的地,那不如直接采用tcp协议,所以我说udp并不保证数据一定传达,而tcp是可靠的,所以应该采用tcp协议。然后老大说在局域网(当时要解决的就是局域网中的一个问题)可以认为udp是可靠的,不需要考虑丢包的情况,不过数据处理难一点,后来还是用了TCP……

Socket可以说是对TCP协议的封装,可以理解成TCP的API,在TCP/IP协议栈中应当属于应用层和传输层之间的抽象。那么属于应用层的HTTP协议,和Socket有何异同呢?HTTP协议一般来说是短连接(当然,可以指定长连接),每次请求都会建立和断开TCP连接,而Socket默认就是长连接,两者在传输层都是建立和断开TCP连接。相比于Socket,HTTP协议显得更加的高级。二者都是基于TCP的,Socket可以用来编写一个HTTP框架。

阅读全文 »

写在前面

第三方只要文档详细,基本的功能用起来是十分方便的(和硬件底层有关的就算了。。),但是环境配置可谓入门小白的一大噩梦,反正我刚开始学的时候,各种环境配置简直让我挠破了头。这里我会详细的记一下我集成的步骤。

1.申请秘钥

这里只列出两个关键步骤的操作:

  • 获取包名
  • 获取SHA1
阅读全文 »

最近在研究和Socket相关的一些东西,Java中的Socket还是比较易用的,但是比较坑爹的就是有时候Socket不管怎么发送,Server都接收不到,代码也没有任何反馈,这样就需要一个机制确认Socket的状态。方法有很多种,我这里采用了心跳,超时计时选用了CountDownTimer,原来也用过,也知道他内部使用Handler实现的,感觉能用还算靠谱吧。然后问题就出在把本地代码融到项目之后。

本地代码,经过我自己测试都没有什么问题,心跳也能实现。但是在融入项目之后,发现启动了两个tcp client 只有一个正常启动了!

经过断点debug之后,我发现在第二个client初始化的CountDownTimer的时候挂了,跟随初始化代码一路点进去,发现是Handler初始化的时候挂掉了。

了解Android消息机制的人看到这一定就知道原因了,对:不能在没有looper的线程中创建Handler,而CountDownTimer内部也用的是Handler,而项目中则是开启了一个线程执行任务,我这里刚好就踩到了这个坑,最后把CountDownTimer换成了Timer。

阅读全文 »

写在前面

EventBus一直都有听说过,但是之前都没有用过。因为自己的项目里并没有特别复杂的事件传递,自己写个接口回调弄一下解决需求就ok了。最近有需求要了解一下EventBus,将自己的所得记录一下。

基本使用

首先在app的build.gradle中添加引用代码:

1
compile 'org.greenrobot:eventbus:3.0.0'

这样就可以在项目中使用EventBus了。

阅读全文 »

写在前面

最近因为自己毕业的一些事情断更了简书,一转眼已经有两个月了,是时候给自己充一波电了。本篇主要 复习 总结一些多线程中的基础知识,开篇打算理清一些概念性的东西,如有理解错误的地方,欢迎各位指正。

什么是并发,为什么要用并发?

并发与并行是一对相似而又有区别的的两个概念。并行是指两个或多个事件在同一时刻发生,只有在多CPU环境下才有可能发生。并发是指在一段时间内宏观上有多个程序在同时运行,但实际上每个程序只是在CPU分配的时间片内运行,每一时刻也只能由一道程序执行。

使用并发编程的目的是为了让程序运行的更快,但是,并不是启动更多的线程就能让程序运行的更快,这取决于代码的质量和应用场景。抛开并发代码的质量不谈,如果应用场景不得当,并发也不一定比串行的程序快,因为线程有创建和上下文切换的开销。这里不再深入,如果感兴趣可以《Java并发编程艺术》第一章中找到例子。

Thread和一些问题

阅读全文 »

Glide是一个图片加载框架,其他的图片加载框架还有UniversalImageLoader,Picasso,Fresco等,个人还是比较喜欢Glide这个框架的。Glide致力于打造更好的列表图片滑动体验,就如他的名字Glide(滑翔)一样顺畅,Glide还支持加载video,Gif,SVG格式。而且Glide会与你的Activity/Fragment绑定相关的生命周期,有自己的缓存策略,这样就让图片加载操作变得非常简单。本文的Glide源码是4.0的版本(我本来以为是3.7.0来着,后来一看有些代码对不上……)。

准备工作

如果你还没有使用过glide,可以通过下面两句话引入glide:

1
2
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:support-v4:19.1.0'
阅读全文 »

写在前面

这个项目很久之前就从** android-architecture ** 这个仓库clone了这个MVP架构的todoapp,源码也读过,不过没有整理过。最近整理资料准备毕设了,再读一遍源码,感受和以前又不同了。先放上项目地址,各位可以自己去clone或者下载:https://github.com/googlesamples/android-architecture/tree/todo-mvp

如果各位对MVP模式不是很熟悉,可以看我之前的一篇文:
Android之MVP初尝试,简单易懂。下文的view一般是指MVP中的view。

剥丝抽茧,理清项目结构

国际惯例,上项目结构图:

阅读全文 »