菜鸟的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之旅。。。