android生命周期代码,Android活动生命周期和JNI本机代码生命周期

我有一个简单的应用程序与本机代码.也就是说,Activity加上本机代码.

当活动进入后台时,我会保持本机代码运行以进行一些处理.问题是当活动被操作系统杀死时(由于资源不足),JNI代码似乎不知道Java领域发生了什么,仍然在做它的工作,因此浪费了资源.为什么Android只会杀死Activity而不是整个进程?在这种情况下,本机代码如何知道活动被杀死了?可能无法调用OnDestroy().

解决方法:

Android应用程序中的Activity在文档中描述为

An activity is a single, focused thing that the user can do.

它通常在屏幕上可见,并引起用户的注意.它与一个状态机相关联,该状态机描述了当另一个活动变为活动时显示和隐藏的生命周期.操作系统可自由地启动和停止活动,因为它选择了 – 并且内存允许.

此外,Android架构的一个关键点是活动和服务是可重用的软件组件,并不一定与流程有一对一的关系.在同一过程中,您的活动可能是系统中另一个进程正在使用的服务.

如果活动收到onPause(),onStop(),onDestroy()通知时,代码的JNI部分仍然在后台处于活动状态,则只能是因为您尚未将这些消息转发给它.系统当然不知道如何清理本机代码的资源利用率 – 特别是使用new()或malloc()分配的内存.除非您将其释放,否则只有在流程终止时才能恢复.

如果您担心的是您的活动没有被系统快速杀死,并且因此保留了对原生土地资源的引用,那么这是系统不受资源限制的好兆头.

您可以考虑将应用程序的本机部分实现为Service,并在短时间内自行销毁.

标签:android,android-activity,lifecycle,java-native-interface

来源: https://codeday.me/bug/20190624/1282327.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值