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:

自定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四大组件的更多相关文章

  1. Android四大组件之一“广播”

    前言 Android四大组件重要性已经不言而喻了,今天谈谈的是Android中的广播机制.在我们上学的时候,每个班级的教室里都会装有一个喇叭,这些喇叭都是接入到学校的广播室的,一旦有什么重要的通知,就 ...

  2. Android 四大组件 与 MVC 架构模式

    作为一个刚从JAVA转过来的Android程序员总会思考android MVC是什么样的? 首先,我们必须得说Android追寻着MVC架构,那就得先说一下MVC是个啥东西! 总体而来说MVC不能说是 ...

  3. android四大组件(简单总结)

    activity 一个Activity通常就是一个单独的屏幕(窗口) Activity之间通过Intent进行通信 android应用中每一个Activity都必须要在AndroidManifest. ...

  4. android四大组件之Broadcast

    广播的概念 现实中:我们常常使用电台通过发送广播发布消息,买个收音机,就能收听 Android:系统在产生某个事件时发送广播,应用程序使用广播接收者接收这个广播,就知道系统产生了什么事件.Androi ...

  5. Android 四大组件之再论service

    service常见的有2种方式,本地service以及remote service. 这2种的生命周期,同activity的通信方式等,都不相同. 关于这2种service如何使用,这里不做介绍,只是 ...

  6. Android四大组件及activity的四大启动模式

    Android四大组件 1. 广播接收者的两种类型: (1)系统广播接收者,就是继承BroadcastReceiver这个类,然后还要在清单文件中注册,注册之后给他一个action.当系统发生了这个a ...

  7. Android成长日记-Android四大组件之Service组件的学习

    1.什么是Service? Service是Android四大组件中与Activity最相似的组件,它们都代表可执行的程序,Service与Activity的区别在于:Service一直在后台运行,它 ...

  8. Android四大组件之Activity(活动)及其布局的创建与加载布局

    Android四大组件之Activity(活动)及其布局的创建与加载布局 什么是Activity ? 活动(Activity)是包含用户界面的组件,主要用于和用户进行交互的,一个应用程序中可以包含零个 ...

  9. Android四大组件之——Activity的生命周期(图文详解)

        转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com       [Andro ...

  10. Android四大组件之Service

    Android四大组件之Service Android支持服务的概念,服务是在后台运行的组件,没有用户界面,Android服务可用有与活动独立的生命周期.Android支持两种类型的服务: 本地服务: ...

随机推荐

  1. tomcat启动时报错

    http://www.oschina.net/question/1162040_229925?sort=time 解决:

  2. Matlab滤波器设计(转)

    滤波器设计是一个创建满足指定滤波要求的滤波器参数的过程.滤波器的实现包括滤波器结构的选择和滤波器参数的计算.只有完成了滤波器的设计和实现,才能最终完成数据的滤波. 滤波器设计的目标是实现数据序列的频率 ...

  3. 手把手教你使用markdown

    这是 [认真学编程] 系列的 第3篇 文章,欢迎点赞分享.写留言,这些都是对我最好的支持. 全文2300字,阅读预计5分钟] 在前面几篇文章中,多次提到装X神器markdown,本人也是markdow ...

  4. 拥抱HTML5 — Page Visibility(页面可见性) API介绍

    H5 提供了很多简单实用的 API,Page Visibility API 就是其中之一. 不知道用户是不是在与页面交互,这是困扰广大 Web 开发人员的一个主要问题.如果 页面最小化了 或者 隐藏在 ...

  5. react实现的tab切换组件

    我有点想要吐槽,因为用原生的js实现起来挺简单的一个小东西,改用react来写却花了我不少时间,也许react的写法只有在复杂的web应用中才能体现出它的优势吧!不过吐槽归吐槽,对react这种优雅的 ...

  6. WordPress使用固定链接

    WordPress安装后我们会发现,文章默认的url是很丑的,http://example.com/?p=N,其中N是文章ID,一串数字.默认链接在所有的环境下都运转良好,但和其他的类型比起来却没那么 ...

  7. .Net分布式异常报警系统-项目介绍

    后台管理  首页统计的是当天每个时段的异常数量, 使用的是echarts组件, 红框所示, 可以选择不同的系统进行查看.     得益于echarts的强大功能, 你可以使用柱状图来查看.     站 ...

  8. Python 处理数据库返回结果

    游标执行后返回的结果都只是数据,但是不带有列名标识.这里需要处理2个问题: 将返回的数据映射到每一列上 当返回的结果很大的时候,需要使用迭代器来提升性能. 解决上面的2个问题,在python里面可以采 ...

  9. BroadcastReceiver之有序广播

    有序广播可以按一定的优先级进行传播 首先进行发送广播 public void click(View v){ Intent intent = new Intent(); intent.setAction ...

  10. Collection中Set集合在应用中常见的方法和注意点

    Set集合 : 元素无序的,元素不允许重复.      ---->HashSet  : 存值方式使用哈希表来存值的.                   原理 :  如果HashSet中存放对象 ...