《App研发录:架构设计、Crash分析和竞品技术分析》章节试读

出版日期:2015-10-21
ISBN:9787111516389
作者:包建强
页数:303页

《App研发录:架构设计、Crash分析和竞品技术分析》的笔记-第71页 - Android经典场景设计

既然GlobalVariables是单例类,那就应该增加synchronized同步块防止多线程并发访问,原文没有考虑到这一点。
public class GlobalVariables implements Serializable, Cloneable {
private static GlobalVariables instance;

private GlobalVariables() {
}
public static GlobalVariables getInstance() {
if (instance == null) {
synchronized (GlobalVariables.this) {
Object object = Utils.restoreObject(CACHE_DIR + TAG);
if (object == null) {
object = new GlobalVariables();
Utils.saveObject(CACHE_DIR + TAG);
instace = object;
}
}
}
return instance;
}
}
这样写才是真正的单例类。

《App研发录:架构设计、Crash分析和竞品技术分析》的笔记-第96页 - Crash异常收集与统计

5.2和5.3章节就是作者自己在自high,这种分析数据库crash信息的基础sql语言毫无意义,也没技术含量,还浪费两个章节的篇幅,无语。
也就是5.1节大概提了一下,在Application的onCreate函数里注册UncaughtExceptionHandler还有些意义。

《App研发录:架构设计、Crash分析和竞品技术分析》的笔记-第159页 - Crash异常分析-数据库被锁定

作者提到:对于多进程App而言,还是需要ContentProvider。其实,ContentProvider也是CS架构,只是Binder封装了SQLiteOpenHelper的一系列操作,将db封装成单例,那ContentProvider操作数据库也是单例的。

《App研发录:架构设计、Crash分析和竞品技术分析》的笔记-第114页 - Crash异常分析

指出两处错误:
1. Comparator:我认为应该是基于快排的产物。
2. compare方法里面,p1和p2应该是d1和d2
还有,其实比较算法可以简化啊,这种简单的升序或者降序,直接:
return d1-d2;
不就可以了。

《App研发录:架构设计、Crash分析和竞品技术分析》的笔记-第232页 - App竞品技术分析

不太清楚竞品分析里干嘛揉入大量IOS的介绍,而且还都是最浅显的基本使用,浪费篇幅,看起来也没啥兴趣。

《App研发录:架构设计、Crash分析和竞品技术分析》的笔记-第89页 - Android命名规范和编码规范

12条:为了节省内存,请使用ArrayList<自定义实体>,而不是HashMap.理由是:HashMap占用的内存多。
不太清除作者为什么会有这种结论,或者作者是否研究过HashMap的源码。
HashMap采用的数据结构是:数组+链表。之所以HashMap的查找时间复杂度是O(1),是因为数组的下标是key的hash值,所以查找速率快。但是,不意味着数据多,HashMap分配的内存就要大。

《App研发录:架构设计、Crash分析和竞品技术分析》的笔记-第174页 - ProGuard技术详解

指出一个ProGuard使用的错误,保留Parcelable序列化的类不被混淆,应该使用
-keepclassmembers class * implements android.os.Parcelable {
static android.os.Parcelable$Creator CREATOR;
}
而不是用-keep

《App研发录:架构设计、Crash分析和竞品技术分析》的笔记-第94页 - Crash异常收集与统计

1. 比较无语,第六章已经介绍了不能在子线程中更新UI,作者还自己搞了个线程,在线程里显示了一个Toast,真bug。
2. 首先实现一个UncaughtExceptionHandler,应该是单例类,示例代码如下:
public class CrashHandler implements UncaughtExceptionHandler {
/** CrashHandler实例 */
private static CrashHanlder mInstance;
/** 系统默认的UncaughtException处理类 */
private Thread.UncaughtExceptionHandler mDefaultHandler;

private CrashHandler(Context context) {
// 保留系统默认处理类,便于自己不处理时进行调用
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
// 设置自己为当前线程的未捕获异常处理类
Thread.setDefaultUncaughtExceptionHandler(this);
}
public static CrashHandler getInstace(Context context) {
if (mInstace == null) {
synchronized(CrashHandler.class) {
if (mInstace == null)
mInstace = new CrashHandler(context);
}
}
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
}
}
在Application中注册:
public class App extends Application{
@Override
public void onCreate() {
super.onCreate();
//注册crashHandler
CrashHandler crashHandler = CrashHandler.getInstance(getApplicationContext());
}
}

《App研发录:架构设计、Crash分析和竞品技术分析》的笔记-第151页 - Crash异常分析

作者说这一章花费了巨大的精力,但是其实很多Exception都是一笔带过,并没有深入讲解。
例如APK动态注册BroadcastReceiver,为什么会出现SecurityException?

《App研发录:架构设计、Crash分析和竞品技术分析》的笔记-开篇题记 - 开篇题记

APP研发录读书学习,感谢豆瓣读书笔记开发者.


 App研发录:架构设计、Crash分析和竞品技术分析下载 更多精彩书评


 

农业基础科学,时尚,美术/书法,绘画,软件工程/开发项目管理,研究生/本专科,爱情/情感,动漫学堂PDF下载,。 PDF下载网 

PDF下载网 @ 2024