学习笔记之-Android架构和特性

来源:互联网 发布:linux gz解压命令 编辑:程序博客网 时间:2024/05/22 01:56
  Android系统底层建立在Linux系统之上,采用软件叠层(Software Stack)的方式进行构建。使得层与层之间相互分离,明确各层的分工。保证了层与层之间的低耦合,当下层发生改变时上层应用程序无需改变。

   一,Android系统由五部分组成:

  1, 应用程序层

      Android系统包含系列的用java编写的核心应用程序,包含 联系人,浏览器,短信 ........

  2,应用程序框架

      Android应用程序开发是面向底层的应用程序框架进行的,应用程序框架提供大量Android API 供应用调用。
      应用程序框架除了可作为应用开发的基础外,也是软件复用的手段。任何应用程序都可发布自己的功能模块,供其它应用调用。

  3,函数库

       Android包含一套被不同组件所使用的C/C++库的集合。应用程序可以通过应用程序框架来调用这些库。
       核心库: 系统C库,媒体库,Surface Manager(管理对显示子系统的访问),LibWebCore(浏览器引擎),3D libraries(Open GL),FreeType(位图向量字体显示),SQLite

   4,Android运行时 

        Android运行时包含两个部分: Android核心集库(提供java核心库使用的绝大部分功能)和Dalvik虚拟机(负责运行应用程序)
       (1) 每个Android应用程序运行在单独的Dalvik虚拟机内(每个应用对应一条Dalvik进程)
       (2)Dalvik未完全遵守jvm规范,两者也不兼容。JVM虚拟机运行的java字节码(.class文件),Dalvik运行的是dex(Dalvik Executable)文件,需要通过DX工具将应用程序的所有.class文件编译成.dex文件。
       (3)Dalvik虚拟机非常适合在移动终端上使用,相对于pc或服务器端运行的虚拟机,不需要很快的CPU计算速度和大量的内存空间。
           a,专有的.dex文件减少了.class文件的冗余信息,把所有的.class文件整合到一个文件中,提高了运行性能。DX工具还会对.dex文件进行一些性能的优化 。
           b,大多数虚拟机(包括JVM)都是基于栈的,Dalvik基于寄存器的。具有更好的性能表现,在硬件上的通用性略差。
       (4)Dalvik虚拟机依赖于Linux内核提供的核心功能,如线程和底层内存管理。

   5,  Linux 内核

           Android建立在Linux2.6之上。提供了安全性,内存管理,进程管理,网络协议栈和驱动模型等核心系统服务。


 二, Android Debug Bridge (ADB) 的用法

   adb工具在platform-tools目录下,有以下功能:
   (1)  查看当前运行的模拟器:  adb  -devices
   (2)电脑与手机之间的文件的相互复制:  
              电脑到模拟器   adb push d:/abc.txt    /sdcard/   模拟器到电脑   adb pull /sdcard/mp3.txt   d:/
   (3)启动模拟器的shell窗口:
               打开shell窗口执行 linux命令   adb  shell


三, Android应用的清单文件:AndroidManifest.xml

    Android应用程序的全局描述文件,包含了:
    1,  应用程序的包名,该包名会作为应用的唯一标识。(package的值)
    2,应用程序所包含的组件,如Activity,Service,BroadcastReceiver和Provider等
    3,应用程序兼容的最低版本
    4,应用程序使用系统所需的权限声明
    5,其他应用访问该程序所需的权限声明 
   (应用本身所需的权限 在<manifest />里面添加 <user-permission/>  调用该应用所需的权限在 <activity/>里面添加<user-permission/>)
       

四,Android应用的基本组件介绍

      1,Activity和View:

          (1) Activity是android中负责与用户交互的组件,只能通过setContentView(View)来显示指定的组件。
          (2)View组件是所以UI控件,容器控件的基类,就是用户能实实在在看到的部分。需要放到容器组件中,或者在activity显示出来
       如果应用需要多个用户界面,那么应用将会包含多个Activity,多个Activity组成Activity栈,当前活动的Activty位于栈顶。

     2,  Service : 

            Service通常位于后台运行,没有图形用户界面。一个Service组件被运行起来之后,拥有自己独立的生命周期。
            通常为其他组件提供后台服务或监控其他组件的运行状态。 

     3, BroadcastReceiver : 广播消息接收器

           BroadcastReceiver类似于 监听器。(实现BroadcastReceiver子类,实现onReciver()方法
           普通监听器监听的事件源是程序中的对象,而BroadcastReceiver监听的事件源是Android应用中其他组件。

     4,ContentProvider 

            Android系统为跨应用的数据交换提供了一个标准: ContentProvider(如发送短信时读取联系人里面的数据)
            ContentProvider 与 ContentResolver结合使用。一个应用通过ContentProvider暴露自己的数据,另一个应用程序通过ContentResolver
            来访问数据。
             需要实现: insert(Uri,ContentValues),delete,update,query等方法

    5, Intent 和 IntentFilter
           
           严格来说Intent不是Android应用的组件,但是它是Android应用内不同组件之间的载体。
           Intent可以启动应用另一个Activity,也可以启动一个Service组件,还可以发送一条广播消息触发系统中的BroadcastReciver
           (1)启动Activity: 调用Context的startActivity(Intent intent) 或 startActivityForResult(Intent intent,int requestCode)
           (2)启动Service  :   调用Context的startService(Intent intent) 或 bindService(Intent service,ServiceConnection conn,int flags)
           (3)触发BroadcastReciver:调用Context的sendBroadcast(Intent intent) 或  sendStickyBroadcast(Intent intent) 或 sentOrderedBroadcast(Intent intent, String reciverPermission)

            intent分为显和隐式

 五,Android应用程序签名

       签名的作用:
       (1) 确定发布者的身份。由于应用的开发者可以通过使用相同的包名来替换已经安装的程序,使用签名和避免这种情况发生。
       (2)确保应用的完整性。签名会对应用包中的每个文件进行处理,确保程序包中文件不会被替换。
1 0
原创粉丝点击