Android onDestroy方法执行延迟的原因

一整天过去,终于发现了自己项目中的这个问题所在,onDestroy方法执行延迟是因为——>页面跳转代码要放在当前Activity的finish()方法之前执行

 

以下为整个事件的过程(仅作个人记录):

 

A活动启动了M服务(bind方式),之后A销毁了并执行停止M服务的操作,然后进入B活动去再次启动M服务(bind方式),若之前A活动停止M服务时还没停止完,此时B活动去启动该M服务,是不会再次bind的(原理:一个运行的service只会被bind一次)——>而目的就是要重新启动该M服务


基于这种情况,应该如何做?
(或者说,如何将第一次活动停止服务时,让它真正停止,从而不会影响到下一次启动该服务?)

 

而仔细分析下以上现象:

1.为什么第一次service没被停止?

2.为什么第一次service 执行 unBind()后还会执行一段时间?

 

通过日志发现问题②,service在执行unBind()方法后其实是在很短时间就停止了,根本就没有长达几秒钟才结束,所以问题①才是症结所在。

 

我的service是放在onDestroy方法中执行unBind()方法的,通过日志发现,在手机屏幕中看到页面跳转后并没有发现A活动的onDestroy()方法有立即执行,而一当进入了onDestroy()方法体内后,service就立即执行了unBind()方法了——>由此推出:onDestroy()方法执行延迟才是问题所在。

 

之后找到了如下页面跳转代码:

 

 <span style="white-space:pre">	</span>   //1.finish当前activity
            ((TomatoCountTimeAct) myContext).finish();
            LogTool.log(LogTool.Aaron, "TimeArriveReceiver 进入了TomatoCountTimeAct的判断逻辑——执行了finish");

            //2.进行下一个activity的跳转
            Intent intent1 = new Intent(myContext, TomatoTemporaryAct.class);//跳转至“中间临时页”
            intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent1);


将以上代码中:当前Activity的finish()方法与下一个activity的跳转代码顺序更换一下即可达到要求——>当页面跳转后前一个activity的onDestroy()方法就很快执行了。

 

(小发现:页面跳转的默认动画是不一样的:finish()方法执行在跳转代码之前时,页面是从底部弹出来,而finish()方法执行在跳转代码之后时,则页面是从右往左弹过来)

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ganshenml

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值