`
810364804
  • 浏览: 819702 次
文章分类
社区版块
存档分类
最新评论

android 多进程编程 必看!

 
阅读更多

关于进程的基础概念不再赘述

首先讨论如果一个程序内存在多个进程时创建顺序

看如下代码

public class MyApplication extends Application{

	public static int test = 0;
	@Override
	public void onCreate() {
		super.onCreate();
		Log.i("ydp", "MyApplication onCreate pid:"+Process.myPid());
		startService(new Intent(this, ServiceA.class));
		startService(new Intent(this, ServiceB.class));
	}
	
}
MyApplication会在程序首次载入时运行onCreate方法,里面我开启了两个Service,

ServiceA在配置文件里标明了使用单独进程

<service android:name=".ServiceA" android:process=":service"></service>


大家是不是觉得步骤是这样,

MyApplicationonCreate--->ServiceA onStart 并创建新进程 ---->ServiceB onStart 保持原进程

现实比想像严峻的多啊,先看看LOG输出

MyApplication onCreate pid:26660
MyApplication onCreate pid:26673
Service A onStart pid:26673
Service A onStart pid:26673
Service B onStart pid:26660
Service B onStart pid:26660

不难看出,实际实际情况是首先创建一个PID为26660的Application,在遇到startServiceA时,由于ServiceA采用了新的进程,则先要初始化该进程,所以又创建了一个PID为26673的Application实例,新进程实例出来,26660进程的startServiceA才得以继续,由于此时已经存在两个进程,两个独立的虚拟机,所以我们看到26673进程也执行了startServiceA,此时由于新进程已存在,所以不再重新创建,最后两个进程有互不干扰的执行了startServiceB


事实是android在遇到需要放在新进程的组件时,首先创建此进程,此时当前进程的当前线程是阻塞的,直到新进程创建。


所以当我们要启动单独进程组件时需要注意,进程的创建会影响继承了Application的实例,里面的方法会完全再执行一遍,很多认喜欢把大量初始化工作放在里面,尽管进程由于处于不同虚拟机,里面的所有内存私有,但一些影响文件、UI等无进程概念的问题会出现。


分享到:
评论

相关推荐

    Android C++高级编程:使用NDK(完整版带书签).pdf

    最后,本书可能包含了一些高级话题,比如异步编程模型(如使用libuv)、多进程通信、硬件加速以及使用NDK进行安全编程的策略。 总的来说,《Android C++高级编程:使用NDK》是Android开发者深入学习C++和NDK的宝贵...

    android编程 android编程入门 android开发 android软件

    Android编程入门是学习Android开发的基础,它涉及到许多关键概念和技术,包括应用程序的组成元素、Activity与Task管理、进程和线程以及元素的生命周期。 一、应用程序的组成元素 1. **Activity元素**:Activity是...

    《Android高级编程》

    《Android高级编程》是Android领域的一本经典教程书籍,由经验丰富的软件开发者Reto Meier撰写,后由王鹏杰和霍建同翻译为中文版。本书详细介绍了Android软件栈的基础和高级功能,适合那些希望深入学习Android开发...

    Android 2高级编程

    在Android 2高级编程中,首先会探讨Android系统架构的深度解析,包括运行时环境、进程与线程管理,以及应用程序组件的生命周期。理解这些基础将有助于开发者更好地设计和实现高效的Android应用。 接着,本书会深入...

    Android编程指南(中文)

    ### Android编程指南知识点详解 #### 一、应用程序基础 - Application Fundamentals **1. 关键类** Android 应用程序的基础构建块是一组核心类,它们定义了应用程序的行为和交互方式。 - **Activity**: Activity...

    android多线程高效编程

    根据标题《android多线程高效编程》和描述内容,我们可以了解到本书将从基础层面介绍线程和进程的概念,这是Linux内核管理执行流的基本单位,也是Android操作系统多任务处理的核心。然后,书中重点在于介绍Android...

    Android编程入门很简单.(清华出版.王勇).part1

    书名:《Android编程入门很简单》(清华大学出版社.王勇)。 压缩打包成2部分,这是第1部分。 本书是一本与众不同的Android学习读物,是一本化繁为简,把抽象问题具体化,把复杂问题简单化的书。本书避免出现...

    Android环境下Socket编程,服务器端和客户端通讯

    在Android环境中进行Socket编程是构建网络应用程序的关键技术之一,它允许设备之间通过TCP/IP协议进行双向通信。在本文中,我们将深入探讨如何在Android平台上实现服务器端和客户端的Socket通讯,以及如何创建9999...

    Android高级网络编程技术实践

    在Android平台中进行高级网络编程时,涉及到的核心知识点主要包括网络通信机制、TCP与UDP协议、多线程处理以及数据缓冲等技术。下面将详细介绍这些知识点,并解析如何在Android中实现基于Socket的网络通信。 ### ...

    Android4高级编程(第3版)英文版

    18. **Advanced Android Development**:在这一章节中,作者可能会展开讲述一些更深层次的开发技术,如多进程编程、性能优化等。 19. **Monetizing, Promoting, and Distributing Applications**:任何商业应用都...

    Hikvision Android播放库编程指南

    ### Hikvision Android播放库编程指南V7 #### 一、产品简介 海康威视播放库SDK(简称“播放库SDK”),是由杭州海康威视数字技术股份有限公司开发的一款针对Android平台的多媒体播放软件开发工具包。该SDK旨在为...

    Android开发中的多线程编程技术

    ### Android开发中的多线程编程技术详解 #### 一、多线程编程的重要性与挑战 在Android开发过程中,多线程编程技术对于提高应用程序的性能和用户体验至关重要。...希望本文对您理解和应用Android多线程编程有所帮助。

    Android Socket编程客户端服务器端源码

    在Android开发中,Socket编程是实现设备间通信的重要手段,特别是在构建网络应用时。本教程将深入探讨Android Socket编程的基本概念、客户端与服务器端的实现以及相关源码解析。 一、Socket基本概念 Socket,也被...

    Android编程笔试题

    ### Android编程笔试题知识点解析 #### 一、列表视图设计与实现 ...总之,这份Android编程笔试题涵盖了列表视图设计、数据处理、网络请求、系统集成以及代码提交等多个方面,对考生的综合技能提出了较高要求。

    Android 2高级编程(第2版)

    《Android 2高级编程(第2版)》是Android开发者深入理解并提升技能的重要参考资料,其源代码提供了丰富的实践示例,帮助读者更好地理解和应用书中的理论知识。这本书涵盖了Android开发的诸多高级主题,包括但不限于...

    Android高级编程.pdf

    第1章 Android简介 1.1 一些背景信息 1.1.1 不远的过去 1.1.2 未来的前景 1.2 对Android的误解 1.3 开放的移动开发平台 1.4 自带的Android应用程序 1.5 Android SDK功能 1.5.1 对包括摄像头、GPS和加速计在内的硬件...

    Android高级编程--源代码

    作为使用androidsdk构建这些应用程序的实用指南书籍,《android高级编程》从始至终穿插了一系列示例项目,每个项目都引入android的新功能和新技术,以助您达到最圆满的学习效果。书中介绍android的所有基本功能,并...

    Android4高级编程(第3版)英文原版.pdf

    这一章节可能涵盖了一些高级话题,如性能优化、多进程编程、安全性等。 第十九章:Monetizing, Promoting, and Distributing Applications 本章讨论了如何将应用商业化,包括营销策略、应用发布和分发。 以上内容...

    Android编程指南.doc

    在Android编程领域,开发者需要掌握一系列关键概念和技术。本指南将深入探讨这些核心知识点,从编程环境搭建到界面设计,帮助你成为一名熟练的Android开发者。 一、编程环境搭建 1. 配置Android的开发环境:开发...

    android_游戏编程_从零开始.doc

    综上所述,Android游戏编程涉及到编程语言、Android平台特性、游戏设计原则等多个方面。从简单的 HelloWorld 示例开始,逐步深入到复杂的动画、碰撞检测和地图设计,随着技能的提升,开发者可以创建出更加丰富和...

Global site tag (gtag.js) - Google Analytics