Android-ContentProvider使用
2016-04-23 13:27
417 查看
Android-ContentProvider使用
一 建立ContentProviderserver端
1 建立一个继承自ContentProvider的类并重写接口方法(这里仅打一些log做代表)
2 在manifest文件里注冊这个类
二 建立client的类
主要使用ContentResolve对象来操作server端的接口方法
//设置一个按钮的事件监听
三 注意
1 在server端查询方法中。使用getContentResolver().query()后,尽量使用startManagerCursor(Cursor)方法来将Cursor的
生命周期托管给当前的Activity。这样Cursor的生命周期和Activity便可以自己主动同步,防止当前的Activity退出后,cursor依旧存在导致内存泄露
2 当前Activity调用另外一个没有启动的进程的ContentProvider,
将当前项目的manifest文件里的provider中的android:multiprocess=”true”即同意其它进程訪问
3 ContentProVider的机制
在程序安装和卸载的时候,会将ContentProvider类register和unregister到系统的ProviderManager中。
当使用ContentResolver来传入Uri的时候
在Providermanager中在链表找到该Uri来匹配并启动不同的进程
因此进程不是通过Activity启动。而是通过Provider来启动的
binder机制
4 宿主进程的生命周期
接收调用的时候启动宿主进程,操作完成后,宿主进程为empty
一 建立ContentProviderserver端
1 建立一个继承自ContentProvider的类并重写接口方法(这里仅打一些log做代表)
package com.chengzhi.androidcontentprovider; import android.content.ContentProvider; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.util.Log; import android.widget.Toast; /** * ContentProvider的server端类 * @author chengzhi * */ public class MyContentProvider extends ContentProvider { 1。 //重写delete方法 @Override public int delete(Uri arg0, String arg1, String[] arg2) { // TODO Auto-generated method stub if (arg0.getAuthority().contains("com.chengzhi.androidcontentprovider")) { Log.i("chengzhi log", "delete"); } return 0; } 2。 //重写getType方法 @Override public String getType(Uri arg0) { // TODO Auto-generated method stub if (arg0.getAuthority().contains("com.chengzhi.androidcontentprovider")) { Log.i("chengzhi log", "getType"); } return null; } 3, //重写insert方法 @Override public Uri insert(Uri arg0, ContentValues arg1) { // TODO Auto-generated method stub if (arg0.getAuthority().contains("com.chengzhi.androidcontentprovider")) { Log.i("chengzhi log", "insert"); } return null; } @Override public boolean onCreate() { // TODO Auto-generated method stub return false; } 4, //重写query方法 @Override public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3, String arg4) { // TODO Auto-generated method stub if (arg0.getAuthority().contains("com.chengzhi.myprovider")) { Log.i("chengzhi log", "query"); } return null; } 5。 //重写update方法 @Override public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) { // TODO Auto-generated method stub if (arg0.getAuthority().contains("com.chengzhi.androidcontentprovider")) { Log.i("chengzhi log", "updata"); } return 0; } }
2 在manifest文件里注冊这个类
<provider android:name="MyContentProvider" android:authorities="com.chengzhi.myprovider"(可以自己定义)></provider>
二 建立client的类
主要使用ContentResolve对象来操作server端的接口方法
//设置一个按钮的事件监听
Button _buttonQuery = (Button)findViewById(R.id.buttonQuery); _buttonQuery.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub ContentResolver _contentResolver = getContentResolver(); //必须加上content://标准前缀 Cursor _cursor = _contentResolver.query(Uri.parse("content://com.chengzhi.myprovider"), null, null, null, null); } });
三 注意
1 在server端查询方法中。使用getContentResolver().query()后,尽量使用startManagerCursor(Cursor)方法来将Cursor的
生命周期托管给当前的Activity。这样Cursor的生命周期和Activity便可以自己主动同步,防止当前的Activity退出后,cursor依旧存在导致内存泄露
2 当前Activity调用另外一个没有启动的进程的ContentProvider,
将当前项目的manifest文件里的provider中的android:multiprocess=”true”即同意其它进程訪问
3 ContentProVider的机制
在程序安装和卸载的时候,会将ContentProvider类register和unregister到系统的ProviderManager中。
当使用ContentResolver来传入Uri的时候
在Providermanager中在链表找到该Uri来匹配并启动不同的进程
因此进程不是通过Activity启动。而是通过Provider来启动的
binder机制
4 宿主进程的生命周期
接收调用的时候启动宿主进程,操作完成后,宿主进程为empty
相关文章推荐
- 【Android学习】Android studio 使用AIDL
- android launcher学习点滴
- 创建第一个Android项目
- android的service基础
- 《Android JNI》03 Jni中的反射
- Android:使用Gson解析复杂的JSON数据
- Android Studio下提示Couldn't load BaiduMapSDK_v3_1_0
- Android Service的生命周期
- Android service 弹出对话框 ,启动activity
- 【Android 学习】小知识Notification的新旧用法
- 一个帖子学会Android开发四大组件
- Android进阶笔记16:onInterceptTouchEvent、onTouchEvent与onTouch
- colorAccent,colorPrimary,colorPrimaryDark
- Android JPush(极光推送)的使用教程
- Android生成一维码
- Android PullToRefresh (GridView 下拉刷新上拉加载)
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
- android里面R文件突然找不到,或者报错情况分析
- 聊聊Android的缓存(四)
- Android中TimePicker与DatePicker时间日期选择组件的使用实例