C学习心得(一)

编辑器的选择和学习资料

  • window平台 Visual Studi、 Eclipse+CDT+MinGW CodeBlocks

Mehr lesen

C++学习心得(一)

 面向过程思维转变成面向对象的思维
 一定要注重思考问题、思考概念、思考设计哲学
 多练习、多敲代码
C++对 C 语言的扩展知识
先看一个 C++经典导学代码,求圆的面积和周长:

#include
using namespace std;
class Circle
{
double radius ; //成员变量
public : //类的访问控制
void Set_Radius( double r ) { radius = r ; } //成员函数
double Get_Radius() { return radius ; } //通过成员函数设置成员变量
double Get_Girth() { return 2 3.14f radius ; } //通过成员函数获取成员变量
double Get_Area() { return 3.14f radius radius ; }
} ;
int main()
{
Circle A, B ; //用类定义对象
A.Set_Radius( 6.23 ) ; //类的调用
cout << “A.Radius = “ << A.Get_Radius() << endl ;
cout << “A.Girth = “ << A.Get_Girth() << endl ;
cout << “A.Area = “ << A.Get_Area() << endl ;
B.Set_Radius( 10.5 ) ;
cout << “B.radius = “ << B.Get_Radius() << endl ;
cout << “B.Girth=” << B.Get_Girth() << endl ;
cout << “B.Area = “ << B.Get_Area() << endl ;
return 0;
}
思考题:C 是面向过程的,执行语句是一步一步执行的,也可以是函数之间的调用,那么上面的代码怎么执行?(面向对象的思维解决问题)
成员函数是否可以不要?为什么 c++中设计了成员函数?
Android 特训营 NDK 进阶之 C++大纲 Created by
Jesson
扩展知识总结:
一、命名空间总结
A)当使用的时候,该头文件没有定义全局命名空间,必须使用 namespace std;这样才能正确使用 cout。若不引入 using namespace std ,需
要写 std::cout。
B)c++标准为了和 C 区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。
C)C++命名空间的定义:namespace name { … }
D)using namespace NameSpaceA;
E)namespce 定义可嵌套。
代码实战 1:熟悉 namespace 用法

Mehr lesen

关于IM通讯的研究

主要是通过干货集中营里面IM项目的研究
1.音频的录制 主要是仿微信按住语言的录制
2.多图片相册的选择
想到前几天的图片压缩框架
a.LuBan的压缩
b.网易云自定义压缩框架(极限压缩)
c带拍照的多图片选择框架 https://github.com/LuckSiege/PictureSelector

Mehr lesen

万能接口的使用

主要还是架构师思想的一个练习

组件间的通讯
1.Intent
2.handler
3.broadcastReceiver
4.aidl
5.contentprovider
6.messager
7.intentface

在不考虑eventbus等第三方通讯框架的基础上,通过对接口的封装来实现不同界面之间的通讯

Mehr lesen

对事件分发机制的一些理解

主要是整理了一下网易云的安卓公开课关于时间分发机制讲解的重新认识

事件传递对象

Activity: 控制生命周期 & 处理事件

ViewGroup: 一直View的集合(含多个子View)

View: 所有UI组件的基类

Mehr lesen

手写EventBus框架

最近在听网易云的安卓高级公开课
分析了EventBus的实现原理
刷新了自己对于EventBus的认识
然后自己也做了一个相关的项目加深了一下
项目中主要是涉及EventBus的注册 以及发送
当然还有就是对于普通事件和粘性事件应用场景的思考以及实现
参考博客
https://www.jianshu.com/p/cdfc4c8e4ed9
测试代码
https://github.com/LidongWen/EventBusWenld

Mehr lesen

安卓跨进程间通讯的研究

最近听了一次网易课堂的关于安卓跨进程通讯的公开课.整理了一下发现其实主要是Hermes框架的研究
先说一下他的使用场景:该框架设计的初衷是为了解决插件化开发过程中关于
主从进程通讯困难的问题.有别于传统的AIDL的棘手实现.
分为两种: 一种是同一APP多个进程间通讯,还有一种是多个APP之间多个进程间通讯
当然本人理解更常见的应用常见还是第一种,比如主进程,下载进程,推送进程间进行通讯
第一种实现起来比较简单,传统的AIDL也可以进行实现
也可以使用他推荐的框架
自己实现测试的Demo地址
https://github.com/tianyao106/Hermes

Mehr lesen

安卓性能优化工具

leackCanary:内存泄漏检测工具
blockCanary:ANR检测工具

leakCanary实现原理:
(1) 监测Activity 的生命周期的 onDestroy() 的调用。
(2) 当某个 Activity 的 onDestroy() 调用后,便对这个 activity 创建一个带 ReferenceQueue 的弱引用,并且给这个弱引用创建了一个 key 保存在 retainedKeys 中。
(3) 在 Android 的 Framework 中,当一个 Activity 被 destroy 后一般会产生一次 gc,并且还会产生一个 idle。
(4) 如果这个 activity 可以被回收,那么弱引用就会被添加到 ReferenceQueue 中。
(5) 等待主线程进入 idle后,通过一次遍历,在 ReferenceQueue 中的弱引用所对应的 key 将从 retainedKeys 中移除,说明其没有内存泄漏。
(6) 如果 activity 没有被回收,先强制进行一次 gc,再来检查,如果 key 还存在 retainedKeys 中,说明 activity 不可回收,同时也说明了出现了内存泄漏。

Mehr lesen

LRU算法的研究

参考LRU的四种写法
https://blog.csdn.net/elricboa/article/details/78847305

Mehr lesen

2018总结之Gradle

一方面通过对Gradle3.0的快速学习,对于Grovy语法有可了一个简单的学习
其实kotlin也可以实现Gradle的脚本编写,Gradle官方也是支持的
话说回来Grovy这门语言类似于java,
java具有的一些特性在Grovy身上也可以看到
java是一门面向对象的语言,而Grovy既是一门面向对象的语言,又是一门面向过程的语言.但是写法又简单一些
对于Gradle生命周期
初始化,加载,build的task的构建
当然安卓重新写了安卓插件,可以方便我们使用其中的一些属性
当时有时候我们可以自定义一些属性如版本号,指定source文件的地址来快速编译工程

Mehr lesen