pendingIntent 功能上来讲 是延迟执行的Intent,首先来看看延迟为什么需要延迟,某些场景下 我们并不能立马拿到交互结果需要等待一段时间才可以,比如通知点击,弹窗提醒,消息通知的最常用的就是pendingIntent。
如果是同一个进城的延迟执行很容易实现,可如果是跨进程的延迟执行intent可就有很多问题了,下面来讲讲有什么问题
跨进程的操作,一般来说 我们会通过远程service来处理这个操作,然后客户端 服务端双方商定好协议就可以进行通信和交互;如果服务端 处理过程中 涉及到需要客户端执行客户端组件的操作(启动客户端组件)同样也是约定好协议 服务端发送请求让客户端执行对应的组件操作(其实也就是Intent)。
两个注意点:
大家其实会发现 上面说的服务端请求完全没有必要发送,只需要第一次在请求服务端的时候把需要客户端指定执行的组件操作(Intent)放到Intent的参数里面即可。
这里需要注意由于使用的是服务端的context启动的Intent而由于服务端没有客户端的组件所以会报错,因此需要客户端主动暴露(export)组件;
这里的缺点有两个方面,一个是针对客户端,一个是针对服务端:
其次由于使用的是Service进程的Context,所以携带过来的intent是可以调起服务端的组件.
官方有解释这种情况,下面的文章:
https://juejin.cn/post/6953077703671021575
从问题入手分析解决方案,背景是我们需要跨进程执行客户端的组件(跨进程执行Intent),问题是需要暴露客户端组件而且服务端的context也会被滥用。
如果我们能够让执行Intent的context是客户端呢?这样客户端不需要暴露组件,服务端也不会用自己的context调用intent自然不可以拿到服务端的组件信息。
上面一大段话 就是为了引出这个核心(也是pendingIntent最大的作用):身份切换。
方案有了,其次这种场景还特别常见,比如点击通知,推送信息,客户端/服务端自定义需求,那么这些信息就需要一个可信的,安全的地方统一保存,答案就是系统来帮忙做。
首先系统需要知道哪些Intent需要切换,其次是知道怎样进行切换。官方提出了PendingIntent来帮助我们实现。
哪些Intent需要进行切换,其实就是需要把“跨进程调用客户端组件”的意图信息保存到系统中,在服务端使用的时候自动帮我们切换为客户端的身份去执行这个intent。
这个是PendingIntent相对于Service的优点:
总之,使用PendingIntent可以帮助您简化代码、实现跨应用程序支持、自定义操作行为等,提供更多的灵活性和便利性。但是,具体选择使用服务还是PendingIntent,还需要根据您的实际需求来决定。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。