当前位置: 首页 > news >正文

在柬埔寨做网站彩票推广/网页优化方案

在柬埔寨做网站彩票推广,网页优化方案,免费进出货管理软件app,装修公司品牌包装设计什么是进程 什么是进程?进程和线程是两种完全不同的概念,在我们的Android系统中,一个进程对应一个应用程序,但一个应用程序中可以有多个进程,市面上主流的App,很多是多进程的。     一个进程中可以包含…

什么是进程

什么是进程进程线程是两种完全不同的概念,在我们的Android系统中,一个进程对应一个应用程序,但一个应用程序中可以有多个进程,市面上主流的App,很多是多进程的。
    一个进程中可以包含多个线程。在最简单的情况下,一个进程可以只有一个线程,即主线程,在Android里面主线程也叫UI线程,在UI线程里才能做更新UI界面操作。在主线程中是不允许进行耗时操作的,否则可能导致应用程序ANR。为了避免ANR,我们一般都是把耗时操作放在子线程中进行。

为什么需要多进程

1. Android系统给单个应用可以使用的最大内存做了限制,有些app需要突破这个限制,想给应用程序获取更多的内存空间,那么可以通过多进程来获取更多的内存空间。

2. 有些特殊的模块需要不影响主模块的稳定性和占用主模块的内存。以及不受主业务进程生命周期影响,独立存在和运行。比如我们开发中常用的推送功能就需要使用多进程来实现。
3. app保活,有些app为了在后台运行时不被系统杀掉,往往会用多进程的方式来实现进程间互相监督,互相拉活来实现app保活。

多进程缺点

1. Application多次重建
    2. 静态成员变量和单例模式完全失效
    3. 线程同步机制完全失效
    4. SharedPreferences可靠性降低

对于造成上面第三个问题的原因其实很简单,因为在多进程情况下,他们都不在同一块内存区域,那么不管是锁对象还是锁全局类都无法保证线程同步。因为不同进程锁的对象都不一样。静态变量和单例模式失效的原因就是因为系统为每个进程都单独分配了一个独立的虚拟机,这样就导致在不同的虚拟机中访问同一个类会产生多份副本。所以静态成员变量和单例模式自然也就失效了。对于SharedPreferences可靠性降低降低是因为SharedPreferences不支持两个进程同时对其进行操作。因为SharedPreferences的底层就是通过读写XML文件来实现的。并发的去读写肯定是会出问题的。

实现跨进程通信的几种方式

Android SDK给我们提供了比如 Activity,ContentProvider,Service,和BroadCast等几种方式。也可以通过Socket来实现跨进程通信。
    其中:
    1.Activity可以跨进程调用其他应用程序的Activity;
    2.Content Provider可以跨进程访问其他应用程序中的数据(以Cursor对象形式返回),当然,也可以对其他应用程序的数据进行增、删、改操作;
    3.Broadcast可以向Android系统中所有应用程序发送广播,而需要跨进程通讯的应用程序可以监听这些广播;
    4.Service和Content Provider类似,也可以访问其他应用程序中的数据,但不同的是,Content Provider返回的是Cursor对象,而Service返回的是Java对象。这种可以跨进程通讯的服务叫AIDL服务,具体使用可以看Android中实现跨进程通信(IPC)的几种方式(二)和Android中实现跨进程通信(IPC)的几种方式(三)之观察者模式。

Activity方式
    Activity的跨进程访问与进程内访问略有不同。虽然它们都需要Intent对象,但跨进程访问并不需要指定Context对象和Activity的 Class对象,而需要指定的是要访问的Activity所对应的Action(一个字符串)。有些Activity还需要指定一个Uri(通过 Intent构造方法的第2个参数指定)。比如我们在Android系统中有很多应用程序提供了可以跨进程访问的Activity,例如,下面的代码可以直接调用拨打电话的Activity。

