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()方法执行延迟才是问题所在。


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

 	   //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()方法执行在跳转代码之后时,则页面是从右往左弹过来)



你可能感兴趣的:(android,Android开发学习)