精华内容
下载资源
问答
  • Android框架结构直接上图:由上图,我们可以看出Android系统架构由5部分组成,分别是:Linux Kernel(linux内核)、Android Runtime(运行时环境)、Libraries(类库)、Application Framework(应用框架)、Applications...

    Android框架结构直接上图:

    由上图,我们可以看出Android系统架构由5部分组成,

    分别是:Linux Kernel(linux内核)、Android Runtime(运行时环境)、Libraries(类库)、Application Framework(应用框架)、Applications(应用)。

    1.1、Linux KernelAndroid基于Linux 2.6提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。

    如果你学过计算机网络知道OSI/RM,就会知道分层的好处就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化不会影响到上层。也就是说各层各司其职,各层提供固定的SAP(Service Access Point),专业点可以说是高内聚、低耦合。

    如果你只是做应用开发,就不需要深入了解Linux Kernel层。

    1.2、Android RuntimeAndroid包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。Dalvik虚拟机设计成,在一个设备可以高效地运行多个虚拟机。Dalvik虚拟机可执行文件格式是.dex,dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。

    大多数虚拟机包括JVM都是基于栈的,而Dalvik虚拟机则是基于寄存器的。dx 是一套工具,可以? Java .class 转换成 .dex 格式。一个dex文件通常会有多个.class。由于dex有?r必须进行最佳化,会使文件大小增加1-4倍,以ODEX结尾。(注意,.class转换成.dex文件的过程中,android是会对其进行优化的,以让其更适应小内存环境)

    Dalvik虚拟机依赖于Linux 内核提供基本功能,如线程和底层内存管理。

    1.3、LibrariesAndroid包含一个C/C++库的集合,供Android系统的各个组件使用。这些功能通过Android的应用程序框架(application framework)暴露给开发者。下面列出一些核心库:

    (1)系统C库——标准C系统库(libc)的BSD衍生,调整为基于嵌入式Linux设备

    (2)媒体库——基于PacketVideo的OpenCORE。这些库支持播放和录制许多流行的音频和视频格式,以及静态图像文件,包括MPEG4、 H.264、 MP3、 AAC、 AMR、JPG、 PNG

    (3)界面管理——管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层

    (4)LibWebCore——新式的Web浏览器引擎,驱动Android 浏览器和内嵌的web视图

    (5)SGL——基本的2D图形引擎

    (6)3D库——基于OpenGL ES 1.0 APIs的实现。库使用硬件3D加速或包含高度优化的3D软件光栅

    (7)FreeType ——位图和矢量字体渲染

    SQLite ——所有应用程序都可以使用的强大而轻量级的关系数据库引擎

    1.4、Application Framework通过提供开放的开发平台,Android使开发者能够编制极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等,很多很多。

    开发者可以完全使用核心应用程序所使用的框架APIs。应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。这一机制允许用户替换组件。

    所有的应用程序其实是一组服务和系统,包括:

    (1)视图(View)——丰富的、可扩展的视图集合,可用于构建一个应用程序。包括包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器

    (2)内容提供者(Content Providers)——使应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据

    (3)资源管理器(Resource Manager)——提供访问非代码资源,如本地化字符串、图形和布局文件

    (4)通知管理器(Notification Manager)——使所有的应用程序能够在状态栏显示自定义警告

    (5)活动管理器(Activity Manager)——管理应用程序生命周期,提供通用的导航回退功能

    1.5、ApplicationsAndroid装配一个核心应用程序集合,包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置。所有应用程序都是用Java编程语言写的。更加丰富的应用程序有待我们去开发!

    一般项目的目录结构以及简要说明我们这里的例子如图所示:

    src文件夹,顾名思义,就是存放java源代码的地方。

    例如我们的代码如下

    package cn.com.android.phone;

    import android.app.Activity;

    import android.content.Intent;

    import android.net.Uri;

    import android.os.Bundle;

    import android.view.View;

    import android.view.View.OnClickListener;

    import android.widget.Button;

    import android.widget.EditText;

    public class PhoneCaller extends Activity {

    private EditText editText;

    @Override

    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    editText = (EditText) findViewById(R.id.editText);

    Button button = (Button) findViewById(R.id.myButton);

    button.setOnClickListener(new OnClickListener(){

    public void onClick(View v) {

    String number = editText.getText().toString();

    // 声明打电话的意图

    Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+number));

    // 将意图传递给操作系统

    PhoneCaller.this.startActivity(intent);

    }

    });

    }

    }

    我们的类继承了Activity这个类。一般我们都会实现其中的onCreate方法和onPause方法

    1.onCreate方法

    该方法主要用于初始化我们的Activity。当用户通过请求和我们交互的时候,我们就通过Activity做出相应的处理。Activity从功能上说,比较像struts中的action.是系统和用户交互的一个接口。

    2.onPause方法

    该方法在当你的Activity被销毁前执行的方法,一般用来进行数据的实例化。(Activity被销毁的原因有很多种,比如人为的,或者系统内存不足时等等)。

    3.gen文件夹

    gen文件夹,主要包含一个R.java文件,这个文件是由系统自动维护的,不允许人为的修改,否则将会出现很多让你郁闷的错误。

    R.java是一个android资源的索引文件,里面定义了大量的静态内部类和静态常量,静态类的名称都和res文件夹下的文件夹一一对应的。如图

    既然都是索引文件,那么该文件的作用和数据库中索引作用肯定也是差不多。它可以帮助我们快速的定位文件,此外,编译器还会检查R.java中定义的资源是否被使用了,如果没有被使用,那么打成安装包的时候,会自动过滤掉那些没被使用的资源,这样可以大大的节约空间。

    (在强调一遍,没事不要瞎改R.java文件)

    4.Android 2.2文件夹

    没什么可说的,一个基础jar包。

    5.asset文件夹

    该文件夹下通常会存放一些资源文件,例如mp3/视频文件等等。

    这个文件被称为原生文件夹,意思就是存放在这里的文件在打包成安装包时,会原样打包,不进行压缩等各种处理。这和res文件夹下的文件是不一样的,res下的资源文件会进行压缩处理的。主要的目的,实际上还是为了节约空间。

    6.res文件夹

    主要有三个子文件夹,drawable_?dpi、layout、values

    drawable_?dpi:很多人疑问为什么这个文件夹下会分出来三个子文件夹,drawable_hdpi高分辨率、drawable_ldpi低分辨率、drawable_mdpi一般分辨率,实际上这和我们在asset中提到的文件优化压缩有关,android会对三个文件夹下的文件使用不同的压缩优化算法。这样就既保证了我们对某些图片较高分辨率的要求,也保证了这些资源不会占用太多的空间。

    layout存放布局文件。包括主布局文件和一般的组件布局文件。

    values下可以存放很多.xml文件,例如arrays.xml、colors.xml、dimens.xml、styles.xml,当然这些xml文件的名称都是随意取得。

    7.AndroidManifest.xml    也没什么可说的,安卓项目都带~列出程序的组件和一些需要交互的东西。

    8.default.properties

    记录了项目运行的环境信息,例如android的版本要求等。

    项目的总配置文件,记录应用中所使用的各种组件。这个文件列出了应用程序所提供的功能,在这个文件中,你可以指定应用程序使用到的服务(如电话服务、互联网服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity。AndroidManifest.xml将包含如下设置:application permissions、Activities、intent filters等。

    展开全文
  • Android系统框架结构

    千次阅读 2018-08-31 14:27:25
    Android系统到底是什么样子的?app为什么能够在Android系统中运行,怎样运行的。 下图是官方标准的Android系统架构图: (蓝色:java程序,java代码编写;黄色:运行JAVA程序而实现的虚拟机;绿色:C/C++语言...

    Android系统到底是什么样子的?app为什么能够在Android系统中运行,怎样运行的。

    下图是官方标准的Android系统架构图:

    (蓝色:java程序,java代码编写;黄色:运行JAVA程序而实现的虚拟机;绿色:C/C++语言编写的程序库;红色:linux内核+driver)

    由上图我们知道Android系统分为四层:

    1、Applications(应用程序层):就是我们的app层,各种app。

    2、Framework(应用程序架构层):提供开发Android应用程序所需的一系列类库,使开发人员可以进行快速的应用程序开发。Activity、Service、Notification等等都是framework提供给我们的。

    应用程序框架层类库名称                                                      功能
    活动管理器(Activity Mananger)管理各个应用程序生命周期并提供常用的导航回退功能,为所有程序的窗口提供交互的接口
    窗口管理器(Window Manager)对所有开启的窗口程序进行管理
    内容提供器(Content Provider)提供一个应用程序访问另一个应用程序数据的功能,或者实现应用程序之间的数据共享
    视图系统(View System)创建应用程序的基本组件,包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons),还有可嵌入的web浏览器。
    通知管理器(Notification Manager)使应用程序可以在状态栏中显示自定义的客户提示信息
    包管理器(Package Manager)对应用程序进行管理,提供的功能诸如安装应用程序,卸载应用程序,查询相关权限信息等。
    资源管理器(Resource Manager)提供各种非代码资源供应用程序使用,如本地化字符串,图片,音频等
    位置管理器(Location Manager)提供位置服务
    电话管理器(Telephony Manager)管理所有的移动设备功能
    XMPP服务是Google在线即时交流软件中一个通用的进程,提供后台推送服务

    我们可以称Framework层才真正是Java语言实现的层,在这层里定义的API都是用Java语言编写。但是又因为它包含了JNI的方法,JNI用C/C++编写接口,根据函数表查询调用核心库层里的底层方法,最终访问到Linux内核。那么Framework层的作用就有2个。

    1.用Java语言编写一些规范化的模块封装成框架,供APP层开发者调用开发出具有特殊业务的手机应用。

    2.用Java Native Interface调用core lib层的本地方法,JNI的库是在Dalvik虚拟机启动时加载进去的,Dalvik会直接去寻址这个JNI方法,然后去调用。

    3、Libraries(系统运行时库层):从系统结构图,这层有两个部分。

    3.1、Librares:核心库提供了Java5 se API的多数功能,并提供Android的核心API,如android.os,android.net,android.media等。C/C++库的集合,供Android系统的各个组件使用。这些功能通过Android的应用程序框架(application framework)暴露给开发者。各类库说明如下:

    系统类库名称说明
    Surface Manager执行多个应用程序时,管理子系统的显示,另外也对2D和3D图形提供支持
    Media Framework           基于PacketVideoOpenCore的多媒体库,支持多种常用的音频和视频格式的录制和回放,所支持的编码格式包括MPEG4,MP3,H264,AAC,ARM
    SQLite                                              本地小型关系数据库,Android提供了一些新的SQLite数据库API,以替代传统的耗费资源的JDBC API
    OpenGL|ES                                       基于OpenGL ES 1.0API标准实现的3D跨平台图形库
    FreeType用于显示位图和矢量字体
    WebKitWeb浏览器的软件引擎
    SGL底层的2D图形引擎
    Libc(bionic l  ibc)         继承自BSD的C函数库bionic libc,更适合基于嵌入式Linux的移动设备
    SSL                     安全套接层,是为网络通信提供安全及数据完整性的一种安全协议

    3.2、Android runtime(Core Librares + Dalvik虚拟机):

    Dalvik虚拟机:Dalvik虚拟机是基于apache的java虚拟机(JVM),并被改进以适应低内存,低处理器速度的移动设备环境。Dalvik虚拟机依赖于Linux内核,实现进程隔离与线程调试管理,安全和异常管理,垃圾回收等重要功能。(这里提到java虚拟机,简单叙述一下与Dalvik虚拟机区别:a、java虚拟机运行的是.class,Dalvik虚拟机运行的是.dex;b、java虚拟机基于栈架构。程序在运行时虚拟机需要频繁的从栈上读取或写入数据。Dalvik虚拟机基于寄存器架构,数据的访问通过寄存器间直接传递,这样的访问方式比基于栈方式快的多)

    关于Dalvik虚拟机这是比较低版本4.4以下的了,从android4.4开始就出现了ART(android runtime),用来代替Dalvik的新型运行环境。当然在4.4的正式环境中用的还是Dalvik,真正开始用ART取代Dalvik是从android5.0开始的。在启用ART模式后,系统在安装应用的时候会进行一次预编译,在安装应用程序时会先将代码转换为机器语言存储在本地,这样在运行程序时就不会每次都进行一次编译了,执行效率也大大提升(这里不进行详细讨论)。

    这里还有个重点,在上一层(Framework层:java代码)与这一层(系统运行时库层:C\C++代码)他们又是怎么能调用的呢?这里就涉及到了一个JNI:

    JNI:Java本地接口(Java Native Interface),它是一个协议。用来沟通Java代码和外部的本地C/C++代码, 通过该协议 Java代码可以调用外部的本地代码, 外部的C/C++ 代码可以调用Java代码。

    涉及到JNI的开发,又要说NDK了。

    NDK:Google开发的一套开发和编译工具集, 主要用于Android的JNI开发,是一个用于开发JNI的工具。

    这里涉及到的JNI与DNK不进行详细,只是简单叙述一下感念。

    4、Linux Kernel(linux内核层):提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。作为一个应用层开发者,这一层可以不太深入研究。

    本文参考 《Android开发之旅:android架构》(http://www.cnblogs.com/skynet/archive/2010/04/15/1712924.html).......,方便自己学习:

    展开全文
  • android系统架构图

    2018-08-15 14:49:52
    android系统架构图,设计工作者可查阅————————————————————————————
  • Android系统整体结构图 先是从底层看起:(它是从Linux内核里面抽取出来的一部分) DisplayDriver(显示驱动),CameraDriver(相机驱动),BluetoothDriver(蓝牙驱动) FlashMemoryDriver(闪存驱动),USBDriver(USB驱动),后面...

    Android系统整体结构图

    在这里插入图片描述
    先是从底层看起:(它是从Linux内核里面抽取出来的一部分)
    DisplayDriver(显示驱动),CameraDriver(相机驱动),BluetoothDriver(蓝牙驱动)
    FlashMemoryDriver(闪存驱动),USBDriver(USB驱动),后面的键盘驱动,WIFI驱动,音频驱动,电池驱动
    然后是第二层:
    libraies(类库)
    SurfaceManager(显示管理器),MediaFramework(多媒体框架),SQLite(数据库,小型数据库),OpenGL|ES(3D图库引擎),SGL(2D图库引擎),FreeType(免费开发的文字显示框架),SSL(一个安全协议),WebKit(浏览器内核),libc(c语言核心库)
    Android RunTime(安卓运行时)
    里面有DalvikVirtualMachine(DVM),是从jvm里面改进过来的
    CoreLibraries(Java的核心库)
    然后是第三层(都是Java写的)
    对应:活动管理器,窗口管理器,内容提供者,视图系统,通知管理,包管理,电话管理器,资源管理器,定位管理器,XMPP及时通讯协议
    然后是第四层
    Home(桌面),Contacts(联系人),Phone(电话),Browser(浏览器)

    区别DVM与JVM
    首要差别
    Dalvik: 基于寄存器,编译和运行都会更快些
    JVM: 基于栈, 编译和运行都会慢些

    字节码的区别
    Dalvik: 执行.dex格式的字节码,是对.class文件进行压缩后产生的,文件变小
    JVM: 执行.class格式的字节码

    运行环境的区别    
    Dalvik : 一个应用启动都运行一个单独的虚拟机运行在一个单独的进程中
    JVM: 只能运行一个实例, 也就是所有应用都运行在同一个JVM中

    项目组成结构

    在这里插入图片描述
    在这里插入图片描述
    自动生成的R.java类里面的结构和对应资源的值
    在这里插入图片描述

    在这里插入图片描述

    Activity和应用功能清单配置文件

    package com.example.myapplication;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    
    /**
     * 主界面Activity类,主界面就是点击应用图标启动的界面
     */
    public class MainActivity extends AppCompatActivity
    {
        /**
         * 重写方法onCreate:在当前类(activity)对象创建的时候自动调用
         * 就是回调方法:不是我们自己调用的,是系统在一定条件下自动调用的,
         * 而且在Android中基本是以on开头,这些方法我们不需要调用,一般是重写
         */
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            //先调用父类做一些默认的初始化工作
            super.onCreate(savedInstanceState);
            //设置窗口要显示的内容视图(界面或者布局)
            //其中参数是一个int类型的数值,是要指定布局文件在R所对应的变量
            //这样就可以加载布局文件,让它显示到窗口中
            setContentView(R.layout.activity_main);
        }
    }
    
    
    <?xml version="1.0" encoding="utf-8"?>
    <!--
        package属性:指定当前应用唯一包名,这是应用的标识,不同的应用不一样
        versionName属性:指定应用的版本号
    -->
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.myapplication" >
    
        <!--
            icon:应用的图标
            label:应用的名称
            theme:应用的主题
        -->
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme" >
            <!--
                activity标签:配置我们的Activity类
                name属性:要写全类名的,但是可以省略包名部分
                label属性:界面的标题
            -->
            <activity android:name=".MainActivity" >
                <!--让当前Activity成为主界面Activity-->
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    

    res文件夹

    res文件夹是资源文件夹,里面还分了很多文件夹
    	mipmap-xxxdpi:有一系列的这种文件夹,这些是图片文件夹,
    			而为什么有这么多的文件夹呢?而且每一个文件夹里面存放的图片都是一样的
    			那是因为手机有好有坏,分辨率不一样,分辨率坏的手机显示这一张图片刚刚好
    			而分辨率好的手机再显示这一张图片,那么就会变得小了一点,所以这是为了适配不同分辨率的手机
    
    	layout:界面的布局文件,功能类似HTML
    	values:常量文件夹
    			比如strings.xml里面,就包含固定的字符串,在布局中引用的方式:@string/变量的名称
    

    APK文件

    在这里插入图片描述

    应用打包的过程

    在这里插入图片描述

    Android系统文件目录结构

    Android系统就是类似Linux系统一样,里面的存储结构没有分什么C盘D盘之类的
    就只有一个盘,里面的
    / 代表系统的根目录
    /data/app/ 存放的是第三方的apk文件
    /system/app/ 这是系统中安装好的应用文件
    /data/data/packagename/ 存放的是以应用对应的文件,在应用安装时自动生成,应用卸载的时候自动删除
    /storage/sdcard/ 就是sd卡的文件夹
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    SDK文件目录结构

    /docs
    	是文档的目录,点击index.html就能查看API文档
    /platforms
    	是每一个版本运行所需要的jar包
    /platform-tools
    	包含一些开发工具,比如adb.exe(真机模拟的连接程序),sqlite3.exe
    /samples
    	一些Google提供的样例项目工程
    /source
    	包含系统的部分原码
    /tools
    	包含一些开发工具,比如hierarachyviewer.bat
    

    在这里插入图片描述
    /platforms
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    介绍三个工具

    ADB

    Android 调试桥(Android Debug Bridge)是多种用途的调试工具帮助你管理设备或模拟器的状态,就是类似之前你们一直使用的debug窗口
    常用的命令

    adb shell  //就是进入你的当前运行的Android系统的根目录,使用ls可以查看当前系统的目录文件
    ctrl+c		//退出shell,就是退出系统根目录
    cls			//清屏
    adb install –r apkPath           -push this package file to the device install,就是安装一个apk文件,就是帮手机安装一个应用,-r意思是如果这个应用已经存在就先删除
    

    在这里插入图片描述

    DDMS

    全称是Dalvik Debug Monitor Service
    Android 开发环境中的Dalvik虚拟机调试监控服务
    Eclipse中提供的Android应用开发的调试工具
    它有四个重要的视窗

    Logcat : 查看日志输出:
    File Explorer:查看系统内部文件
    Devices:显示关联的Android设备
    Emulator Control:操作控制关联的Android设备
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    工具类Log

    工具类Log提供了五种的输出的方法,分别是:
    v() //对应Verbose级别,显示全部的信息
    d() //对应debug级别,显示调试信息
    i() //info级别,显示一般信息
    w() //warming级别,显示警告信息
    e() //Error,显示错误信息
    测试

    package com.example.hello;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    
    public class MainActivity extends Activity
    {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState)
    	{
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		Log.i("jane", "执行了Log.i()");
    		Log.e("jane", "执行了Log.e()");
    	}
    }
    
    

    发现LogCat窗口打印的信息超级多,所以使用过滤器进行过滤找到我们想要的信息
    这里我们根据包名来过滤,因为一个应用对应一个包名,所以这里肯定是我们写的这个程序输出的信息
    在这里插入图片描述
    在这里插入图片描述

    下载功能的模拟

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="${relativePackage}.${activityClass}" >
    
        <Button
            android:id="@+id/MainButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_marginTop="35dp"
            android:text="下载" />
    
    </RelativeLayout>
    
    package com.example.hello;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    /*
    Toast: 用来显示短时间提示文本的类
    	static Toast makeText(...) : 创建一个toast对象
    	show(): 显示小提示
    
    R: 应用的资源类
    	R.drawable: 包含所有图片资源标识的内部类
    	R.layout: 包含所有布局资源标识的内部类
    	R.id: 包含所有视图id标识的内部类
    	R.string: 包含所有字符串标识的内部类
    
     */
    public class MainActivity extends Activity
    {
    	//一般会将要操作的组件放在类的变量里面
    	private Button button;
    	@Override
    	protected void onCreate(Bundle savedInstanceState)
    	{
    		super.onCreate(savedInstanceState);
    		//加载布局文件,并在内存中生成对应的视图对象
    		setContentView(R.layout.activity_main);
    		Log.i("jane", "ִ执行了Log.i()");
    		Log.e("jane", "ִ执行了Log.e()");
    		//根据id在内存中查找对应的视图对象
    		button = (Button) findViewById(R.id.MainButton);
    		//给这个button设置监听
    		button.setOnClickListener(new View.OnClickListener()
    		{
    			//这是匿名内部类,下面是点击button的回调方法
    			@Override
    			public void onClick(View v)
    			{
    				/*
    				 * 下面的回调方法主要的操作是:
    				 * 1.显示文本小提示
    				 * 2.将button的内容更新为下载中...
    				 * 首先是Toast需要的参数问题,需要一个Context类
    				 * 经过查看发现Context接口的实现类有Activity,那么我们现在的类就是,
    				 * 所以就将本类传进去,但是这里是匿名内部类,想得到外部类的当前对象,就使用类名.this获得
    				 * 第三个参数是duration,
    				 *      * @param duration How long to display the message.  Either {@link #LENGTH_SHORT} or
                     *      {@link #LENGTH_LONG}
                     * 通过注释可以发现是显示的时间,只有两个取值
    				 */
    				Toast toast = Toast.makeText(MainActivity.this, "开始下载...", Toast.LENGTH_LONG);
    				toast.show();
    				button.setText("下载中...");
    			}
    		});
    	}
    }
    
    

    手机单位相关的概念

    手机的尺寸: 屏幕对角线的长度,单位为英寸(2.54cm)
    手机的分辨率: 屏幕能显示的像素的数量, 一般用在长方向上数量*宽方向上数量来表达
    手机的像素密度: pixels per inch,也称PPi,即每英寸屏幕能显示的像素数,
    像素密度越大,显示画面细节就越丰富。
    计算:像素密度={1+√ [(长度像素数-1) ^ 2 +(宽度像素数-1)^2]}/屏幕尺寸

    DPI: Dots Per Inch(每英寸所打印的点数或线数)的缩写,
    用来表示打印机打印分辨率, 但有时也会用dpi来代指ppi

    手机的密度: Density, 以160ppi为基准, 即像素密度为160时Density为1
    ldpi 120ppi 0.75
    mdpi 160dpi 1.0
    hdpi 240dpi 1.5
    xhdpi 320dpi 2.0

    px: pixels(像素)
    1px就的长度就对应屏幕一个像素点的大小,但是这个单位在不同的手机一个像素点的大小不一样
    比如手机的大小都一样的情况下,如果好的手机在横的方向能放下的像素点有800个
    不好的手机横方向能放下的像素点400个,那么一个像素点在坏的手机的大小是好手机两倍

    dp/dip: device-independent pixels(设备无关像素)
    换算的方法有三种:
    1dp = (dpi / 160) px
    1dp = density px 160–>1px 120–>0.75 320–>2px
    1px = 1/density dp

    sp:scaled pixels(可缩放像素)
    与dp类似,但是可以根据用户的字体大小首选项进行缩放

    注意: Android在运行时会自动将dp/dip/sp为单位的尺寸转换为像素单位的值

    dp与px的比较?
    以px为单位的长度, 在差手机上会变大, 在好手机上变小
    以dp为单位则不会变化

    dp与sp的比较?
    用户可以在系统设置中设置文本的大小
    如果字体大小使用sp为单位, 设置有效果
    如果字体大小使用dp为单位, 设置没有效果

    在布局文件视图的宽高尽量用match_parent/wrap_content
    如果必须指定特定值, 使用dp/dip做单位
    文本大小使用sp做单位

    展开全文
  • 最全的Android源码目录结构详解,介绍android系统结构组成
  • android系统是基于Linux2.6内核的,这一层为android设备的各种硬件提供底层的驱动,如显示驱动,音频驱动,照相机驱动,蓝牙驱动,wi-fi驱动,电源管理。 2系统运行库层 这一层通过一些C/C++库为android系统提供了...

    以下排序由底层到高层

    1. Linux内核层
      android系统是基于Linux2.6内核的,这一层为android设备的各种硬件提供底层的驱动,如显示驱动,音频驱动,照相机驱动,蓝牙驱动,wi-fi驱动,电源管理。

    2. 系统运行库层
      这一层通过一些C/C++库为android系统提供了主要的特征支持,如SQLite库提供了数据库的支持,OpenGL/ES库提供3D绘图的支持,Webkit库提供浏览器内核的支持等。同样在这一层还有Android运行时库,它主要提供了一些核心的库,能够允许开发者使用java语言来编写android应用,另外android运行时库中还包含了Dalvik虚拟机,它使得每一个android应用都能运行在独立的进程中,并且拥有一个自己的Dalvik虚拟机实例,相对于java虚拟机,Dalvik是专门为移动设备定制的,它针对设计内存,cpu性能有限的情况下做了优化

    3. 应用框架层
      这一层主要提供了构建应用程序是可能用到的各种api,android自带的一些核心应用程序就是使用这些api完成的,开发者也可以通过这些api来构建自己的应用,我们学习安装开发就是学习这一层的东西。应为android 是和开源紧密联系的。如果将来想为android出一份力那你基本上就要研究上面两层的东西了。希望你能越走越远。

    4. 应用层
      所有的andriod手机上的应用都是属于这一层,比如自带的联系人,短信等程序,或者是你conggoogle play下载的小游戏,当然包括自己开发的程序

    在这里插入图片描述

    展开全文
  • 安卓系统结构安卓开发目录结构

    万次阅读 2018-09-12 10:04:15
    Android系统架构 1、 Linux内核 安卓的运行并不是凭空而来的,而是依赖于Linux内核之上,因此,内核就显得极为重要,没有了内核就像折翼的鸟儿无法飞翔,内核作为一个抽象层,存在与硬件层和软件层之间进行通信...
  • 系统架构由5部分组成,分别是:Linux Kernel、Android Runtime、Libraries、Application Framework、Applications。第二部分将详细介绍这5个部分。下面自底向上分析各层。Android架构1、Linux...
  • Andorid基础 Android系统层次框架结构

    万次阅读 2016-10-06 14:45:04
    Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA的application framework之上。 Android主要应用于ARM平台,...
  • 配套系列教学视频链接:...本章节重点介绍AOSP下载后的Android10.0源码目录结构, 方便大家对Android源码有一个总体的认识。 一, 顶层目录 目录名 说明 art/ Anroid RunTime(A.
  • Android系统的WIFI模块结构

    千次阅读 2020-09-16 16:59:02
    Android系统的WIFI结构 应用 packages\apps\Settings\res\xml\wifi_configure_settings.xml packages\apps\Settings\res\values\arrays.xml packages\apps\Settings\res\values\strings.xml packages\apps\...
  • Android系统四层体系结构详解

    万次阅读 多人点赞 2016-07-01 16:07:43
    Android会同一系列核心应用程序包一起发布,该应用程序包包括客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。 什么?这你已经知道了。那么你知道这些应用...
  • android系统体系结构

    千次阅读 2012-08-12 18:01:18
    Android 是google公司针对手机开发的一个平台,并公布了其中大部分代码,其大部分应用程序都是用JAVA开发的,毕竟它是商业性的产品嘛,有所保留也是理所 当然的。对于搞嵌入式linux开发的人来说我们...android系统
  • Android系统框架四层结构

    千次阅读 2019-02-22 15:26:28
    Google官方提供的Android系统的四层架构图 从上到下进行简单介绍:   一、应用层 Applications:应用层由运行在Android设备上的所有应用构成,包括预装的系统应用和自己安装的第三方应用。大部分是由Java语言...
  • Android有四层体系结构,有上到下分别是应用层,应用框架层,开源库层,linux内核层。android运行时是由上往下调用,一层调用一层。 应用层:自己写的代码是放在应用层,我的理解是在应用层显示你写好的app。 应用...
  • Android源代码结构

    千次阅读 2019-06-03 16:49:40
    Android源代码结构: Google提供的Android包含了原始Android的目标机代码,主机编译工具、仿真环境,代码包经过解压缩后,第一级别的目录和文件如下所示: . |-- Makefile(全局的Makefile) |-- bionic(Bionic含义...
  • 1、4 Android应用程序介绍,学习目标,掌握Android的体系结构 掌握Android应用文件的组成结构 掌握Android应用的逻辑组成,Android体系结构介绍,Android作为一个移动设备的开发平台,其软件层次结构包括了一个操作系统...
  • 本篇将介绍关于Android系统知识的分享,有兴趣的朋友可以了解一下!和其它系统一样,Android系统也分了框架。Android系统分为5层,从高到低分别是应用程序层、应用程序框架层、系统运行库层、硬件抽象层和Linux内核...
  • Android系统结构

    千次阅读 2010-07-02 10:39:00
    转自:http://blog.csdn.net/yuanyou/archive/2009/05/18/4194526.aspxAndroid是google公司针对手机开发的一 个平台,并公布了其中大部分代码,其大部分应用程序都是用JAVA开发的,毕竟它...android系统架构和其操作
  • src 目录是源代码目录, 所有允许用户修改的 java 文件和用户自己添加的 ...注意:a) R.java 文件是 ADT 自动生成的文件,包含对 drawable、layout 和 values 目录内的资源的引用指针,Android 程序能够直接通过 ...
  • Android系统架构 五层结构

    万次阅读 2017-06-27 14:09:43
    Android系统架构 五层结构 Android系统架构(由下往上): Linux Kernel HAL Native C/C++ Libraries & Android Runtime Java Framework Applications Android系统架构
  • Android—项目结构

    千次阅读 2019-05-21 21:38:36
    这两天博客更新都在草稿箱里面,...一般常用的项目结构Android模式和Project模式,Android模式是经过as转换过的,不是真实的项目结构,但是便于开发,很容易找到经常用的那几个文件夹。 切换到Project结构模式: ...
  • Android的文件系统结构

    万次阅读 2012-02-11 15:55:28
    从以上的根目录分析来看,Android的根文件系统并非标准的Linux文件系统,所以以后还得仔细分析一下启动过程,才能认识Android系统。 今天要来分析一下 Android 文件 系统 的/system目录的结构。 ...
  • 安卓Andriod网上订餐系统:本设计主要讲述了无线点餐系统的基本功能和基于 Android 平台的软件开发、数据库 的设计方法。设计最终达成了用户登录、点菜管理、送餐管理,收费管理,等点餐系统的基本功能。并且系统...
  • Android系统四层体系架构

    千次阅读 2019-08-09 20:00:48
    Android体系架构分为四层:应用层、应用框架层、库层、...Android开发人员接触最多的就是框架层,该层提供了各种各样的系统API,开发人员通过使用这些API来构建上一层的各种各样的APP。这些API包括且不限于:Acti...
  • Android 系统架构详解

    万次阅读 2019-04-12 14:01:25
    本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解Android系统的核心技术点,带领大家初探Android系统全貌以及内部运作机制。虽然Android系统非常庞大且错综复杂,需要具备全面的技术...
  • Android 操作系统架构

    千次阅读 2020-04-12 06:12:38
    众所周知,Android是谷歌开发的一款基于Linux的开源操作系统,从诞生至今已有10余年,这一路走来Android遇到哪些问题?大版本升级朝着什么方向演进?Android的未来如何?我的公号《Android 技术架构演...
  • Android系统架构图知,Dalvik虚拟机运行在Android的运行时库层。Dalvik作为面向Linux、为嵌入式操作系统设计的虚拟机,主要负责完成对象生命周期管理、堆栈管理、线程管理、安全和异常管理,以及垃圾回收等。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,741
精华内容 21,496
关键字:

安卓系统组成结构