Android开源项目推荐之「网络请求哪家强」(转)

1. 原则

本篇说的网络请求专指 http 请求,在选择一个框架之前,我个人有个习惯,就是我喜欢选择专注的库,其实在软件设计领域有一个原则叫做 「单一职责原则」,跟我所说的「专注」不谋而合,一个库能把一件事做好就很不错了。现如今有很多大而全的库,比如这个库可以网络请求,同时又可以图片加载,又可以数据存储,又可以 View 注解等等,我们使用这种库当然方便了,但是你有没有想过?这样会使得你整个项目对它依赖性太强,万一以后这个库不维护了,或者中间某个模块出问题了,这个影响非常大,而且我一直认为大而全的框架可能某一块都做的不够好,所以我在选择的时候更喜欢专注某一领域的框架。

指针的九条铁律

铁律1:指针是一种数据类型

1)指针也是一种变量,占有内存空间,用来保存内存地址

测试指针变量占有内存空间大小

2)*p操作内存

在指针声明时,*号表示所声明的变量为指针

在指针使用时,*号表示 操作 指针所指向的内存空间中的值

*p相当于通过地址(p变量的值)找到一块内存;然后操作内存

*p放在等号的左边赋值(给内存赋值)

*p放在等号的右边取值(从内存获取值)

C语言中三种拷贝函数的区别

strcpy: 最常用的字符串拷贝函数,但是要注意这个函数不会自己判断源字符串是否比目标空间大,必须要程序员自己检查,否则很容易造成拷贝越界,下面是几个例子:

char *a = "0123456789", *b = "abcdefghijk";
char c[5];

输出: strcpy(c,a)=0123456789 //数组c只有5个字节的空间,但是经过strcpy后a的剩余字符也拷贝过去了,如果c后面是系统程序空间,那就要出问题了。

技术不是全部(转)

摆脱技术性思维

技术人最大的优势就在于思维缜密,考虑事情比较全面,逻辑性较强。产品经理提出一些天马行空的想法时,总能第一时间评估可行性,给出实现方案,让看似缥缈的想法变成现实。

然而这种技术性思维很容易形成一种思维定式,直接导致的结果就是不管任何事,总是 if…else,总是从技术的角度出发去考虑事情。这反而会成为技术人的一个限制,造成思维局限,要知道这世界上的事情并不一定非是即否的,很多时候从技术的角度去思考问题反而会大打折扣。

内存泄露与野指针

内存泄露

也称作“存储渗漏” ,用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。即所谓内存泄漏。

内存泄漏概念

  简单的说就是申请了一块内存空间,使用完毕后没有释放掉。它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃。由程序申请的一块内存,且没有任何一个指针指向它

Android中实现Listview下拉刷新的核心代码解析

private void initHeaderView(){  //初始化headerView

mHeaderView = View.inflate(getContext(), R.layout.refresh_header, null);//获得headerView
this.addHeaderView(mHeaderView);//将headerView加在listView的上面

tvTitle = (TextView) mHeaderView.findViewById(R.id.tv_title);//刷新的提示文字
tvTime = (TextView) mHeaderView.findViewById(R.id.tv_time);//刷新的时间显示
ivArrow = (ImageView) mHeaderView.findViewById(R.id.iv_arr);//下拉箭头
pbProgress = (ProgressBar) mHeaderView.findViewById(R.id.pb_progress);//旋转的进度条
mHeaderView.measure(0, 0);
mHeaderViewHeight = mHeaderView.getMeasuredHeight();//测得headerView的高度

mHeaderView.setPadding(0, -mHeaderViewHeight, 0, 0);// 隐藏头布局
initArrowAnim();// 初始化箭头动画

}
|