一般前后台切换,大家用的最多的就是利用
- Application.ActivityLifecycleCallbacks 来做监听;
- 利用ProcessLifecycle做监听;
问题来了,这两种方式,对于涉及到多进程的地方,结果预期都不太正确,例如:
App包含 ActivityA,ActivityB(另一个进程:otherprocess)
当 ActivityA 跳转到 ActivityB时,如果利用上述两种方式,那么主进程已经回调处于后台了,但是其实ActivityB也是当前app的页面,所以应该还算处于前台才对。
对于涉及到多进程的情况,如何完美解决呢?
更多问答 >>
-
2022-11-08 21:50
-
2022-11-08 21:50
-
每日一问 | App在运行状态,可以动态安装apk,并且不重新启动吗?
2022-11-20 12:46 -
每日一问 | 瘦身属性?对android:extractNativeLibs属性的探讨
2022-12-07 14:43 -
每日一问 | Android 默认开启硬件加速与设置hardwareAccelerated是一回事吗?
2023-05-24 17:30 -
每日一问 View.post 又来了与View.postOnAnimation 有什么区别?
2022-07-03 10:47 -
【大家提问】Android中的匿名binder与线程相关的一些问题
2022-07-03 10:48 -
2022-06-12 14:41
-
2022-05-27 20:55
-
每日一问 | Service onStartCommand 返回STICKY是如何做到被拉活的?
2022-07-24 11:50
当只存在单个进程的时候 一般我们通过记录当前应用中是否有可交互的Activity(处于resume)
再多进程时每个进程拥有独自的内存,可以通过共享内存的方式来记录有多少个位于前台可交互的Activity 。每个进程监听自己的前台activity 变化 及时更改到共享内存当中。MMKV 框架提供了 MMKV.mmkvWithAshmemXX 可以借助MMKV 实现内存共享。从而判断当前应用是否在前台我是使用uniapp小程序SDK遇到了这个问题,我的解决方式比较笨,就是主进程监听Application.ActivityLifecycleCallbacks,然后在事件中判断子进程的顶层页面是哪一个,如果是小程序SDK中的页面,就做好兼容判断。此不够灵活,但也没有好的方法,因为小程序SDK中的代码无法修改。
我在获取顶层页面的时候,遇到一个问题,从UniMP 回到桌面,获取到的顶层还是 DCUniMPTopActivity ,此时 主进程和子进程都在后台,求你的方案代码 ...查看更多
我在获取顶层页面的时候,遇到一个问题,从UniMP 回到桌面,获取到的顶层还是 DCUniMPTopActivity ,此时 主进程和子进程都在后台,求你的方案代码
ProcessLifecycle和多进程通信配合使用
ActivityLifecycleCallbacks的监听在otherprocess进程也可以注册的,只要有activity在resume就行了。
仅仅使用ActivityLifecycleCallbacks 的问题在于没办法准确的判断应用在前台,当otherprocess 在前台时,主进程没办法判断自己是不是在前台 ...查看更多
仅仅使用ActivityLifecycleCallbacks 的问题在于没办法准确的判断应用在前台,当otherprocess 在前台时,主进程没办法判断自己是不是在前台
可以将记录的resume状态固定在一个进程对外提供访问接口。
首先不太理解为啥要单独设计多进程APP,然后如果涉及多进程APP,那么就需要使用到跨进程通信这样保证数据完整性,交互才不会出现问题,如果你是需要两个进程状态都是前台进程的话,那么建议自定义个状态,而不是监听进程的状态。
有认真看题吗
App涉及多进程很正常吧
你引入一些SDK自然就有多进程了
提供一种场景吧, 插件化页面运行在独立的进程, 进程奔溃了不会影响主进程
触发源:
Application.ActivityLifecycleCallbacks 来做监听;利用ProcessLifecycle做监听;数据源:
UsageStatsManager,捞到对应的数据后包名过滤统计即可;UsageStatsManager 这个需要权限吧
建议 ProcessLifecycle 和
配合使用
Note: this method is only intended for debugging or building a user-facing process management UI. 此方 ...查看更多
Note: this method is only intended for debugging or building a user-facing process management UI. 此方法仅用于调试或构建面向用户的流程管理 UI。
多进程的情况下,配合isAppForeground()好像也没多大的作用,毕竟从A进程前台跳转到B进程时,B进程此时也是前台状态
隐私合规过不了吧