16 介绍下 contentprovider 是如何 实现数据共享的。
什么是内容提供者 ?
内容提供者是android 中的四大组件之一,可以将应用各种的数据 对外进行共享(比如我们应用的数据库,只有我们应用有权限读写,如果让其他应用访问,就需要共享出去)。
内容提供者将数据风筝,只暴露出我们洗完共提供给其他程序的数据
内容提供者将数据访问方式统一(crud),不必针对不同数据类型采取
怎么使用contentprovider?
跟 其他三大组件一样, 只要我们自己写一个类 继承 Contentprovider 类,然后实现父类的方法即可,注意 四大组件 都需要在 清单文件中注册才可以生效。
清单文件中注册<provider android:name=".xx" android:authorities=".xxx"> 内容提供者其实就是通过url name 就是我们自定义的provider 子类 名,这个authorities 其实就是 一个别名,供其他应用 找到 我们定义的这个类。
在其他应用中,我们要拿到一个 contentresolver。 然后获取到uri. 内容提供者 就是通过uri 进行数据共享的,, uri 有三部分组成
1.scheme:ContentProvider(内容提供者)的scheme已经由Android所规定为:content://。 2.主机名(或Authority):用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。 3.路径(path):可以用来表示我们要操作的数据,路径的构建应根据业务而定,如下:
要操作contact表中id为10的记录,可以构建这样的路径:/contact/10 要操作contact表中id为10的记录的name字段, contact/10/name 要操作contact表中的所有记录,可以构建这样的路径:/contact
然后拿contentresolver对象 就可以访问 内容提供者的方法。
17 android 的数据存储方式 都有哪些?
1.文件 访问权限 sdcard /data/data/包名/files..
2.数据库 sqlite
3。 sharedpreferences
4.网络
5、内容提供者
18. 为什么使用 内容提供者 contentprovider 与 sql 语句 有什么区别
内容提供者 可以在不同应用间共享数据,比如 有些 数据是私有的, 让没有权限的其他应用访问 本应用中的数据,同时 内容提供者 可以屏蔽掉 数据存储的细节,,只提供用户访问方式不需要去关心怎么实现的,内容提供者既可以操作数据库 也可以操作xml 本地文件等,sql 只能操作数据库。
19.系统安装了多个浏览器,怎么显示的指定 某一浏览器去访问某一 连接。
如果我们知道 包名 类型,可以通过intent 显式的指定
Intent intent=new Intent();intent.setAction(Intent.ACTION_VIEW);intent.addCategory(Intent.CATEGORY_BROWSABLE); intent.setData(Uri.parse(""));startActivity(intent);
或者 intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
若我们不知道包名,那么 我们可以通过 packagemanager 拿到 能开启的所有activity 去便利 ,代码如下
Intent intent=new Intent();intent.setAction(Intent.ACTION_VIEW);intent.addCategory(Intent.CATEGORY_BROWSABLE);intent.setData(Uri.parse(""));PackageManager pm = getPackageManager();List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0);for (ResolveInfo resolveInfo : resolveInfos) {System.out.println("pm—————–"+resolveInfo.activityInfo.applicationInfo.packageName+" ====="+resolveInfo.activityInfo.applicationInfo.className);
05-14 18:01:02.207: I/System.out(16983): pm—————–com.android.browser =====com.android.browser.Browser05-14 18:01:02.207: I/System.out(16983): pm—————–com.browser2345 =====com.browser2345.Browser05-14 18:01:02.207: I/System.out(16983): pm—————–com.ijinshan.browser_fast =====com.ijinshan.browser.KApplication}
可以看到 我这里 的三个 浏览器包名 类名。
20. 谈谈 对 主线程的理解。
四大组件 都是运行在主线程中的, 主线程负责维护一些与生命周期相关的方法的回调, 比如 activity oncreate onstart 这些与生命周期相关的方法都是运行在主线程中的
所有界面的更新 都是通过主线程来处理的。比如显示一个button。还有广播,比如电量低 ,插入sd卡,发出的广播 也都是通过主线程消息机制 完成的。主线程非常重要,不能做耗时操作,否则 会导致 ANR。
21 listview 如何提高其效率?
就会犯错误,就会有无数次让自己跌倒的机会出现,