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)
上一篇 2022年2月7日 下午2:00
下一篇 2022年2月7日 下午3:00


相关推荐

  • 请简要描述在定点DSP处理器上实现浮点运算的基本步骤_74ls161分频器

    请简要描述在定点DSP处理器上实现浮点运算的基本步骤_74ls161分频器 http://bbs.elecfans.com/jishu_486119_1_1.html   7.1  定点数和浮点数概念   如果小数点的位置事先已有约定,不再改变,此类数称为“定点数”。相比之下,如果小数点的位置可变,则称为“浮点数”(定点数的本质是小数,整数只是其表现形式)。 7.1.1  定点数 …

    2025年9月29日
    7
  • 使用Zookeeper实现选举

    使用Zookeeper实现选举

    2021年6月7日
    218
  • 旅游管理系统

    旅游管理系统旅游管理系统介绍要求:ER图代码介绍高级数据库布置的实验作业要求:题目:设计与实现一个旅游预订系统,该系统涉及的基本信息有航班,出租车,宾馆和客户等数据信息。实体和其特征属性举例如下:FLIGHTS(StringflightNum,intprice,intnumSeats,intnumAvail,StringFromCity,StringArivCity);H…

    2022年6月14日
    27
  • 设计测试用例的方法

    设计测试用例的方法如果测试的时间有限,如何保证在有限的时间内让产品上线?(1)有限的时间内测试,保证用户经常使用(使用频率比较高,主要的,核心的功能)功能的质量(2)如果有限的时间所有的功能不能完全测完,可以和产品经理开发商量,把没有通过测试的,有风险的功能把用户的入口,屏蔽掉(让用户无法使用),产生错误风险就会降低(3)本次测试,测试报告写清楚,这次上线,哪些功能测试了,哪些功能没有测试,上线风险分析清楚。百度云盘的测试用例太多了,如何去写?(1)用户经常使用的功能有哪些?文件的存储(长传,接受)下载分享

    2022年6月20日
    26
  • Android:简单的弹幕效果达到

    Android:简单的弹幕效果达到

    2022年1月14日
    77
  • python中%d_python中%d是什么「建议收藏」

    python中%d表示格式化一个对象为十进制整数。使用后,在需要输出的长字符串中占位置。输出字符串时,可以依据变量的值,自动更新字符串的内容。使用示例:num=14#%d打印时结果是14print(“num=%d”%num)#output:num=14#%1d意思是打印结果为1位整数,当整数的位数超过1位时,按整数原值打印,所以%1d的打印结果还是14print(“nu…

    2022年4月10日
    2.1K

发表回复

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

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