上下观古今,起伏千万途。这篇文章主要讲述[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 :只指定需要启动或者触发的组件应满足怎样的条件。
【[Android] 开发第四天】条件使用 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 应用与系统之间交互的效率,提升应用运行速度。
推荐阅读
- unigui web app之title buttons
- Android学习之 换肤功能模块的实现&lt;二&gt;
- unigui web app之菜单
- [Android] 开发第二天
- int android.support.v7.widget.RecyclerView$ViewHolder.mItemViewType' on a null.....
- [Android] 开发第三天
- Android获取控件的宽和高
- Android 完美解决bundle实现页面跳转并保留之前数据+传值
- Android隐藏输入法键盘(hideSoftInputFromInputMethod没有效果)