Intent callIntent = new  Intent(Intent.ACTION_CALL, Uri.parse("tel:87324443" );  
startActivity(callIntent);

Content Provider

Android应用程序可以使用文件或SqlLite数据库来存储数据。Content Provider提供了一种在多个应用程序之间数据共享的方式(跨进程共享数据)。应用程序可以利用Content Provider完成增删改查。
虽然Content Provider也可以在同一个应用程序中被访问,但这么做并没有什么意义。Content Provider存在的目的向其他应用程序共享数据和在有条件的情况下允许其他应用程序对数据进行增、删、改操作。
Android系统本身提供了很多Content Provider,例如,音频、视频、联系人信息等等。我们可以通过这些Content Provider获得相关信息的列表。这些列表数据将以Cursor对象返回。因此,从Content Provider返回的数据是二维表的形式。

广播(Broadcast)
    广播是一种被动跨进程通讯的方式。当某个程序向系统发送广播时,其他的应用程序只能被动地接收广播数据。这就象电台进行广播一样,听众只能被动地收听,而不能主动与电台进行沟通。在应用程序中发送广播比较简单。只需要调用sendBroadcast方法即可。该方法需要一个Intent对象。通过Intent对象可以发送需要广播的数据。

以上参考:Android中实现跨进程通信(IPC)的几种方式(一)

补充(service)

1.AIDL(Android Interface Definition Language,Android接口定义语言):大部分应用程序不应该使用AIDL去创建一个绑定服务,因为它需要多线程能力,并可能导致一个更复杂的实现。

2.Messenger:利用Handler实现。(适用于多进程、单线程,不需要考虑线程安全),其底层基于AIDL。

1.使用Messenger:

如需让服务与远程进程通信,则可使用Messenger为服务提供接口。
定义一个MessengerService继承自Service,并在AndroidManifest.xml中声明并给一个进程名,使该服务成为一个单独的进程。

Messenger的使用方法:

服务端实现一个Handler,由其接收来自客户端的每个调用的回调。
Handler用于创建Messenger对象(对Handler的引用)。
Messenger创建一个IBinder,服务端通过onBind()使其返回客户端。
客户端使用IBinder将Messenger(引用服务的Handler)实例化,然后使用后者将Message对象发送给服务端。
服务端在其Handler中(具体地讲,是在handleMessage()方法中)接收每个Message。

2.使用AIDL:

AIDL是一种接口描述语言,通常用于进程间通信。它用于让某个Service与多个应用程序组件之间进行跨进程通信,从而可以实现多个应用程序共享同一个Service.

使用AIDL的步骤:

创建AIDL,在main下新建一个文件夹aidl,然后在aidl下新建AIDL文件,这时系统会自动为该文件创建一个包名。
在java下新建一个类AIDLService继承自Service。
在AndroidManifest.xml中注册,并给一个进程名,是该服务成为一个独立的进程。
在MainActivity中进行与AIDLService之间的进程间通信。

以上补充的原文链接:https://blog.csdn.net/github_37130188/article/details/89577429

http://www.lbrq.cn/news/731719.html

相关文章:

  • 建筑装修装饰工程内容/产品seo优化
  • 电子商务网站开发方案/百度推广托管公司
  • 做网站标题代码/百度投放平台
  • 织梦做的网站后台/可以引流推广的app
  • 专业做公司宣传网站的/营销云
  • 广州市红十字会医院网站建设项目/成人职业培训机构
  • 做网站的你选题的缘由是什么/公司网络搭建
  • 龙口网站建设/百度世界500强排名
  • 孝感个人网站建设/全球搜
  • 苏州市建设中心网站首页/宁波seo入门教程
  • 微信如何添加小程序/seo推广费用需要多少
  • 广东网站备案查询/百度招商加盟推广
  • 网站服务器和网站备案/网页优化公司
  • 黑色炫酷灯饰照明科技企业商务网站模板/百度站长工具域名查询
  • 西安市高新区建设局网站/如何制作微信小程序
  • 某企业网站建设规划书/昆明网站seo优化
  • 做网站备案的问题/信息流优化师怎么入行
  • 凡客诚品售后/郑州官网网站优化公司
  • 重庆网站推广营销/网站开发框架
  • 优秀个人网站推荐/营销推广是什么意思
  • 可以做营销任务的网站/阿里数据
  • 个人备案转企业网站期间/武汉seo首页优化报价
  • 专业彩票网站开发/西安百度公司官网
  • 哪里有网站制作平台/seo如何优化关键词
  • 郑州网站建设公司qq/网站优化排名软件哪些最好
  • 1网站建设/企业网站建设费用
  • 建设部职称网站/谷歌seo零基础教程
  • 佛山出格建站/百度seo排名点击器
  • 购物网站开发需求分析/在线客服系统平台有哪些
  • 临朐网站建设价格/在百度上怎么注册网站
  • HTML5详篇
  • imx6ull-驱动开发篇33——platform 平台驱动模型
  • day075-MySQL数据库服务安装部署与基础服务管理命令
  • 实时视频技术选型深度解析:RTSP、RTMP 与 WebRTC 的边界
  • InnoDB为什么使用B+树实现索引?
  • JavaScript 性能优化:new Map vs Array.find() 查找速度深度对比