Android学习读书笔记之应用组件介绍

一.Android应用结构分析
1.res目录说明
1> 在XML文件中使用资源
@<资源对应的内部类的类名>/<资源项的名称>
如@string/app_name

当我们在XML文件中使用标识符时,这些标识符无须使用专门的资源进行定义,直接在XML文档中按如下格式分配标识符即可:
@+id/<标识符代号>
如下: 为一个组件分配标识符:
android:id = “@+id/ok”
接下来如果希望在Java代码中获取该组件,通过调用Activity的findViewById()方法即可实现;
如果希望在XML文件中获取该组件,则可通过引用的方式来引用它,语法如下:
@id/<标识符代号>

2.Android应用的清单文件
AndroidManifest.xml文件是Android项目的系统清单文件。它用于控制Android应用的名称,图标,访问权限等整体属性。除此之外,Android应用的Activity,Service,ContentProvider,BroadcastReceiver这4大组件都需要在该文件中配置。

可以包含如下信息:
1.应用程序的包名,该包名为该应用的唯一标识。
2.应用程序所包含的组件;
3.应用程序兼容的最低版本;
4.应用程序使用系统所需的权限声明;
5.其他程序访问该程序所需的权限声明。

<?xml version="1.0" encoding="utf-8"?>
<!-- 指定Android应用的包名,唯一标识该应用-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	  package="com.example.helloworld"
	  android:versionCode="1"
	  android:versionName="1.0">
	  <!--指定Android应用标签,图标-->
	<application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
		<!--定义Android应用的一个组件:Activity -->
		<activity android:name="HelloWorld"
				  android:label="@string/app_name">
			<intent-filter>
				<!--指定该Activity是程序的入口-->
				<action android:name="android.intent.action.MAIN" />
				<!--指定加载该应用时运行该Activity-->
				<category android:name="android.intent.category.LAUNCHER" />
				<!--声明该应用需要拨打电话的权限-->
				<uses-permission android:name="android.permission.CALL_PHONE" />
			</intent-filter>
		</activity>
	</application>
</manifest>

3.应用程序权限说明
1> 声明运行该应用本身所需要的权限
为<manifest…/>元素添加<uses-permission…/>子元素即可为程序本身声明权限。
例如: 在<manifest…/>元素里添加如下代码:

<!--声明该应用需要拨打电话的权限-->
<uses-permission android:name="android.permission.CALL_PHONE" />

2> 声明调用该应用所需的权限
为应用的各组件元素,如<activity…/>元素添加<uses-permission…/>子元素即可声明调用该程序所需的权限。
例如:在<activity…/>元素里添加如下代码:

<!--声明该应用需要发送短信的权限-->
<uses-permission android:name="android.permission.SEND_SMS" />

在这里插入图片描述
在这里插入图片描述

二.Android应用的基本组件介绍

1.Activity
Acitivity为Android应用提供了可视化用户界面,通过setContentView()方法来指定组件,view组件是所有UI控件,容器控件的基类。
setContentView()接收一个view对象作为参数

//创建一个线性布局管理器
LinearLayout layout = new LinearLayout(this);
//设置该Activity显式layout
setContentView(layout);

setContentView()接收一个布局管理资源的ID作为参数

//设置该Activity显式activity_main.xml文件定义的View
setContentView(R.layout.activity_main);

2.Service
Service组件需要继承Service基类,Service组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。

3.BroadcastReceiver
BroadcastReceiver非常类似于事件编程中的监听器。与普通事件监听器不同的是,普通事件监听器监听的事件源是程序中的对象;而BroadcastReceiver监听的事件源是Android应用中的其他组件。

开发者通过实现自己的BroadcastReceiver子类,并重写onReceive(Context context, Intent intent)方法即可。当其他组件通过sendBroadcast(),sendStickyBroadcast()或sendOrderBroadcast()方法发送广播消息时,如果该BroadcastReceiver也对该消息感兴趣(通过IntentFilter配置),onReceive方法将会被调用。

两种方式注册这个系统级的事件监听器
3.1 在Java代码中通过Context.registReceiver()方法注册BroadcastReceiver。
3.2 在AndroidMainfest.xml文件使用<receiver…/>元素完成注册。

4.ContentProvider
为多个应用程序之间进行数据交换。利用ContentProvider和ContentResolver相结合,前者暴露自己的数据,后者来访问这些数据。

5.Intent和IntentFilter

Intent是Android应用内不同组件之间通信的载体。Intent可以启动应用中另一个Activity,也可以启动一个Service组件,还可以发送一条广播消息来触发系统中BroadcastReceiver。

5.1 要启动一个Activity时,可调用Context的startActivity(Intent intent)或startActivityForResult(Intent intent, int requestCode)方法。
5.2 要启动一个Service时,可调用Context的startService(Intent intent)或bindService(Intent service, ServiceConnection conn, int flags)方法。
5.3 要触发一个BroadcastReceiver时,可以调用Context的sendBroadcast(),sendStickyBroadcast()或sendOrderBroadcast()方法发送广播消息。

显式Intent:显式Intent明确指定需要启动或者触发的组件的类名;
隐式Intent:隐式Intent只是指定需要启动或者触发的组件应满足怎样的条件。这就需要IntentFilter来声明自己所满足的条件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值