梳理毕业后所做的开发工作,最先是高通BREW平台的功能机开发,需要一些ARM等嵌入式的知识;接着做C/C++的后台应用程序开发;由于有BREW功能机的开发经历,后面又切到了Android的APP开发(主要做上层业务+JNI),将音视频类APP的前后端能拉通实现(C/C++的后端);期间还自学了iOS的APP开发,所以整个知识面的广度是有的;从编程语言选择上,在工作过程中主要根据业务场景的需要,选择合适的编程语言实现,所以也接触了包括Shell/Python/PHP/Javascript等脚本语言;从业务的技术面上来说,音视频的业务会更熟悉些,毕竟这行包括了复杂的流媒体、VOIP和网络传输的技术,非一两年的浸润能熟悉的;上帝说,凡有的,还要给他,叫他丰足有余;凡没有的,就连他有的,也要取去,所以思索再三,首要做的事情就是对原来涉猎的技术点和业务进一步加强,就如同呱牛笔记的顶层分类一样,从如上的几个方向,从底层原理和架构的层面,加强底层知识和逻辑。
首先找了几本Android开发的书,其中一本是《Android_应用框架原理与程序开发_高焕堂》,网上有电子版,刚开始接触Android APP的时候看过,其中关于框架的方向控制逻辑思想印象深刻,重新翻出来看,对Android架构的理解还是很有帮助的;
应用程序框架的魅力,反向沟通(IoC,又称为反向控制)正向调用就是APP调用SDK的API,SDK调用APP的实现接口则称为方向调用,Android APP的魅力就是反向沟通,所以才有了生命周期,这对生命周期的理解很关键;
反向沟通的主要实现逻辑是类的继承和多态特性,具体是通过Java的abstract的抽象类来实现;推而广之,所有框架调用使用方的思路都可以简称为反向沟通;
反向框架例图:
其 Java 代码如下:
// VIP.java
package _concrete_classes;
import _abstract_classes.*;
public class VIP extends Customer {
private String tel;
public VIP(String na, String t) { super.setName(na); tel = t; }
public void display() { super.display(); System.out.println("TEL: " + tel); }
}
// Person.java
package _abstract_classes;
public abstract class Person {
protected String name;
public void setName(String na) { name = na; }
public abstract void display();
}
// Customer.java package _abstract_classes;
public class Customer extends Person {
public void display() { System.out.println("Customer: " + super.name); }
}
// Product.java
package _abstract_classes;
public abstract class Product {
protected int pno;
protected Customer cust;
public Product(int no) { pno = no; }
public void soldTo(Customer cobj) { cust = cobj; }
public void inquire() { this.print(); System.out.println("sold to ..."); cust.display(); }
public abstract void print(); }
// TV.java package _concrete_classes;
import _abstract_classes.*;
public class TV extends Product {
private double price;
public TV(int no, double pr) {
super(no);
price = pr;
}
public void print() {
System.out.println("TV No: " + pno);
System.out.println("Price: " + price);
}
}
// JMain.java
import _abstract_classes.;
import _concrete_classes.;
public class JMain {
public static void main(String[] args) {
TV t = new TV(1100, 1800.5);
VIP vp = new VIP("Peter", "666-8899");
t.soldTo(vp);
t.inquire();
}
}
反向沟通的魅力体现在:
0、框架提供预设的行为,代表了默认的动作;
1、主控者是框架,而不是应用程序,框架可以隐藏复杂的业务调用逻辑,简化调用方的程序逻辑;
2、抽象和衍生作为应用框架设计的主要思维方式;
这本书有些历史了,但架构的设计思想是不会过时的,所以看前几章还是很有启发意义的。