随笔 - 750  文章 - 1  评论 - 107  阅读 - 34万

[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 应用与系统之间交互的效率,提升应用运行速度。
posted on   z5337  阅读(152)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示