应用程序的组件
Android应用程序没有唯一的启动入口(如java语言的main()函数入口),一个Android应用程序由多个不同的组件组合而成,组件之间通过Intent来实现通信。所有组件必须在AndroidManifest.xml文件中声明。组件包括Activity 、View、 Intent、 Service、 Notification 、ContentProvider。
举例说明一个Android应用程序当中的两个activity是如何交互的。见下图。
(1)用户通过Activity与应用程序交互,图中步骤1。
(2)我们的应用程序中的Activity通过Intent来向Android平台请求启动另一个能处理打开Email的应用程序,图步步骤2与步骤3。
(3)通过系统当中的AndroidManifest.xml中声明的IntentFilter找到能处理打开Email的应用程序,如图的步骤4和步骤5。
(4)用户与Email应用程序进行交互,步骤6.
(5)Email应用程序通过ContentProvider来使用另一个录音应用程序产生的音频文件,如图中步骤7。
(6)用户播放刚才的音频文件,并返回到了之前我们的应用程序,此时音频文件仍然会继续播放,Service将在后台工作,如图中的步骤8。
注:并不是每个Android应用程序都必须包含这些组件,但是使用的组件需在AndroidManifest.xml文件当中声明。
1 AndroidManifest.xml
此文件是整个Android应用程序的配置文件,它负责把下面的Activity、Service等组件有机地组合在一起。
1.1 Activity
Activity是应用程序的表示层。应用程序中的每个屏幕显示都通过继承和扩展基类Activity来实现。Activity利用View来实现应用程序的GUI(Graphical User Interface,图形用户界面),而我们的手机用户则直接通过GUI和应用程序做交互,如应用程序通过GUI向用户显示信息,用户通过GUI向应用程序发出指令和响应。
一个应用当中可以包含多个Activity,Activity是通过如下代码创建。
public class HelloAndroid extends Activity {//定义应用类,并继承
/**
* 类中的onCreate方法,程序启动时就将运行。
*/
@Override //重写父类方法,注解编程
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
Activity窗口的可见内容是通过View提供,View对象继续于View类。按钮、文本框、滚动条、菜单项等都是View的对象。View通过Activity.setContentView()来设置到Avtivity当中。
1.2 View
可视化控件,用于GUI页面的元素设计。
1.3 Intent
Intent为异步消息激活,用于激活Activity、Service、BoradcastReceiver。 Intent在不同的组件之间传递消息,将一个组件的请求意图传给另一个组件。
1.4 Service
具有较长的生命周期且没用户界面的程序。Service与Activity运行在应用程序进程的主线程中,因此Service不会阻塞其他组件和用户界面。
1.5 Notification
当用户有没有接到的电话的时候,Android顶部状态栏里就会出现一个小图标。提示用户有没有处理的快讯,当拖动状态栏时,可以查看这些快讯。Android给我们提供了NotificationManager来管理这个状态栏。可以很轻松的完成。
如果要添加一个Notification,可以按照以下几个步骤
1:获取NotificationManager:
NotificationManager m_NotificationManager=(NotificationManager)this.getSystemService(NOTIFICATION_SERVICE);
2:定义一个Notification:
Notification m_Notification=new Notification();
3:设置Notification的各种属性:
//设置通知在状态栏显示的图标
m_Notification.icon=R.drawable.icon;
//当我们点击通知时显示的内容
m_Notification.tickerText="Button1 通知内容.....";
通知时发出的默认声音
m_Notification.defaults=Notification.DEFAULT_SOUND;
//设置通知显示的参数
Intent m_Intent=new Intent(NotificationDemo.this,DesActivity.class);
PendingIntent m_PendingIntent=PendingIntent.getActivity(NotificationDemo.this, 0, m_Intent, 0);
m_Notification.setLatestEventInfo(NotificationDemo.this, "Button1", "Button1通知",m_PendingIntent );
//这个可以理解为开始执行这个通知
m_NotificationManager.notify(0,m_Notification);
4:既然可以增加同样我们也可以删除。当然是只是删除你自己增加的。
m_NotificationManager.cancel(0);
这里的0是一个ID号码,和notify第一个参数0一样。
这也就完成了,添加删除工作。
1.6 ContentProvider
能将应用程序特定的数据提供给另一个应用程序使用。数据的存储方式可以是Android文件系统,也可以是SQLite数据库。其它应用程序能对数据进行读写与存储。然而,需要使用数据的应用程序并不是直接调用这组方法,而是通过调用ContentResolver对象的方法来完成。
1.7 BoradcastReceiver
BoradcastReceiver是用户接受广播通知的组件。广播是一种同时通知多个对象的事件通知机制。基自身不实现图形用户界面,但是它可以启动Activity作为响应,或者通过NotificationManager提醒用户。