Android-ContentProvider使用

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115215.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • ZigBee协议栈简介和流程「建议收藏」

    ZigBee协议栈简介和流程「建议收藏」ZigBee协议栈实际上就是ZigBee协议的API接口一般步骤为:1.组网:调用协议栈的组网函数、加入网络函数,实现网络的建立与节点的加入2.发送:发送节点调用协议栈的无线数据发送函数,实现无线数据发送3.接收:接收节点调用协议栈的无线数据接收函数,实现无线数据接收大致流程:main()→osal_init_system()→osalInitTasks()→SampleAp

    2022年5月8日
  • Ubuntu中dpkg命令的用法[通俗易懂]

    Ubuntu中dpkg命令的用法[通俗易懂]dpkg是Debianpackage的简写,为”Debian“操作系统专门开发的套件管理系统,用于软件的安装,更新和移除。所有源自”Debian”的Linux的发行版都使用dpkg,例如”Ubuntu”阅读目录安装软件 列出与该包相关联的文件 显示包的版本 移除软件(保留配置) 移除软件(不保留配置) 查找包的详细信息 列出deb包的内容安装软件命令:dpkg-i<.debfilename>实例:dpkg-i~/Download/…

    2022年5月21日
  • Android一个ListView列表之中插入两种不同的数据

    http://www.cnblogs.com/roucheng/ Android一个ListView列表之中插入两种不同的数据代码如下:更多特效:http://www.cnblogs.c

    2021年12月22日
  • Java文件读写

    Java文件读写1.%g用于输出科学计数法2.用printf输出换行除了’\n’,还可以用’%n’3.File类的几个构造方法:1)File(StringdirectoryPath)2)File(StringdirectoryPath,Stringfilename)3)File(FiledirObj,Stringfilename)4)File(URIuri)注意,这里的对象指的可能是一个…

    2022年7月14日
  • 八数码问题及A*算法

    八数码问题及A*算法一.八数码问题八数码问题也称为九宫问题。在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的某一数字,不同棋子上标的数字不相同。棋盘上还有一个空格,与空格相邻的棋子可以移到空格中。要求解决的

    2022年7月4日
  • eclipse配置SVN和Maven插件

    eclipse配置SVN和Maven插件

    2021年7月20日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号