Android开启多进程,和进程间通信的几种方式

在一个应用中启动多个进程

  • 例如:将自己封装的CommonWebViewActivity在一个单独的进程中启动
    使用android:process
        <activity
            android:name=".activity.CommonWebViewActivity"
            android:process=":webview"
            android:screenOrientation="portrait" />
  • 需要特别说明的是,android:process=":webview" 中的webview名字是自定义的,而冒号":"的含义是当前进程名前附加上当前的包名。那么刚刚所创建出的Activity的完整进程名就为com.example.zhangyu:webview
    当然你也可以自己设置完整地进程名,如android:process="com.example.process:webview"这便是一种完整地命名方式。
    • 以:开头的进程,是APP的私有进程,不允许其他APP的组件来访问。
    • 如果这个进程的名字是以小写字符开头的,则这个服务将在一个以该名字命名的全局的进程中运行。当然前提是,它要有相应的权限,这将允许它在不同应用中的各个组件可以共享一个进程。从而减少资源的占用。
  • Application多次创建
    不同进程跑在不同虚拟机,每个虚拟机启动会创建自己的Application

进程间通信方式

  • SharedPreferences
    可靠性下降,不支持并发写,会出现脏数据。
  • Activity
    可以跨进程调用其他应用程序的Activity
  • ContentProvider
  • BroadcastReceiver
  • Service
    Content Provider类似,也可以访问其他应用程序中的数据, 但不同的是,ContentProvider返回的是Cursor对象, 而Service返回的是Java对象,这种可以跨进程通讯的服务叫AIDL服务。
  • Socket
    学过计算机网络的对Socket不陌生,所以不需要详细讲述。只需要注意,Android不允许在主线程中请求网络,而且请求网络必须要注意声明相应的permission。然后,在服务器中定义ServerSocket来监听端口,客户端使用Socket来请求端口,连通后就可以进行通信。

参考资料

猜你喜欢

转载自blog.csdn.net/yu540135101/article/details/113801266