面试之路(13)-android apk之间共享数据的方式以及shareUserId详解
1.通过content Provider/sharedPreferrence
2.通过shareUserId
我们详细介绍一下shareUserId:
Android App Sandbox(android沙箱机制)
我们知道 Linux 中的 Sandbox 主要做隔离工作,将不同任务或用户间的耦合降到最低。Android 应用也借用了 Linux Sandbox技术,将不同 APP 之间做了隔离;APP 之间的隔离主要是资源隔离和权限访问隔离。
每个 Android APP 都运行在他们自己的 Linux 线程中(UID不同),每个应用程序彼此独立,默认情况下无法访问其他应用程序资源。 APP 权限机制为应用程序之间的资源互访提供了可行性,APP必须申请到权限并经过用户授权后才能访问 Android 系统 API 或 其他阴功程序的服务。
如果两个 Android App 运行在同一个进程里(此时的 UID 是相同的),可以共享数据和代码。
如何让两个 APP 运行在同一个进程里?
- 首先,两个 APP 要用相同的 private key 来签名
- 然后,添加两个APP manifest.xml 文件中属性 android:sharedUserId,均设置为相同的值或名字(其实是设置成相同的UID)。
利用ShareUserID共享数据
try {
Context ct=this.createPackageContext ("com.mythou.serviceID", Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences sp = ct.getSharedPreferences("appInfo", MODE_PRIVATE);
String str2 = sp.getString("appname", "service");
Log.d("mythou", "share preference-->" + str2);
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
关键代码:
Context ct=this.createPackageContext("com.mythou.serviceID", Context.CONTEXT_IGNORE_SECURITY);
Android Permission 机制
Permissions 机制限制应用访问特定的资源,如照相机、网络、外部存储、查看通话记录以及某些API。
APP 可以自己定义 Permission 来限制别的APP访问自己的资源。别的应用想访问此 APP 的资源,必须在自己的 AndroidManifest.xml 中添加此 Permission。自定义权限也是在 AndroidManifest.xml 通过 标签定义。
自定义一个 Permission,至少需要的元素是 name, description, label 和 protectionLevel。
我们最关心的选项是 protectionLevel
normal,默认值。系统自动授予此 Permission,在 APP 安装的时候能看到申请此 Permission。
signature,具有相同的 Signature的 APP,才能申请此 Permission,否则,系统拒绝。
dangerous,一般来说系统不会自动授予此 Permission,因为此 Permission 会有潜在的威胁;一般来说在使用 APP 的过程中,需要用到此权限,会弹出窗口,让用户来授权。
面试之路(13)-android apk之间共享数据的方式以及shareUserId详解的更多相关文章
- 多个Activity之间共享数据的方式
现在要做一个项目,多个Activity之间要共享数据,所以要考虑共享数据的方式. 其实有如下5种方式: 1.基于消息的通信机制 Intent ---bundle ,extra 数据类型有限,比如遇到 ...
- JAVA多线程提高四:多个线程之间共享数据的方式
多个线程访问共享对象和数据的方式 如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. 如果每个线程执行的代码不同,这 ...
- JAVA多线程学习八-多个线程之间共享数据的方式
多个线程访问共享对象和数据的方式 如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. 如果每个线程执行的代码不同,这 ...
- 面试之路(29)-TCP流量控制和拥塞控制-滑动窗口协议详解
拥塞: 拥塞发生的主要原因在于网络能够提供的资源不足以满足用户的需求,这些资源包括缓存空间.链路带宽容量和中间节点的处理能力.由于互联网的设计机制导致其缺乏"接纳控制"能力,因此在 ...
- Android应用程序组件Content Provider在应用程序之间共享数据的原理分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6967204 在Android系统中,不同的应用 ...
- 学习笔记4_ServletContext(重要整个Web应用的动态资源之间共享数据)
ServletContext(重要) 一个项目只有一个ServletContext对象! 我们可以在N多个Servlet中来获取这个唯一的对象,使用它可以给多个Servlet传递数据! 与天地同寿!! ...
- VC++共享数据段实现进程之间共享数据
当我写了一个程序,我希望当这个程序同时运行两遍的时候,两个进程之间能共享一些全局变量,怎么办呢?很简单,使用VC\VC++的共享数据段.; #pragma data_seg()//恢复到正常段继续编程 ...
- 多线程(四) 实现线程范围内模块之间共享数据及线程间数据独立(Map集合)
多个线程访问共享对象和数据的方式 1.如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. 2.如果每个线程执行的代码 ...
- 多线程(三) 实现线程范围内模块之间共享数据及线程间数据独立(ThreadLocal)
ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.JDK 1.2的版本中就提供java.lang.ThreadLocal,使用这个工具类可以很简洁地编写出优美的多线程程序,Threa ...
随机推荐
- Ubuntu 安装 texlive2013 及中文支持
分享一下安装和配置经验. 1.材料准备 texlive的安装包:可以百度下,这里也提供一个下载地址: http://mirror.hust.edu.cn/CTAN/systems/texlive/Im ...
- API创建员工
DECLARE lc_employee_number PER_ALL_PEOPLE_F.EMPLOYEE_NUMBER%TYPE := 'PRAJ_01'; ln_person_id PER_ALL_ ...
- AndroidVerifyBoot
253 Utils.write(image_with_metadata, outPath);254 }227行得到boot.img的size 238行new一个BootSignat ...
- Maven2插件开发入门
一.创建Maven项目 首先创建一个Maven插件项目,可以手动或使用mvn archetype:create从原型创建.pom.xml配置如下: 1 2 3 4 5 6 7 8 9 10 11 12 ...
- 04_NoSQL数据库之Redis数据库:set类型和zset类型
sets类型及操作 Set是集合,它是string类型的无序集合.set是通过hash table实现的,添加,删除和查找复杂度都是0(1).对集合我们可以取并集.交集.差集.通过这些操作我们可 ...
- 【翻译】如何在Ext JS 6中使用Fashion美化应用程序
原文:How to Style Apps with Fashion in Ext JS 6 在Ext JS 6,一个最大的改变就是框架合并,使用一个单一的代码库,就可以为每一种设备开发各具有良好体验的 ...
- C++ Primer 有感(异常处理)(三)
先看下面的代码: [cpp] view plaincopy int main() { int *i=new int(10); /* 这中间的代码出现异常 */ delete i; return 0; ...
- git的撤销动作
有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了.想要撤消刚才的提交操作,可以使用--amend 选项重新提交: $ git commit --amend -m"修改 提交 ...
- javascript之BOM编程Screen(屏幕)对象
这个对象属性相对比较简单.掌握四个方法即可. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" & ...
- Zookeeper实现数据的发布和订阅
使用场景 当一个对象的改变,需要通知其他对象而且不知道要通知多少个对象,可以使用发布订阅模式 .在分布式中的应用有配置管理(Configuration Management) .集群管理 ...