Android平台的App可能会受到很多天生的限制,很多在pc不用考虑的问题,在这里需要多加注意,在2年左右的开发实践中,碰到了很多很多问题,大概的列一列,如果对各位程序员朋友有所帮助,倍感欣慰。
1.内存,大概会有一个限制,30M左右,当然这个好像可以改,但面向个人的恐怕很难搞,只能省着点用,尽可能的少加载到内存
2.java,gc,对于流媒体这种需要不停使用内存的应用来说,使用java无疑是找死,最终还是由C,C++,通过jni的方式来实现了内存的自行管理。
原先的问题是,同样的方法来播放音频,例子程序中一切正常,而在App中就不行,究其原因是App中的音频buffer是不停的分配的,导致gc经常介入,一旦gc介入,整个应用就卡主,导致音频的播放越累越慢,最终播放的声音是对方好久好久以前的声音。
java中的gc是个大问题,就像有些大牛们说的那样,成也gc,败也gc啊。作为java程序原来说,无能为力!
3.由于音频的这个gc的问题,很明显的是视频也由C,C++来实现
4.视频的采集方面,网上有很多做法,一种是由Android的好像是MediaRecorder来实现,但是发现它给出的码流无法控制,有的支持H264,有的不支持,有的基本能够实时的给出码流,有的给出的码流大概是2s中给出一次,所以程序拿到的码流是2s中一次,而一次拿到的是之前2s中内的码流,这样无法做到实时,很痛苦。
5.对于Android上编译X264,ffmpeg,那大概也要费一番功夫。中间还设计到arm5,arm7 neon的区别,当然如果不考虑asm,那就不用考虑arm体系结构了,呵呵。不过性能可能会打些折扣,期待着Android机器的性能提升吧。
6.还是要吐槽一下java各种教程,各种文章的不负责任,各种getView()版本的例子,基本都是new各种东西,包括各种clicklistener,导致创建很多垃圾出来,有的时候还会出现点击按钮什么的没有响应的情况,哎!!!或许是java的恶心,或许是java程序员对java的理解不透。反正看《core java》的说法,一方面强调java就是为了简单,一方面又一次又一次的搞出些特殊的语法或者其他来补漏洞,哎!何必呢!还得我们广大的java程序写出的代码有很多陷阱,漏洞!【当然这是站在一个C,C++程序员的角度看问题啦】
7.网络,java的Socket真的不怎么的。用起来总是要这流那流的,还是感觉BSD的那套socket接口好用,当然,速度也会比java的快吧。而且,不是所有的java程序员,都能用好nio的内容的,更何况,selector这东西为了支持退出,还占用一对socket,或者别的,总之多余的系统资源。
8.NullPointerException,大概是这么拼的吧,java到底有没有指针?各位?
暂时想到的是这些,以后想到再继续吧。。。