Android-ContentProvider使用
Android-ContentProvider使用
一 建立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-ContentProvider使用的更多相关文章
- Android基础 : Android ContentProvider
Android 应用程序通过ContentProvider实现方式统一的数据共享功能. 外界的程序通过ContentResolver接口可以访问ContentProvider提供的数据,在Activi ...
- Android ContentProvider完整案例
ContentData类,提供数据常量: /** * 提供ContentProvider对外的各种常量,当外部数据需要访问的时候,就可以参考这些常量操作数据. * @author HB * */ pu ...
- Android ContentProvider基本用法
转自:https://www.jianshu.com/p/601086916c8f 一.基本概念 ContentProvider是Android系统中提供的专门用户不同应用间进行数据共享的组件,提供了 ...
- Android ContentProvider 启动分析
对于 ContentProvider 还不是很熟悉的同学,可以阅读上一篇 Android ContentProvider 基本原理和使用详解.本文主要是对 contentProvider 的源码进行分 ...
- Android ContentProvider介绍
在Android中数据的存储一共有五种形式,分别是:Shared Preferences.网络存储.文件存储,外储存储.SQLite.但是我们知道一般这些存储都只是在单独的一个应用程序之中达到一个数据 ...
- Android ContentProvider 简单学习
当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.以前我们学习过文件的操作模式,通过指定文件的操作模式为Context.MODE_WORL ...
- Android ContentProvider的实现
当Android中的应用需要访问其他应用的数据时,用ContentProvider可以很好的解决这个问题.今天介绍一下ContentProvider的用法. 首先开发ContentProvider有两 ...
- Android ContentProvider和Uri详解 (绝对全面)
ContentProvider的基本概念 : 1.ContentProvider为存储和读取数据提供了统一的接口 2.使用ContentProvider,应用程序可以实现数据共享 3.andr ...
- Android ContentProvider和getContentResolver
安卓系统中的数据库SqlLite操作和java中mysql的数据库操作很不一样,造成这样的原因是因为在安卓中数据库是属于进程的不存在数据库客户端,也不存在数据库服务器. 关于SqlLite数据库的文章 ...
- android ContentProvider学习
1.ContentProvider提供位存储或获取数据提供了统一的接口. 2.使用ContentProvider可以在不同的应用程序之间共享数据. 3.Android为常见的一些数据提供了Conten ...
随机推荐
- 初识numpy
from numpy import * 导入numpy包 random可以生成随机数组 通过mat函数,将数组转换成矩阵,可以对矩阵进行求逆计算等.其中.I操作实现了矩阵求逆计算操作. 执行矩阵乘 ...
- WM8960音频播放
第一节 音频播放原理首先需要申明一下,本章的代码来自网络,参考了亚嵌教育李明老师(论坛ID:limingth)的帖子: http://www.arm9home.net/read.php?tid=205 ...
- [HTML]点击按钮,页面总是跳回顶端的解决方法(Clicking an button,always resets the view to top of page)
1 前言 当网页页面较长或者表单较多时,右侧会出现滚动条,然而经常会出现点击底部的<button>按钮或者<a>超链接,会出现点击后,当前页面会回到顶端. 2 方案 例如样例代 ...
- ThinkPHP 3.1,3.2中对IN和BETWEEN正则匹配不当导致的一个SQLi
// where子单元分析 protected function parseWhereItem($key,$val) { $whereStr = ''; if(is_array($val)) { if ...
- VSCode配置python调试环境
VSCode配置python调试环境 很久之前的一个东东,翻出来看看 VSCode配置python调试环境 * 1.下载python解释器 * 2.在VSCode市场中安装Python插件 * 4.在 ...
- JS中sort()方法原理及使用
说明 如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序.要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较. arra ...
- 服务端工程师入门与进阶 Java 版
前言 欢迎加入我们.这是一份针对实习生/毕业生的服务端开发入门与进阶指南.遇到问题及时问你的 mentor 或者直接问我. 建议: 尽量用google查找技术资料. 有问题在stackoverflow ...
- 使用fidder进行接口测试
官方下载地址 下载后一路next安装即可. get请求 get请求直接把需要携带的参数使用?跟在后面如:http://127.0.0.1:8000/api/get_event_list/?id=1 p ...
- JavaScript脚本的两种放置方式
JavaScript脚本的两种放置方式 1在body里用 script标签引用 2 直接写在<script></script>标签之中
- spring 中常用的两种事务配置方式以及事务的传播性、隔离级别
一.注解式事务 1.注解式事务在平时的开发中使用的挺多,工作的两个公司中看到很多项目使用了这种方式,下面看看具体的配置demo. 2.事务配置实例 (1).spring+mybatis 事务配置 &l ...