• [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 应用与系统之间交互的效率,提升应用运行速度。
  • 相关阅读:
    微软铁杆兄弟诺基亚开发基于Linux的手机
    Linux目录递归改变文件名大小写
    boa-0.94.13 移植到 ARM
    LINUX如何设置只允许SSH登陆?
    9.4. 使用 I/O 内存
    I-O 端口和 I-O 内存
    Linux 的虚拟文件系统--各结构之间的联系
    Linux 系统调用
    【poj2528】Mayor's posters
    【poj3225】Help with Intervals
  • 原文地址:https://www.cnblogs.com/z5337/p/7181945.html
Copyright © 2020-2023  润新知