数据存储

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

<standard_prefix>://<authority>/<data_path>/<id>


哪条记录



协议标准



ContentProvider提供者地址



哪张表




l 一些通用的定义

CONTENT_URI

自定义的URI,一定要content:// + authority+…….其中authority要在Manifest.xml文件中配置

<provider 

            android:name=".ProviderTest"

            android:authorities="ying.demo.provider.providertest"/>


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中的<reciever>的

其中<intent-filter>为过滤器

如果广播为<intent-filter>中定义的action 则会调用MyReceiver.class

<receiver android:name=".MyReceiver">

            <intent-filter >

                

                <action android:name="ying"/>

            </intent-filter>

        </receiver>


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发送