数据存储
l 创建数据库的步骤
Ø 通过Helper建立数据库表结构 à onCreate,onu
Ø 调用helper实例,通过get***Database()得到DB对象
Ø 通过DB对象实例调用增删改查方法进行操作
l SQLiteOpenHelper使用方法
Ø getReadableDatabase() 得到一个可读的db
Ø getWritableDatabase() 得到一个可写的db
Ø onCreate(SQLiteDatabase db)
当数据库第一次创建时调用.程序会检查databases/database.db是否存在.如果不存在则会在要求得到一个databases时调用onCreate()方法,而非new SQLiteOpenHelper()时调用
Ø onOpen(SQLiteDatabase db)
Ø onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
Ø close()
Cursor
可以被看做是一个游标,当数据库查询时会返回一个Cursor.
Cursor cursor = db.query("user", new String[]{"name","id"}, "id=?", new String[]{"2"}, null, null, null);
我们可以通过Cursor来得到我们查询的数据
if(cursor != null && cursor.getCount() > 0) {
cursor.moveToFirst();
int num = cursor.getColumnIndex("id");
s = cursor.getString(num);
}
l xml文件的读写
Ø getSharedPreference
通过此方法得到一个SharedPreference 对象
Ø SharedPreferences.Editor
Editor为SharedPreference的子对象(编辑器) 用于编写
Ø Editor.commit()
执行操作
Service
l Service 概念
有些操作时间比较长,或目的性的想在后台运行.这就引入了Service这个概念.
Service不是一个独立的进程.亦不是一个独立的线程.默认情况下和主线程在一起.如需要运行费时的操作.应独立另启动线程
l 创建及操作Service
Ø 继承Service类实现自己的服务
Ø 在AndridManifest中注册服务
Ø 启动服务startService(
Ø 停止服务stopService()、stopSelf()
l 绑定及使用service的步骤
Ø 继承Service或者IntentService类实现自己的服务
Ø 在AndroidManifest中注册服务
Ø 绑定服务bindService()
Ø 取消绑定服务unbindService()
当调用bindService的时候
bindButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass(Service01Activity.this, BindService.class);
bindService(intent, conn, Context.BIND_AUTO_CREATE);
}
});
}
会调用bindService的onBind方法 并返回一个Binder 给bindService的参数conn所指的Serviceconnection
private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
MyBinder myBinder = (MyBinder)service;
BindService bindService = myBinder.getService();
bindService.myMethod();
Log.i("Service01Activity", "onServiceConnected");
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
};
然后由bindService.myMethod();完成实现
l Service 分类
按照启动方式分类
Ø Started
1) startService()来启动
2) 一旦启动,就运行在后台,即便启动他的对象都销毁
3) 通常只启动不返回值
4) 通常网络上传或者下载,操作完成后,自动停止
5) onStartCommand()
Ø Bind
了解Service 与 IntentService 区别
重点:
Service与BoundService区别
Service开发,启动,绑定
掌握Service与线程使用区别
l Service生命周期
Service只有在系统资源不足的时候才有可能被系统销毁,值得注意的是:Service如果正在bind状态,很少会被销毁,如果服务运行在前台,几乎不会被销毁.
Ø onCreate()
Ø onDestory()
Ø onStartCommand()
Ø onBind() BoundService如果绑定者都销毁则BoundService生命周期也结束
ContentProvider
ContentProvider是一套存储访问数据的通道,让你无需了解下面的存储细节实现数据操作及共享.
无论具体存储是如何做的,存在哪的,但对外提供的模型是统一的
ContentProvider对象,会在系统初始化的时候自动实例化,无需我们手动去实例化对象
我们只需要通过ContentProvider取得和操作数据即可
l 实现ContentProvider的过程
Ø 定义URI
Ø 实现一个ContentProvider子类
Ø 在AndroidManifest.xml当中进行声明
l 常用方法
Ø query() 查询
Ø insert() 插入
Ø updata() 更新
Ø delete() 删除
Ø getType() 得到数据类型
Ø onCreate() 创建时的回调函数
l URI
哪条记录 |
协议标准 |
ContentProvider提供者地址 |
哪张表 |
l 一些通用的定义
CONTENT_URI
自定义的URI,一定要content:// + authority+…….其中authority要在Manifest.xml文件中配置
CONTENT_TYPE 访问所有数据 通常为 “vnd.android.cursor.dir/vnd.……”
CONTENT_TYPE_ITEM 访问单个数据 通常为 ”vnd.android.cursor.item/vnd.……”
DATABASE_NAME 数据库名称
DATABASE_VERSION 数据库版本
DATABASE_TABLE_NAME 表名
BroadcastReceiver
l 如何使用
Ø 继承BroadcastReceiver类
Ø 重载onReceiver()方法
当接受到指定的广播后会构造接受类,然后调用此方法.此方法调用之后则此对象不会被再使用.接受到下一次广播时,会再创建一个此类的实例.
Ø 配置reciever
n 配置AndroidManifest.xml中的
其中
如果广播为
n 在程序中配置
注册BroadcastReceiver: Context.registerReceiver(BroadcastReceiver,filter)
BroadcastReceiver 自定义的BroadcastReceiver类对象
Filter 过滤器
取消注册BroadcastReceiver:
Context.unregisterReceiver(BroadcastReceiver)
IntentFilter filter = new IntentFilter();
filter.addAction(SMS_ACTION);
BroadcastReceiverActivity.this.registerReceiver(sms, filter);
解除的时候一定是相同对象而不是,如果仅仅是同一个类的2个实例则会报错.
BroadcastReceiverActivity.this.unregisterReceiver(sms);
注:如果一个BroadcastReceiver用于更新UI,那么通畅会使用这种方法进行注册,在Activity启动的时候注册BroadcastReceiver,在Activity不可见以后取消注册
l BroadcastReceiver接收的信息
Ø 通过Context.sendBroadcast发送
Ø 通过Context.sendOrderedBroadcast发送