[Android] 开发第四天

Android 应用的基本组件介绍:

Activity 和 View

Activity 是 Android 应用中负责与用户交互的组件。

View 是所有 UI 控件、容器控件的基类,View 组件就是  Android 应用中用户实实在在看到的部分。

View 组件需要放到容器组件中,或者使用 Activity 调用 setContentView() 将它显示出来。

setContentView() 方法可以接受一个 View 对象作为参数,或者使用资源ID。

Activity 为 Android 应用提供了可视化用户界面,如果该 Android 应用需要多个用户界面,就将包含多个 Activity,多个 Activity 组成 Activity 栈,当前活动的 Activity 位于栈顶。

Activity 可以使用 setTheme(int resid) 方法来设置其窗口的风格。

Service

Service 与 Activity 地位是并列的,它也代表一个单独的 Android 组件。它与 Activity 区别在于,Service 通常位于后台运行,它一般不需要与用户交互,因此 Service 组件没有图形用户界面。

BroadcastReceiver

BroadcastReceiver 是 Android 应用中的另一重要组件,它代表广播消息接收器。

作为监听器,它与普通事件监听器的不同是:它监听的事件源是 Android 应用中的其它组件,而不是程序中的对象。

使用 BroadcastReceiver 组件接收广播消息比较简单,开发者只要实现自己的 BroadcastReceiver 子类,并重写 onReceive(Context context,Intent intent) 方法即可。

当其它组件通过 sendBroadcast()、sendStickyBroadcast() 或 sendOrderedBroadcast() 方法发送广播消息时,如该 BroadcastReceiver 也对该消息”感兴趣“(通过 IntentFilter 配置),

BroadcastReceiver 的 onReceive(Context context, Intent intent) 方法将会被触发。

BroadcastReceiver 注册方法:

Java 中可以使用 Context.registReceiver()

xml 可以在 AndroidManifest.xml 中使用 <receiver ... /> 元素完成注册。

ContentProvider

对于 Android 应用而言,它们必须相互独立,各自运行在自己的 Dalvik 虚拟机实例中,如果这些 Android 应用之间需要实现实时的数据交换,就需要实现自己的 ContentProvider 。

常用场景:我们的程序要从联系人管理应用中读取联系人数据。

要实现 ContentProvider 时,需要实现如下抽象方法:

insert(Uri, ContentValues) 向 ContentProvider 插入数据。

delete(Uri, ContentValues) 删除 ContentProvider 中指定数据。

update(Uri, ContentValues, String, String[]) 更新 ContentProvider 中指定数据。

query(Uri, String[], String, String[], string) 从 ContentProvider 中查询数据。

通常与 ContentProvider 结合使用的是 ContentResolver,一个程序使用 ContentProvider 暴露自己的数据,另一个程序使用 ContentResolver 来访问数据。

Intent  和 IntentFilter

Intent 不是 Android 中的组件,但它经常用到,它是 Android 应用中不同组件之间通信的载体。当 Android 运行时需要连接不同的组件时,就需要使用 Intent 。

Intent 可以启动应用中另一个 Activity ,也可以启动 Service 组件,还可以发送一条广播消息来触发系统中的 BroadcastReceiver 。

也就是说 Activity 、Service 、BroadcastReceiver 三种组件之间的通信都以 Intent 为载体。

Intent 有两类:

显示 Intent :明确指定需要启动或触发的组件的类名。

隐式 Intent :只指定需要启动或者触发的组件应满足怎样的条件。

条件使用 IntentFilter 来实现。


Android 项目以它的包名作为唯一标识,如果在同一手机上安装两个包名相同的应用,后面安装的应用就可以覆盖前面安装的应用。
签名用于避免不同公司应用互相覆盖、保护程序完整性。
生成签名的命令行: 找到 jdk/bin 下的 keytool.exe 工具。
1. 创建 keystore 库:
   keytool -genkeypair -alias key.keystore -keyalg RSA -validity 400 -keystore key.keystore
-genkeypair 指定生成数字证书。
-alias 指定生成证书的别名。
-keyalg 指定数据证书的算法。
-validity 指定证书的有效期。
-keystore 指定证书存储路径。
输入命令后会提示填写一些数据证书的详细信息,证书创建成功后,只要在证书有效期内,可以一直重复使用。
 
2. 使用 jarsigner 对未签名的 apk 安装包进行签名。(略)
3. 使用 zipalign.exe 工具优化 apk 安装包。
  zipalign -f -v 4 key.apk key_zip.apk
-f 强制覆盖已有文件
-v 生成详细输出
4 指定档案整理所基于的字节数,通常指定为 4 ,也就是基于 32 位进行整理。
key.apk key_zip.apk  整理前后的 apk。
zipalign.exe 是Android 自带的一个档案整理工具,可用于优化 APK 安装包,提升 Android 应用与系统之间交互的效率,提升应用运行速度。
原文地址:https://www.cnblogs.com/z5337/p/7181945.html