AIDL tips

  • 方向:in out 和 inout
  • public是什么意思
  • 序列化
  • exported permission
  • 探测AIDL RPC远端app是否安装正确
  • service leak
  • 更改或者更新接口,远端的反映
public final void writeException(Exception e) {
        int code = 0;
        if (e instanceof SecurityException) {
            code = EX_SECURITY;
        } else if (e instanceof BadParcelableException) {
            code = EX_BAD_PARCELABLE;
        } else if (e instanceof IllegalArgumentException) {
            code = EX_ILLEGAL_ARGUMENT;
        } else if (e instanceof NullPointerException) {
            code = EX_NULL_POINTER;
        } else if (e instanceof IllegalStateException) {
            code = EX_ILLEGAL_STATE;
        }
        writeInt(code);
        StrictMode.clearGatheredViolations();
        if (code == 0) {
            if (e instanceof RuntimeException) {
                throw (RuntimeException) e;
            }
            throw new RuntimeException(e);
        }
        writeString(e.getMessage());
    }

golang tips

  • futex channel本质是带锁的FIFO操作
  • make([]interface{}, 0)和[]interface{}没啥区别
  • gosched发生在channel, map access, malloc, gc, goroutine sleep, syscall
  • atomic
  • cast value.(typeName)
  • runtime.Gosched手动yield调度
  • 单向channel: <-chan
  • range变量+goroutine和闭包结合有bug
  • range可以顺序读取channel
  • playground fake something:http://blog.golang.org/playground
  • 一些坑(error类型是不是nil等)
  • GOLANG STDLIB
  • GOLANG实现的设计模式:http://stackoverflow.com/questions/1673841/examples-of-gof-design-patterns
  • ThreadLocal of golang?

Micloud SDK Tips

  • 如果做成apk,单发的时候会弹另一个apk,会挺蛋疼(所以是否需要也可以对接成jar包那样单发的,像支付宝单发那样的)
  • android有一些私有的api没有root不能调用的,那些是否有替换的办法
  • AIDL使用XxxxServiceResponse序列化,用ErrorCodeToException的mapping做转换
  • OTA怎么做
  • 要给客户端一个Helper示例,那个是配套使用的
  • 分为core模块和每个业务具体的interface集合,这样适应变化(因为aidl只能append,然后讨论下是否需要预留)
  • 怎样标记deprecate可以在这个Helper示例里面用,Helper也是
  • 不要懒惰,要多看多问多讨论多学多想可能的问题
  • 错误处理等一定要靠谱
  • threadsafe看怎样做,是否需要context或者sessionId之类的东西
  • Test怎样做
  • 一定要靠谱!
  • 一定要面向变化
  • 思维不能局限
  • Errors:
  • 1. BAD_REQUEST(400), UNAUTHORIZED(401), FORBIDDEN(403), NOT_ACCEPTABLE(406), 5xx
  • 2. IOException:  其他情况
  • 3. 200成功