Android多进程注意事项
2017-02-20 09:55
141 查看
本文为转载,原文链接为:http://blog.spinytech.com/2016/11/20/android_multiple_process_notice/
由于每个进程创建以后,都会拥有独立的空间,独立的VM,所以,很多Java特性都会在多进程开发中失效。
因为进程间,内存空间是相互独立的,所以VM方法区内的静态变量也都是相互独立的。因为单利模式是基于静态变量的,所以单例也会失效。在两个不同进程访问一个相同类的静态变量,所得的值未必相同,所以在开发中请避免此类代码。
由于Java的同步机制是VM来进行调度的,两个进程拥有两个不同的VM,所以,同步也会在多进程开发中失效。synchronized关键字、voliate关键字等都是基于VM级别的同步,所以请不要跨进程去使用线程同步。比如主进程有个生产者,子进程的消费者是无法正常使用消费功能的,只能通过跨进程通信,让主进程的消费者去消费,然后再回调。
每个新进程在创建的时候,都会新建一个Application,所以多进程还会面临着Application多次创建的问题,
这里的文件指的泛指所有需要并发访问的文件,例如:本地文件,数据库文件,sharepreference等。由于Java中,文件锁、队列机制都是VM级别的,所以不同进程访问同一个文件锁是不管用的。(通过C++可以实现多进程文件锁机制,不过不在文本讨论范围内。)所以在实际开发过程中,还是避免多进程同时访问统一文件,多利用Android中IPC的C/S思想,提供服务,接口调用,避免直接去访问对方进程的文件或者数据库,提升设计美感,同时也能提升代码的稳定性。
多虚拟机潜在的问题
由于每个进程创建以后,都会拥有独立的空间,独立的VM,所以,很多Java特性都会在多进程开发中失效。
1.静态变量和单例模式完全失效
因为进程间,内存空间是相互独立的,所以VM方法区内的静态变量也都是相互独立的。因为单利模式是基于静态变量的,所以单例也会失效。在两个不同进程访问一个相同类的静态变量,所得的值未必相同,所以在开发中请避免此类代码。
2.线程同步机制完全失效
由于Java的同步机制是VM来进行调度的,两个进程拥有两个不同的VM,所以,同步也会在多进程开发中失效。synchronized关键字、voliate关键字等都是基于VM级别的同步,所以请不要跨进程去使用线程同步。比如主进程有个生产者,子进程的消费者是无法正常使用消费功能的,只能通过跨进程通信,让主进程的消费者去消费,然后再回调。
Application会多次创建
每个新进程在创建的时候,都会新建一个Application,所以多进程还会面临着Application多次创建的问题,onCreate方法会多次被调用。解决的办法其实也不是很麻烦,因为Application会多次创建,所以我们可以根据进程名来区分不同的进程,进行不同的初始化,同时,不要在Application中设置过多的静态变量,导致内存增加。
文件读写潜在的问题
这里的文件指的泛指所有需要并发访问的文件,例如:本地文件,数据库文件,sharepreference等。由于Java中,文件锁、队列机制都是VM级别的,所以不同进程访问同一个文件锁是不管用的。(通过C++可以实现多进程文件锁机制,不过不在文本讨论范围内。)所以在实际开发过程中,还是避免多进程同时访问统一文件,多利用Android中IPC的C/S思想,提供服务,接口调用,避免直接去访问对方进程的文件或者数据库,提升设计美感,同时也能提升代码的稳定性。
相关文章推荐
- Android 多进程注意事项
- Ubuntu 10.10编译Android2.2 froyo 注意事项
- android应用程序新建layout文件注意事项
- J2ME转Android游戏开发时注意事项
- android 系统应用 开发 注意事项(该版本采用方法效率较高)
- Android使用Parcelable传递对象方法及注意事项
- Android中关于线程使用的几点注意事项
- 门道儿众多 购买Android手机注意事项
- android bionic移植需要注意的事项
- 如何混淆android代码以及注意事项
- android java编程注意事项
- C++在android上的使用注意事项
- Android高效编程注意事项
- android java编程注意事项 收藏
- 学习android过程中,要注意的事项
- Android安装注意事项
- Android高效编程注意事项
- Android高效编程注意事项
- 关于android:layout_weight属性使用注意事项
- Android菜单设计(2) : options menu使用注意事项