zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    HDU-1215 七夕节 数论 唯一分解定理 求约数之和
    LightOJ-1259 Goldbach`s Conjecture 数论 素数筛
    [前端-动态数据可视化]横向柱状图的动态数据可视化
    CodeForces-722C Destroying Array 并查集 离线操作
    CodeForces-920E Connected Components? 广度搜索 双向链表 判断联通 大量重复节点的删除
    CodeForces-1007A Reorder the Array 贪心 田忌赛马
    POJ-3692 Kindergarten 二分图 最大团
    个人开发者做一款Android App需要知道的事情
    android各种组件的监听器
    留言处插入xss不弹框
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5424460.html
Copyright © 2011-2022 走看看