Android系统是什么?
Android系统是目前世界上市场占有率最高的移动操作系统,不管你在哪里,都可以看到android手机几乎无处不在。
1. Android系统架构?
Android大致可以分为四层架构:Linuxn内核层、系统运行库层、应用框架层和应用层。
- Linux内核层
Android系统是基于Linux内核的,这一层为Android设备的各种硬件提供了底层的驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、电源管理等等。
- 系统运行库层
这一层通过一些C/C++库来为Android系统提供了主要的特性支持,如SQLite库提供了数据库的支持,OpenGL提供了3D绘图的支持,Webkit库提供了浏览器内核的支持等等。
- 应用框架层
这一层主要提供了构建应用程序时可能用到的各种API,Android自带的一些核心应用就是使用这些API完成的,开发者也可以通过使用这些API来构建自己的应用程序。
- 应用层
所有安装在手机上的应用程序都是属于这一层的,如系统自带的联系人、短信等程序或者你从应用商店下载的程序。
如下图所示:
2.Android应用开发特色
Android系统到底提供了哪些东西,可供我们开发出优秀的应用程序呢?
- 四大组件
Android 系统四大组件分别是活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供器(Content Provider)。其中活动是所有 Android 应用程序的门面, 凡是在应用中你看得到的东西,都是放在活动中的。而服务就比较低调了,你无法看到 它,但它会一直在后台默默地运行,即使用户退出了应用,服务仍然是可以继续运行的。 广播接收器可以允许你的应用接收来自各处的广播消息,比如电话、短信等,当然你的 应用同样也可以向外发出广播消息。内容提供器则为应用程序之间共享数据提供了可 能,比如你想要读取系统电话簿中的联系人,就需要通过内容提供器来实现。
- 丰富的系统控件
- SQLite数据库
- 强大的多媒体
- 地理位置定位
- 传感器
3.分析你的第一个 Android 程序
- src/java
- src/res
- AndroidManifest.xml
这是你整个 Android 项目的配置文件,你在程序中定义的所有四大组件都需要在这个文件里注册。另外还可以在这个文件中给应用程序添加权限声明,也可以重新指定你创建项目时指定的程序最低兼容版本和目标版本。由于这个文件以后会经常用到,我们 用到的时候再做详细说明。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.my_applation"> <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/Theme.My_Applation"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
package com.example.my_applation;import android.os.Bundle; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
<resources> <string name="app_name">My_Applation</string> <string name="hello_world">Hello world!</string> </resources>
4.详解项目中的资源
看到这么多的文件夹不用害怕,其实归纳一下,res 目录就变得非常简单了。所有以 drawable 开头的文件夹都是用来放图片的,所有以 values 开头的文件夹都是用来放字符串的, layout 文件夹是用来放布局文件的,menu 文件夹是用来放菜单文件的。怎么样,是不是突然 感觉清晰了很多?之所以有这么多 drawable 开头的文件夹,其实主要是为了让程序能够兼容更多的设备。在制作程序的时候最好能够给同一张图片提供几个不同分辨率的副本,分别放 在这些文件夹下,然后当程序运行的时候会自动根据当前运行设备分辨率的高低选择加载哪 个文件夹下的图片。当然这只是理想情况,更多的时候美工只会提供给我们一份图片,这时你就把所有图片都放在 drawable-hdpi 文件夹下就好了。
知道了 res 目录下每个文件夹的含义,我们再来看一下如何去使用这些资源吧。比如刚 刚在 strings.xml 中找到的 Hello world!字符串,我们有两种方式可以引用它:
-
在代码中通过 R.string.hello_world 可以获得该字符串的引用;
-
在 XML 中通过@string/hello_world 可以获得该字符串的引用。
基本的语法就是上面两种方式,其中 string 部分是可以替换的,如果是引用的图片资源就可以替换成 drawable,如果是引用的布局文件就可以替换成 layout,以此类推。 HelloWorld 项目的图标就是在 AndroidManifest.xml 中通过 android:icon="@drawable/ic_launcher"来指定的,ic_launcher 这张图片就在 drawable 文件夹下, 如果想要修改项目的图标应该知道怎么办了吧?
5.使用 Android 的日志工具 Log
Android 中的日志工具类是 Log(android.util.Log),这个类中提供了如下几个方法来供我们打印日志。
(1)Log.v()
这个方法用于打印那些最为琐碎的,意义最小的日志信息。对应级别 verbose,是Android 日志里面级别最低的一种。
(2)Log.d()
这个方法用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助 的。对应级别 debug,比 verbose 高一级。
(3)Log.i()
这个方法用于打印一些比较重要的数据,这些数据应该是你非常想看到的,可以帮 你分析用户行为的那种。对应级别 info,比 debug 高一级。
(4)Log.w()
这个方法用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好 去修复一下这些出现警告的地方。对应级别 warn,比 info 高一级。
(5)Log.e()
这个方法用于打印程序中的错误信息,比如程序进入到了 catch 语句当中。当有错 误信息打印出来的时候,一般都代表你的程序出现严重问题了,必须尽快修复。对应级 别 error,比 warn 高一级。 其实很简单,一共就五个方法,当然每个方法还会有不同的重载,但那对你来说肯定不是什么难理解的地方了。我们现在就在 HelloWorld 项目中试一试日志工具好不好用吧。 打开 HelloWorldActivity,在 onCreate()方法中添加一行打印日志的语句,如下所示:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.hello_world_layout); Log.d("HelloWorldActivity", "onCreate execute");
}
Log.d 方法中传入了两个参数,第一个参数是 tag,一般传入当前的类名就好,主要用于 对打印信息进行过滤。第二个参数是 msg,即想要打印的具体的内容。
现在可以重新运行一下 HelloWorld 这个项目了,仍然是右击 HelloWorld 项目→Run As →Android Application。等程序运行完毕,可以看到 LogCat 中打印信息。