最近太忙了,学习android也快有大半个月了,说实在的没写过什么代码,顶多就是学习了一些基础知识吧。怎么说这种方式的机械学习没有获得什么好的成就,因为知识没有使用起来很快就会忘记。
最近在忙着一个项目,由于被上游的厂商坑在一个方案问题上出现了较大的问题,为了解决这个问题最近和老大一直加班加点的工作。在这个过程中通过与其他公司员工的交流和沟通还是学到了不少的知识。
项目主要是在android系统上实现电视的直接播放,在很多人看来很简单的工作我、却遇到了很多的问题。在这个过程中我学习了如何调试android程序,如何通过java进行底层shell脚本的处理,了解了java与底层交互的手段,学习到了采用代理服务器的方式。这些都是在看书和做练习中都无法学习到的技能,通过项目来提升自己真的是一种不错的手段。有时候看似不可能的问题通过尝试总可以解决的。就谈谈最近接触到的一些问题吧.
(1) android调用底层的程序,这种方式可以采用java的exec或者android提供的 ProcessBuilder,这两种方式基本大同小异,但是调用底层的命令首先需要确认是否拥有执行的权限。在非root的手机中很多都无法直接调用底层的程序。采用logcat抓包其实可以发现在android的启动过程中关于IP配置相关的处理其实都是采用shell的方式实现的,这也是复用linux程序的优势。
(2)采用代理的方式实现,在android程序中直接执行shell脚本可能出现各种权限不足的问题,有时候即使获取了权限也不一定执行成功,其实这时通常都是android的一些安全策略导致的,每一个应用程序实际上都是一个用户,这种比喻更加的直接,确实从使用者而言,当前实体的app就是系统本身。那么如何能够让app执行一些超过自身权限的方式呢?其实可以采用代理的方式,直接不行可以间接来,当然这种只适用于能够控制到底层的开发。在底层启动一个拥有root权限的服务(和android的服务不一样),专门接收来自上层的各种调用,然后由该服务器去完成相关的处理,这样就能实现普通权限的app执行root的命令。
(3)开源软件的使用,这次我体会到了开源软件的强大,在项目的实施过程中我们大概使用了超过10款开源软件用于问题的解决,虽然最终只选择了其中的一种方式同时其中可能有很多的坑,但是真的不能不赞叹开源的重要性,有时候多去逛逛一些开源的项目再真正解决问题的过程中就会发现很有帮助。
(4)基础很重要,审美很重要,目前我缺乏这些基础和审美,没有java基础,没有GUI相关设计的基础,这的有时候总觉得写的很丑,很难看。
(5)handler和多线程的使用。多线程优势明显,在android的gui主线程中不执行较费时的处理,只执行显示相关的处理,其他的处理由线程处理,采用handler的方式通告到gui线程执行相关的处理。
阅读(2042) | 评论(0) | 转发(0) |