任何一个大一点的软件项目,都必须有一个合理的体系结构。软件有哪些功能?这些功能通过哪些技术或者工具来实现?这些功能之间如何联系?怎样实现这些功能才能使整个软件系统达到要求的性能?这些都是一个软件项目在分析、设计初期都必须考虑的问题。
一个软件项目,一定有用户界面部分,有后台部分,可能还有通信部分,数据库部分...。每个部分都需要利用不同的技术或者工具,下面我们面向Android软件项目,谈谈Android软件的一般体系结构,以及体系结构中几个主要部分的常用主要技术。
Android有四大基本组件:Activity,Service,BroadcastReceiver和Content Provider。这四大基本组件本身就提供了一个比较合理的体系结构。一般来讲,Activity主要实现用户界面功能,而Service主要实现非用户界面功能,BroadcastReceiver主要实现广播消息,Content Provider提供数据库服务等功能。其中Activity和Service尤其是每一个软件项目都是必不可少的组件。然而,这些Android组件都采用Java技术,对于一个在手机上运行的、比较复杂的软件系统来说,如果仅仅依靠Java技术,在性能上,特别是速度上,可能就不大让人满意了。不过,Google公司考虑还是很周全的,它为Android 系统提供了另一个技术:JNI。
JNI(Java Native Interface)让软件设计者可以采用C/C++技术来为Android 软件编写程序,这就大大提高了Android 软件的性能。其实,JNI技术的历史比Android的历史悠久多了。我们这里不想讲这个问题,我们要讲的问题是,通过JNI技术,Android软件实际上可以原封不动地大段引用Linux的C/C++语言。这样,以Android的JNI技术作为中介,Linux的C/C++语言可以为Android软件提供强大的支持。所以,一个Android软件项目,其系统结构往往是这样构成的:
●用Activity实现用户界面功能;
●用Service实现不需要界面的后台服务,并且使用更后面的JNI程序;
●JNI使用Linux的C/C++语言,实现线程、加密等等重要的、需要更高性能要求的功能。
这样的Android软件系统结构,与Web项目的三层结构、J2EE项目的MVC模式,有共同的设计思想。但是,Java程序调用JNI程序,或者JNI程序调用Java程序,效率都比较低。因此,这种Android软件系统结构,更适合于Java和C/C++两端独立性都比较强的软件。对于小型Android软件,还是采用由Android基本组件构成的系统比较实际。