移动应用开发
什么是intent?(问答题)
Intent是一个动作的完整描述,包含了动作的产生组件、接收组件和传递的数据信息。Intent为Activity、Service和BroadcastReceiver等组件提供交互能力,将一个组件的数据和动作传递给另一个组件。Intent的一个最常见的用途就是启动Activity和Service;另一个用途是在Android系统上发布广播消息,广播消息可以是接收到特定数据或消息,也可以是手机的信号变化或电池的电量过低等信息。
什么是intent-filter,作用是什么?
Intent过滤器是一种根据Intent中的动作(Action)、类别(Categorie)和数据(Data)等内容,对适合接收该Intent的组件进行匹配和筛选的机制。
Intent过滤器的作用是匹配数据类型、路径和协议,还包括可以用来确定多个匹配项顺序的优先级。每个Intent过滤器可以定义多个标签,程序开发人员可以使用自定义的类别,或使用Android系统提供的类别。
Android的体系结构分成几层?每一层的作用?(问答题)P13
- Android是基于Linux内核的软件平台和操作系统,采用了软件堆层的架构,共分为4层。
- 第一层是Linux内核,提供有操作系统内核管理的底层基础功能;
- 第二层是中间件层,有函数库和Android运行时构成(Android运行时有核心库和ART虚拟机构成,ART虚拟机采用预编译(AOT)技术,在应用程序安装时把程序代码转换成机器语言);
- 第三层是应用程序框架,提供了Android平台基本的管理功能和组件重用机制;
- 第四层是应用程序层,提供一系列核心应用程序。
Android四大组件是什么?每种组件的用途?(Activity,Service,Broadcast receiver,Content provider)P67(问答题,选择题)
- Android系统有4个重要的组件,分别是Activity,Service,Broadcast receiver,Content provider。
- Activity是Android程序的呈现层,显示可视化的用户界面,并接收与用户交互所产生的界面事件,与“窗体”概念相似。
- Service一般用于没有用户界面,但需要长时间在后台运行的应用。
- Broadcast receiver是用来接收并响应广播消息的组件。(不包含任何用户界面,但可以通过启动Activity或者Notification通知用户收到重要消息)
- Content provider是Android系统提供的一种标准的共享数据的机制,应用程序可以通过Content provider访问其他应用程序的私有数据。
Activity生命周期的四种状态P68
- 活动状态,当Activity在用户界面处于最上层,完全能被用户看到,能与用户进行交互,则这个Activity处于活动状态。
- 暂停状态,当Activity在界面上被部分遮挡,该Activity不在处于用户界面的最上层,且不能够与用户进行交互,则这个Activity处于暂停状态。
- 停止状态,当Activity在界面上完全不能被用户看到,也就是说这个Activity被其他Activity全部遮挡,则这个Activity处于停止状态。
- 非活动状态,不处于以上三种状态的Activity则处于非活动状态。
常见的数据存储方式的特点(SharedPreference,文件存储,SQLite各自的特点)
- SharedPreferences是一种轻量级的数据保存方式。通过SharedPreferences开发人员可以将NVP(Name/Value Pair,名称/值对)保存在Android的文件系统中,而且SharedPreferences完全屏蔽了对文件系统的操作过程。开发人员仅通过调用SharedPreferences中的函数就可以实现对NVP的保存和读取。SharedPreferences不仅能够保存数据,还能够实现不同应用程序间的数据共享
- 文件存储:Android使用Linux文件系统,开发人员可以建立和访问程序自身建立的是有文件,也可以访问保存在资源目录中的原始文件和XML文件,还可以将保存在TF卡等外部存储设备中。
- 轻量级数据库SQLite的特点:比传统数据库更适合用于嵌入式系统;占用资源少,运行高效可靠,可移植性强;提供了零配置(zero-configuration)运行模式;支持多种开发语言,C, C++, PHP, Perl, Java, C#,Python, Ruby等
匹配规则P156
- Android系统把所有应用程序包中的Intent过滤器集合在一起,形成一个完整的Intent过滤器列表;
- 在Intent与Intent过滤器进行匹配时,Android系统会将列表中所有Intent过滤器的“动作”和“类别”与Intent进行匹配,没有指定“动作”的Intent过滤器可以匹配任何的Intent,但是没有指定“类别”的Intent过滤器只能匹配没有“类别”的Intent;
- 把Intent数据Uri的每个子部与Intent过滤器的标签中的属性进行匹配;
- 如果Intent过滤器的匹配结果多于一个,则可以根据在标签中定义的优先级标签来对Intent过滤器进行排序,优先级最高的Intent过滤器将被选择。以上每步中不匹配的都将被过滤掉。
如何发送接收广播
-
sendBroadcast发送出去的Intent,对于所有满足条件的BroadcastReceiver都会执行其onReceive方法。但若有多个满足条件的
BroadcastReceiver,其执行onReceive方法的顺序是没有保证的。
-
使用Intent发送广播消息非常简单,只需创建一个Intent,并调用sendBroadcast()函数就可把Intent携带的信息广播出去。
-
但需要注意的是,在构造Intent时必须定义一个全局唯一的字符串,用来标识其要执行的动作通常使用应用程序包的名称。
-
如果要在Intent传递额外数据,可以用Intent的putExtra()方法。
广播接收器重写
创建MyBroadcastReceiver类继承 BroadcastReceiver来重写里面的OnReceiver方法代码如下
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class MyBroadcastReceiver extends BroadcastReceiver {
static final String ACTION="android.intnet.action.BOOT_COMPLETED";
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
if(intent.getAction().equals(ACTION)){
Intent intent1=new Intent(context,MainActivity.class);
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent1);//用来传递消息
}
}
}