您的位置:首页 > 移动开发 > Android开发

Android的四大组件 简介

2011-12-29 11:22 176 查看
Activity :
activity是Android提供的界面,所有和用户交互的事情都发生在这个类。

Activity的生命周期:
OnCreate() 创建的时候会调用这个方法 设置这个Activity设置布局控件,初始化数据等。
OnStart() 当控件被我们看到的时候,就调用OnStart()方法 在OnCreate()之后 或者OnStop()后调用。
OnResume() 当重新获得用户焦点的时候就调用这个方法。
onPause() 保护现场用的 可能被另外一个透明的Dialog窗口覆盖,失去焦点,但是他仍然和窗口管理器保持连接,系统可以继续保护Activity的内部状态。
onStop() 停止和OnStart()对应,注意OnStop()和OnPause()不一样的地方是他是完全被另外一个窗口覆灭。也就是失去焦点而且不可见。
onDestory()销毁

创建一个Activity的要点
1.一个Activity就是一个类,并且这个类要继承Activity
2.需要复写onCreate方法
3.要在Androidmanifest.xml进行配置(四大组件都要进行配置)
4.为Activity添加必要的控件

在一个Activity启动另外一个Activity
Intent intent=new Intent(CurrentActivity.this,OtherActivity.class) //OtherActivity也要在AndroidManifest.xml中注册。
startActivity(intent);
Intent还可以放入各种数据 传入下一个Activity。

可以用下面的方式接收传过来的数据:

还可以用Bundel的方法发送数据。Bundel就像一个承载数据的List<> 里面可以放各种数据。但是他的key只能是string类型的,放入Intent的方式也是intent.putExtra(bundle);

Service:
Service在什么时候会用到呢?比如说音乐程序的时候,需要后台运行,但是又看不到界面,此时就用到Service。这也是Service和Activity最大的不同。

Service 分类:
本地Service和远程Service。
本地Service是同一个进程内Service彼此之间共同的内存区域。
远程Service是同一个系统内的不同进程之间访问(注意是同一个系统内,不是不同系统)。

Service生命周期:
onCreate()->onStart()->onDestory() 三个方法 继承的时候如果要用到记得重新写下。

创建一个Service要点:
1. 创建一个类,要继承Service
2. 要在androidManifest.xml中进行配置
3. 在Activity中配置调用它

Broadcast Receiver:
在android中可以通过broadcast告诉其他程序发生了什么事情。比如电源,比如短信,比如信号。
Broadcast Receiver相比于其他组件比较特别的地方是他还提供了一种所谓的热注册,就是不用写在androidManifest.xml中,直接用
registerReceiver(Broadcastreceiver,IntentFilter)注册。然后用unregisterReceiver()消除注册。

一些常用的Action:
ACTION_CALL activity 启动一个电话.

ACTION_EDIT activity 显示用户编辑的数据.

ACTION_MAIN activity 作为Task中第一个
Activity启动

ACTION_SYNC activity 同步手机与数据服务器上的数据.

ACTION_BATTERY_LOW broadcast receiver 电池电量过低警告.

ACTION_HEADSET_PLUG broadcast receiver 插拔耳机警告

ACTION_SCREEN_ON broadcast receiver 屏幕变亮警告.

ACTION_TIMEZONE_CHANGED broadcast receiver 改变时区警告.

Content Provider:
这个组件比较复杂
ContentProvider可以支持多个应用的数据共享。可以用来操作音频,视频,图片,私人通讯录等等。但是要记得获取适当的读取权限。当然也可以用来公开自己的数据。(难道Content Provider是全局变量?整个手机的程序都能访问得到?)

创建Content Provider 要点:

1. 创建一个Content Provider首先要继承ContentProvider类。

2. 在androidManifest中配置

3. 在Activity类中调用insert() query()可以调用

实际上所有的contentprovider用户都不能直接访问contentprovider实例,只能通过ContentResolver的中间代理。而要得到ContentResolver的实例可以用Activity的getContentResolver方法。如下



可以自己去调用ContentProvider相应的方法。

Uri使用方法:来自http://blog.sina.com.cn/s/blog_5688414b0100xagp.html

为系统的每一个资源给其一个名字,比方说通话记录。

1、每一个ContentProvider都拥有一个公共的URI,这个URI用于表示这个ContentProvider所提供的数据。

2、Android所提供的ContentProvider都存放在android.provider包中。 将其分为A,B,C,D 4个部分:

A:标准前缀,用来说明一个Content Provider控制这些数据,无法改变的;"content://"

B:URI 的标识,它定义了是哪个Content Provider提供这些数据。对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个完整的、小写的 类名。这个标识在 元素的 authorities属性中说明:一般是定义该ContentProvider的包.类的名称;"content://hx.android.text.myprovider"

C:路径,不知道是不是路径,通俗的讲就是你要操作的数据库中表的名字,或者你也可以自己定义,记得在使用的时候保持一致就ok了

"content://hx.android.text.myprovider/tablename"

D:如果URI中包含表示需要获取的记录的ID;则就返回该id对应的数据,如果没有ID,就表示返回全部;"content://hx.android.text.myprovider/tablename/#" #表示数据id

数据模型:

ContentProvider返回的数据结构是Cursor类似于DataSet,每一个contentprovider 定义一个唯一公开的URI,用于指定他的数据集。一个contentprovider可以包含多个数据集。这样就需要多个URI与之对应。URI的开头必须是 “content://”

表示这个Uri指定一个contentprovider。

增删查改:

查询

Cursor cursor = getContentResolver().query(

ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,null,null);

得到查询数据:

Cursor.moveToNext()读取到下一条 类似于C#的sdr.read()

条件发在哪里?

可以放在

修改:

插入:

数据放在values内,values是键值对。如下:

ContentValues values = new ContentValues();

values.put(People.NAME, "Abraham Lincoln");

Uri uri = getContentResolver().insert(People.CONTENT_URI, values);

错误应该很多 求指点....刚刚开始的Android之旅。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: