菜鸟的Android 学习笔记 之四大组件总结

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之旅。。。

 

 

posted @ 2011-12-20 11:22  行者,无疆  阅读(2720)  评论(1编辑  收藏  举报