Android四大组件
Activity
概念
活动是一种可以包含用户界面的组件,主要用于和用户交互。一个应用程序可以包含零个或多个活动。
基本用法
手动创建活动
1. 创建或加载布局
2. 在AndroidManifest文件中注册
3. 隐藏标题栏
4. 在活动中使用Toast
5. 在活动中使用menu
6. 销毁一个活动——finish()
Activity生命周期
Ø onCreate
Ø onStart
Ø onRestart
Ø onResume
Ø onPause
Ø onStop
Ø onDestroy
数据传递
Activity可以使用intent在活动之间传递数据。
启动模式
Activity的启动模式分为:
Ø standard
每次启动活动无论任务栈中是否已经存在该活动,都会新建一个活动并放在任务栈的顶部。
Ø singleTop
如果当前的任务栈顶部已经是要启动的活动,那么该活动不会被新建,而是直接使用。
Ø singleTask
如果任务栈中存在该活动,那么会将任务栈中该活动以上的所有活动全部退栈。
Ø singleInstance
应用该启动模式,启动一个活动,系统将为该活动新建一个独立的任务栈。
这种模式主要用于在程序间共享活动。
活动之间的跳转
活动之间跳转同样使用intent,其主要的分为两种:显示intent和隐式intent
n 显示intent:
显示intent的用法:
1. 构建一个intent实例:
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
2. 启动活动:
startActivity(intent);
显示intent的特点:明确知道并且可以引用的是哪一个Activity类对象
n 隐式intent
隐式intent的特点:不知道将要跳转的是哪一个类, 无法引用到类. 只知道其动作(action), 类型(mimeType)和附加信息。
隐式intent的使用方法:
创建intent对象:
Intent intent = new Intent();
设置Action
intent.setAction("android.intent.action.VIEW");
添加Category
intent.addCategory("android.intent.category.DEFAULT");
设置传递的数据
intent.setData(Uri.parse("http://www.baidu.com"));
启动Activity
startActivity(intent);
Broadcast Receiver
广播分类
广播分为:有序广播和无序广播。
有序广播
有序广播涉及到接收者的优先级,优先级越高的接收者越早收到广播,同时有权去设置是否需要终止该广播的继续传播。
n 优先级:
优先级以数字表示,数值越大优先级越高。其范围为:-1000~1000。
设置优先级的api:
public final void IntentFilter.setPriority(int priority)
n 终止广播:
终止广播api:
无序广播
无序广播,该类广播任务注册的接收者都可以接收到到该广播。
广播接收者
广播接收者以注册方式分为静态注册和动态注册两种。
静态注册
静态注册广播接收者主要的是通过在AndroidManifest.xml文件中添加标签的方式去完成广播接收者注册。
静态注册的特点:当该活动退出时,还是能收到广播。
实现方式:

动态注册
动态注册与静态注册区别在于动态注册需要在Java代码中使用api去动态添加AndroidManifest.xml文件中声明的intent-filter对象,并设置其相关参数。
动态注册的特点:当该活动退出时,不能再收到广播。
实现方式:

Content Provider
Content Provider主要用于向其他应用程序提供访问该应用的数据(主要是数据库)接口。
实现自定义的Content Provider
The primary methods that need to be implemented are:
- onCreate() which is called to initialize the provider
- query(Uri, String[], String, String[], String) which returns data to the caller
- insert(Uri, ContentValues) which inserts new data into the content provider
- update(Uri, ContentValues, String, String[]) which updates existing data in the content provider
- delete(Uri, String, String[]) which deletes data from the content provider
- getType(Uri) which returns the MIME type of data in the content provider
自定Content Provider必须实现以上的几个方法。为了能够辨别用户访问接口类型、具体的访问方式以及传递的参数。需要建立Uri,将这些Uri对应以上的接口方法,并将这些Uri提供给内容访问者。
n Content Provider URI
Content Provider URI由4部分组成:协议(scheme)、主机名(authority)、path(一般为表名)、ID。
1:schema,用来说明一个ContentProvider控制这些数据。 "content://"
2:主机名或授权(Authority),它定义了是哪个ContentProvider提供这些数据。
3:path路径,URI下的某一个Item。
4:ID, 通常定义Uri时使用”#”号占位符代替, 使用时替换成对应的数字
"content://com.cskaoyan.provider/userinfo/#" #表示数据id(#代表任意数字)
"content://com.cskaoyan.provider/userinfo/*" *来匹配任意文本
n 注册Uri
i. 首先需要获取匹配器:
UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
ii. 添加Uri:
//添加需要匹配uri,如果匹配就会返回匹配码
sMatcher.addURI(“cn.cskaoyan.provider.personprovider”, “person”, 1);
//如果需要match()方法匹配content://cn.cskaoyan.provider.personprovider/person/5路径,返回匹配码为2
sMatcher.addURI(“cn.cskaoyan.provider.personprovider”, “person/#”, 2);
//#号为数字通配符
sMatcher.addURI(“cn.cskaoyan.provider.personprovider”, “person/*/#”, 2);
//*号为字符串通配符
iii. 匹配Uri
匹配Uri需要使用sMatcher.match(uri),并以返回的匹配码作为分支条件:
Swith(){
Case 1:
…
Case 2:
…
}
针对以上的数字通配符,需要使用ContentUris.parseId(uri)获取传入的id。针对字符串通配符需要使用uri.getPathSegments().get(int)。并使用这些id或字符串参数提供相应的数据操作。
内容接收者
内容接收者在使用内容提供者提供的Uri去访问其数据库,使用ContentResolver调用uri,实现访问Content Provider的数据库。其API:
final Uri insert(Uri url, ContentValues values)
final int delete(Uri url, String where, String[] selectionArgs)
final int update(Uri uri, ContentValues values, String where, String[] selectionArgs)
final Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
通过上面的接口即可完成对Content Provider数据库相应的操作。
Service
服务的分类

远程服务(应用程序间的服务)
Android使用一种接口定义语言AIDL(Android Interface Definition Language)来公开服务的接口的方式来暴露服务接口。
进程间通信实现过程:
1. 定义服务类.
2. 定义aidl接口文件.
3. 在服务中onbind方法中返回实现aidl接口的对象.
4. 在另一个程序中调用bindService方法绑定服务.
5. 拷贝aidl接口文件(包括包名)到另一个程序中.
6. 在onServiceConnected方法中把Ibinder对象转换成aidl接口对象.
7. 使用接口对象调用方法(至此调用到远程服务的方法, 实现进程间通信).
Android四大组件的更多相关文章
- Android四大组件之一“广播”
前言 Android四大组件重要性已经不言而喻了,今天谈谈的是Android中的广播机制.在我们上学的时候,每个班级的教室里都会装有一个喇叭,这些喇叭都是接入到学校的广播室的,一旦有什么重要的通知,就 ...
- Android 四大组件 与 MVC 架构模式
作为一个刚从JAVA转过来的Android程序员总会思考android MVC是什么样的? 首先,我们必须得说Android追寻着MVC架构,那就得先说一下MVC是个啥东西! 总体而来说MVC不能说是 ...
- android四大组件(简单总结)
activity 一个Activity通常就是一个单独的屏幕(窗口) Activity之间通过Intent进行通信 android应用中每一个Activity都必须要在AndroidManifest. ...
- android四大组件之Broadcast
广播的概念 现实中:我们常常使用电台通过发送广播发布消息,买个收音机,就能收听 Android:系统在产生某个事件时发送广播,应用程序使用广播接收者接收这个广播,就知道系统产生了什么事件.Androi ...
- Android 四大组件之再论service
service常见的有2种方式,本地service以及remote service. 这2种的生命周期,同activity的通信方式等,都不相同. 关于这2种service如何使用,这里不做介绍,只是 ...
- Android四大组件及activity的四大启动模式
Android四大组件 1. 广播接收者的两种类型: (1)系统广播接收者,就是继承BroadcastReceiver这个类,然后还要在清单文件中注册,注册之后给他一个action.当系统发生了这个a ...
- Android成长日记-Android四大组件之Service组件的学习
1.什么是Service? Service是Android四大组件中与Activity最相似的组件,它们都代表可执行的程序,Service与Activity的区别在于:Service一直在后台运行,它 ...
- Android四大组件之Activity(活动)及其布局的创建与加载布局
Android四大组件之Activity(活动)及其布局的创建与加载布局 什么是Activity ? 活动(Activity)是包含用户界面的组件,主要用于和用户进行交互的,一个应用程序中可以包含零个 ...
- Android四大组件之——Activity的生命周期(图文详解)
转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai 联系方式:JohnTsai.Work@gmail.com [Andro ...
- Android四大组件之Service
Android四大组件之Service Android支持服务的概念,服务是在后台运行的组件,没有用户界面,Android服务可用有与活动独立的生命周期.Android支持两种类型的服务: 本地服务: ...
随机推荐
- 使用管道(PipeLine)和批量(Batch)操作
使用管道(PipeLine)和批量(Batch)操作 前段时间在做用户画像的时候,遇到了这样的一个问题,记录某一个商品的用户购买群,刚好这种需求就可以用到Redis中的Set,key作为product ...
- android:ToolBar详解(手把手教程)(转)
来源 http://blog.mosil.biz/2014/10/android-toolbar/ 编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅 ...
- 基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)--模块开发
之前文章中给大家说明了下我这个小小的想法,发现还是有不少人的支持和关注.你们的鼓励是对我最大的支持. 我总结了了大家的评论,有以下几个问题: 1.希望有更多的文档说明. 2.希望介绍下Orchard的 ...
- 【转】aspx与aspx.cs的关系
原文地址: http://www.cnblogs.com/axzxs2001/archive/2009/01/19/1378383.html 在vs中,有很多朋友问起,在一个网站项目中的aspx和as ...
- Nodejs进阶:如何将图片转成datauri嵌入到网页中去
问题:将图片转成datauri 今天,在QQ群有个群友问了个问题:"nodejs读取图片,转成base64,怎么读取呢?" 想了一下,他想问的应该是 怎么样把图片嵌入到网页中去,即 ...
- Android闹钟设置的解决方案
Android设置闹钟并不像IOS那样这么简单,做过Android设置闹钟的开发者都知道里面的坑有多深.下面记录一下,我解决Android闹钟设置的解决方案. 主要问题 API19开始AlarmMan ...
- php缓存技术(减少数据库服务器压力)
静态缓存(保存在磁盘上的静态文件,用PHP生成数据放入静态文件中) a) php操作缓存 i. 生成缓存 ii. 获取缓存 iii. 删除缓存 判断目录是否存在:is_dir() dirname ...
- JavaScript instanceof 运算符深入剖析
简介: 随着 web 的发展,越来越多的产品功能都放在前端进行实现,增强用户体验.而前端开发的主要语言则是 JavaScript.学好 JavaScript 对开发前端应用已经越来越重要.在开发复杂产 ...
- Java 构建器
假如我们的一个实体类有很多的属性值,但是这些属性值又是可选的.如果我们遇到这样的是类,如何设计出方便的实体类呢? 通常解决办法一: 重叠构造器 public class User { private ...
- Shell命令_if
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 #if if [ 条件判断式 ] ...