2013年9月-忙,真忙,累,真累

9月甚是忙碌,太多事情、工作需要处理,以至于10月初的国庆节也没有办法腾出时间写一下9月的流水帐。

照顾家人是这个月的主题,工作和其他事情都暂时放一边了。没什么比家人的健康更重要的了,更好的工作,更高的报酬,也只是为了让家人过得更好一点而已。

因为以上的原因,工作耽误了,恰好公司又进入产品开发的繁忙期,所以国庆都是在照顾家人和工作中度过。压力稍大,幸好事情都在向好的方面发展,家人的身体在我的照顾下慢慢恢复,而工作任务的核心功能也完成了大体的框架,心情可以稍微放松。

9月在忙碌,焦虑,压抑中度过,感觉生活中的麻烦事总是一件一件接踵而来,而且一环扣一环,但好歹事情在一步一步的好转。最近总是在念叨一句话:“人无远虑,必有近忧”。也许,应该好好计划将来的生活,让生活更加有条理,更加顺利。

学习方面,对UML有了初步的认识,接下来就是深入理解。UML软件准备从 national rose 转向 enterprise architect,前者是一代经典,但是最新的版本停留在 2003 版,功能老旧,而且有些地方很不人性化,后者是现在的主流推荐的软件,功能强大,使用了一下,正向、逆向工程都甚是强大,要好好掌握。另外随着工作对 java 的接触越来越多,感觉要系统地学习一下 java 了,初步打算好好看看入门书籍,再看看 effective java 这本传说中的经典。

android.graphics.Path 的序列化

序列化 (Serialization) 的相关知识可以参考相关的百科,这里只要是学习 android.graphics.Path 的序列化。

工作中有需求要保存绘制的 paths, 这个时候就需要用到对象的序列化的功能,但是 Android 上没有对 Path 做序列化的工作,所以只能自己进行序列化了。

Path 类序列化的原理就是通过将 path 绘制的每一个点都保存下来,需要还原的时候就进行反序列化,再通过这些保存的点重新绘制 path。

实例1:

继承 android.graphics.Path 类,重写 moveTo, lineTo 等方法,记录下 path 绘制的每一点的坐标数据;反序列化的时候调用 “drawThisPath” 重绘 path。

相关代码:

public class CustomPath extends Path implements Serializable {

private static final long serialVersionUID = -5974912367682897467L;

private ArrayList<PathAction> actions = new ArrayList<CustomPath.PathAction>();

private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{
    in.defaultReadObject();
    drawThisPath();
}

@Override
public void moveTo(float x, float y) {
    actions.add(new ActionMove(x, y));
    super.moveTo(x, y);
}

@Override
public void lineTo(float x, float y){
    actions.add(new ActionLine(x, y));
    super.lineTo(x, y);
}

private void drawThisPath(){
    for(PathAction p : actions){
        if(p.getType().equals(PathActionType.MOVE_TO)){
            super.moveTo(p.getX(), p.getY());
        } else if(p.getType().equals(PathActionType.LINE_TO)){
            super.lineTo(p.getX(), p.getY());
        }
    }
}

public interface PathAction {
    public enum PathActionType {LINE_TO,MOVE_TO};
    public PathActionType getType();
    public float getX();
    public float getY();
}

public class ActionMove implements PathAction, Serializable{
    private static final long serialVersionUID = -7198142191254133295L;

    private float x,y;

    public ActionMove(float x, float y){
        this.x = x;
        this.y = y;
    }

    @Override
    public PathActionType getType() {
        return PathActionType.MOVE_TO;
    }

    @Override
    public float getX() {
        return x;
    }

    @Override
    public float getY() {
        return y;
    }

}

public class ActionLine implements PathAction, Serializable{
    private static final long serialVersionUID = 8307137961494172589L;

    private float x,y;

    public ActionLine(float x, float y){
        this.x = x;
        this.y = y;
    }

    @Override
    public PathActionType getType() {
        return PathActionType.LINE_TO;
    }

    @Override
    public float getX() {
        return x;
    }

    @Override
    public float getY() {
        return y;
    }

}
}

实例2:

创建 PathInfo 类,方法 lineStart, lineMove, lineEnd 专门用来保存 path 绘制的每一个点的坐标数据;反序列化的时候重绘 path。原理跟实例1差不多。

源码下载

在 stackoverflow 回答问题,被外国友人吐槽语法

在 stackoverflow 上回答了一个关于 FileLock 在 Android 上的用法的问题,尽管我已经有所注意,而且只是简单的几句话,没想到还是出现了语法问题。被外国友人吐槽语法,无地自容啊。

语法知识都还给英语老师了。本来以为自己虽然是哑巴英语,但是好歹能读能写,现在写也成问题了。学习一门语言,周围环境真的很重要,平时学了多少单词,多少语法,实际上找个实践的机会都没有。工作生活都是用普通话,我现在讲广东话都有点生疏了。

不说了,上图纪念。好好学习英语,积极实践,错得越多,学得越多。

如图,红色是被修正的错误:

grammer-error

Android adb offline 的解决方案

之前在 Android adb 网络连接 中总结了一次 adb 的网络连接,而最近工作中遇到 Android 设备连接 adb 的时候出现 offline 的提示,无法正常连接上设备,这个情况应该如何解决呢?

这里总结一下解决方案:

  1. 重新插拔 USB 线
  2. 换一个 USB 口,有些 PC 的 USB 口不都是一样的;或者换一根 USB 线,低质量的 USB 线缆可能会引起这个问题
  3. 取消 adb 调试模式,再重新勾选
  4. 在 eclipse 的 DDMS 模式下点击 “reset adb”
  5. 在 PC 端重启 adb。adb kill-server 然后 adb start-server
  6. 重启 PC手机,不行的话再试几次
  7. 升级 android SDK,对于开发者来说,一般都是系统与 adb 工具版本不一致引起的。例如我的 Nexus 7 升级到 Android 4.3之后,只能通过升级 Android SDK 来解决这个问题
  8. 将xx手机助手之类的相关进程杀掉就正常了(感谢“梁c”的补充)。xx助手之类的也会将 adb 进程锁定,导致无法正常连接 adb.

如果这个能帮到你,请留言告诉我。