Android进程间通讯——AIDL,Messenger(信使),ContentProvider,Clipboard(剪切板)
2015-03-09 17:06
519 查看
今天逛论坛看到这么一个问题:android中同一个应用程序的activity和service属于同一个进程吗?回答什么的也有啊。在这里简单的记录一下。
在Android系统中,每一个应用程序都是由一些Activity和Service组成的,一般Service和Activity有运行在同一个进程中(adb shell
dumpsys |grep PID |grep 关键字),也有可能运行在不同的进程中。一般情况下,同一个应用程序的Activity组件都是运行在同一个进程中,但是,如果Activity配置了android:process这个属性,那么,它就会运行在自己的进程中。如果android:process属性的值以":"开头,则表示这个进程是私有的;如果android:process属性的值以小写字母开头,则表示这是一个全局进程,允许其它应用程序组件也在这个进程中运行。
原因看一下源码在frameworks/base/core/java/android/content/pm/PackageParser.java文件中:
参考网址:
http://blog.csdn.net/luoshengyang/article/details/6720261#reply
在Android系统中,每一个应用程序都是由一些Activity和Service组成的,一般Service和Activity有运行在同一个进程中(adb shell
dumpsys |grep PID |grep 关键字),也有可能运行在不同的进程中。一般情况下,同一个应用程序的Activity组件都是运行在同一个进程中,但是,如果Activity配置了android:process这个属性,那么,它就会运行在自己的进程中。如果android:process属性的值以":"开头,则表示这个进程是私有的;如果android:process属性的值以小写字母开头,则表示这是一个全局进程,允许其它应用程序组件也在这个进程中运行。
原因看一下源码在frameworks/base/core/java/android/content/pm/PackageParser.java文件中:
private boolean parseApplication(Package owner, Resources res, XmlPullParser parser, AttributeSet attrs, int flags, String[] outError) throws XmlPullParserException, IOException { final ApplicationInfo ai = owner.applicationInfo; final String pkgName = owner.applicationInfo.packageName; TypedArray sa = res.obtainAttributes(attrs, com.android.internal.R.styleable.AndroidManifestApplication); ...... if (outError[0] == null) { CharSequence pname; if (owner.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.FROYO) { pname = sa.getNonConfigurationString( com.android.internal.R.styleable.AndroidManifestApplication_process, 0); } else { // Some older apps have been seen to use a resource reference // here that on older builds was ignored (with a warning). We // need to continue to do this for them so they don't break. pname = sa.getNonResourceString( com.android.internal.R.styleable.AndroidManifestApplication_process); } ai.processName = <span style="color:#006600;">buildProcessName(ai.packageName, null, pname, flags, mSeparateProcesses, outError); </span> ...... } ...... }从调用parseApplication函数解析application标签开始,通过调用buildProcessName函数对android:process属性进解析,接着又会调用buildCompoundName进一步解析,这里传进来的参数pkg就为你的包名,参数procSeq为MainActivity的属性android:process的值你清单文件中设置的值,进一步将这个字符串保存在本地变量proc中。如果proc的第一个字符是":",则只需要调用validateName函数来验证proc字符串里面的字符都是合法组成就可以了,即以大小写字母或者"."开头,后面可以跟数字或者"_"字符;如果proc的第一个字符不是":",除了保证proc字符里面的字符都是合法组成外,还要求至少有一个"."字符。
参考网址:
http://blog.csdn.net/luoshengyang/article/details/6720261#reply
相关文章推荐
- Android进程间通讯——Clipboard(剪切板)
- Android跨进程数据通讯-剪切板Clipboard
- Android查缺补漏(IPC篇)-- Bundle、文件共享、ContentProvider、Messenger四种进程间通讯介绍
- Android进程间(IPC机制)通信(Bundler,Messenger,AIDL,ContentProvider)
- Android进阶笔记04:Android进程间通讯之Messenger ( 区别于AIDL)
- Service练习——通过Messenger(信使)来实现IPC通讯(Messenger底层使用AIDL实现)
- Android Service Messenger & AIDL 的跨进程通信例子 推荐
- Android:进程间通讯AIDL
- Android应用中通过AIDL机制实现进程间的通讯实例
- android 不同进程间的调用 AIDL 实现通讯服务
- android Aidl进程间通讯解决空指针异常问题
- Android应用中通过AIDL机制实现进程间的通讯实例
- android进程间通讯流程分析:使用 Binder和AIDL
- Android应用中通过AIDL机制实现进程间的通讯实例
- Android开发中实现跨进程通讯的AIDL接口
- android aidl进程间的通讯(笔记)
- Android中进程间通讯 AIDL
- Android应用中通过AIDL机制实现进程间的通讯实例
- Android应用中通过AIDL机制实现进程间的通讯实例
- Android进程间通讯之初见(IPC,RPC,LPC,BINDER,AIDL..)