Android四大组件
1.活动
介绍: 应用程序的门面,主要用于跟用户进行交互,可以存放界面
生命周期:
状态 | 介绍 |
---|---|
onCreate() | 活动创建时调用该方法 |
onStart() | 活动由不可见变为可见时调用该方法 |
onRestart() | 活动由完全不可见变为可见时调用该方法 |
onResume() | 活动与用户交互时调用该方法 |
onPause() | 活动部分不可见,系统准备启动或恢复另一个活动时调用该方法,通常在这里释放一些CPU资源 |
onStop() | 活动完全不可见时调用该方法 |
onDestroy() | 活动被销毁时调用该方法 |
启动模式:
1. android:launchMode:“standard”:标准模式,每次启动都会创建一个该活动的实例
2. singleTop: 启动活动时若发现返回栈的栈顶已经是该活动,则直接使用它,不会再创建新的实例
3. singleTask: 每次启动时若发现返回栈里存在该活动则依次将这个活动上的活动出栈,使之位于栈顶
4. singleInstance: 创建一个单独的返回栈来存放活动,在该活动为共享活动时使用这种模式
Intent
用来描述Activity发出的请求
intent-filter
用来描述活动可以操作哪些intent
2.服务
介绍: 适合执行不需要与和用户交互而且要求长期执行的任务
生命周期:
状态 | 介绍 |
---|---|
startService() | 启动服务 |
bindService() | 绑定服务 |
onbindService() | 解绑服务 |
onBind() | 服务绑定时调用 |
onCreate() | 活动被创建时调用 |
onStartCommand | 服务被启动时调用 |
onUnbind() | 服务解绑时调用 |
onDestroy() | 活动被销毁时调用 |
使用Service的步骤
1.建立一个类继承Service
2.在该类中再建立一个内部类继承Binder类
3.创建内部类的实例mBinder,并在其中写一些方法,在onBind方法里返回mBinder
4.在活动中实例化ServiceConnection并在其方法里返回上内部类实例
5.启动服务并绑定服务,通过内部类的实例调用方法完成相应操作,并在onDestroy()中解绑服务
更加详细的介绍:Service生命周期
3.广播接收器
介绍: 发送或者接受消息
两种广播:
- 标准广播:完全异步,不可截断
- 有序广播:同步,可被截断
两种注册方式:
- 静态注册:在AndroidManifest.xml中注册,需要单独写一个类接受广播
- 动态注册:在代码中注册,跟随活动的生命周期,切必须在onDestroy()方法里注销广播
4.内容提供器
介绍: 支持在应用程序间共享数据,并可以设置哪些数据可以共享,哪些数据不可以共享
使用步骤
1.获得要访问的数据的Uri如:
Uri uri=Uri.parse(“content://com.example.app.provider/table1”);
其中com.example.app是访问的应用程序的包名,table1是其数据表的名字,其它为固定格式
2.使用ContentResolver类来进行访问,如:
查询数据: Cursor cursor = getContentResolver().query(uri,projection, selection, selectionArgs, sortOrder);
projection指定要查询的列名;selection指定where的约束条件;selectionArgs为 where 中的占位符提供具体的值;sortOrder指定查询结果的排序方式
插入数据: ContentValues values = new ContentValues(); values.put(“column1”, “text”); values.put(“column2”, 1); getContentResolver().insert(uri, values);
更新数据: ContentValues values = new ContentValues();
values.put(“column1”, “”);
getContentResolver().update(uri, values, “column1 = ? and column2 = ?”, new
String[] {“text”, “1”});
删除数据: getContentResolver().delete(uri, “column2 = ?”, new String[] { “1” });
详见:内容提供器