史上最详细 最基础的 android 面试 知识点总结(二)

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 如何提高其效率?

就会犯错误,就会有无数次让自己跌倒的机会出现,

史上最详细 最基础的 android 面试 知识点总结(二)

相关文章:

你感兴趣的文章:

标签云: