Android笔记:调用finish()后不能立即执行onDestroy()的BUG

项目中使用微博sdk返回时出现当前activity调用了finish()却无法立即执行onDestroy(),排查了好久仍找不到问题源头。百度了下竟然还真能通过这方法解决,做个笔记吧。

在目前项目中(android2.0),发现一个严重BUG。当打开了A,B两个页面的时候,此时当前页面为B,如果在B中调用finish()后,虽然已经回到了A,但B却并没有执行onDestroy()方法,只有在手机上按动了某一个按键后,这时才会执行B.onDestroy()。B才会完全销毁。另:如果按手机自带的返回按钮,却不会出现这种情况。

因此,如果此时在onDestroy()方法有一些操作的话,那么在回到A不进行按键操作的话,B并没有及时销毁,所以不会做方法中的这些操作。

经过定位修改后发现,此BUG是由于在AndroidManifest.xml中对A页面设置了android:theme="@android:style/Theme.NoTitleBar"。而B页面并没有设置此参数造成的。把B增加此设置后,问题解决。

虽然问题已解决,但一直没有明白未设置android:theme="@android:style/Theme.NoTitleBar"的页面,为什么会在finish()后不能马上调用onDestroy()。按理说两者不应该有什么关联才是。

参考:http://blog.sina.com.cn/s/blog_5da93c8f0101nrx5.html

时间: 2024-08-10 14:34:27

Android笔记:调用finish()后不能立即执行onDestroy()的BUG的相关文章

android 在finish()的时候不是立刻调用onDestory,怎样才能在finish后立刻回调onDestory?

============问题描述============ private MyAIDLService myAIDLService; private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentN

Android finish后没有执行 onDestory()

如果要保存数据或者有数据相关操作,最好在onPause函数中,因为onDestroy的函数有可能不执行. There are situations where the system will simply kill the activity's hosting process without calling this method (or any others) in it, so it should not be used to do things that are intended to r

【转】Android 学习笔记——利用JNI技术在Android中调用、调试C++代码

原文网址:http://cherishlc.iteye.com/blog/1756762 在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在Android中会生成Linux系统下的.so文件(好吧,其实我基本没用过Linux). 没写过JNI的可以看看我之前的博客(Windows下利用Visual Studio开发的过程):http://cherishlc.iteye.com/admin/blogs/1328136 以及自动生成工具swig的

Windows批处理 调用程序后 不等待子进程 父进程继续执行命令

从DOS过来的老鸟应该都知道批处理,这个功能在WINDOWS中仍然保留着.批处理 说白了就是把一系列DOS命令写在一个文本文件里,然后把这个文件命名为XXX.bat(WINXP以后的系统也可以命名为*.cmd),然后运行它就可 以一次执行一系列命令和程序了,当然也包括WINDOWS下的程序. 昨天处理一个问题时需要写一个批处理,批处理的前面运行了几个DOS命令,最后调用一 个WINDOWS程序.可问题是,调用的WINDOWS程序打开后,CMD命令提示符窗口不会关闭,而是要等待这个WINDOWS程

Android笔记:Activity

1.Android可视化界面结构:    一个Android应用的可视化界面最底层是Activity,在他之上是一个Window对象,在window之上通常是布局容器,再上面才是用户直接交互的组件(按钮,文本框) 交互组件(UI控件)-->布局容器(layout)--->Window对象--->Activity2.Activity生命周期    Activity是以栈的形式管理的,当前活动的Activity位于栈顶,其他的Activity则处于非活动状态.        Activiy生

Android笔记之四种launchMode

一.先来了解Task Task 顾名思义,任务,每一个Android应用在运行的时候,都会创建和维护一个属于自己的任务,而事实上,Task是一个包含栈结构的容器,该栈通常叫回退栈,用来保存当前所有Android应用中已经创建的窗口对象,通常我们看到的界面就是处于回退栈栈顶的窗口对象.当我们打开新的一个界面,那么之前的界面(窗口对象)就会压入栈内,让出栈顶位置给新来的界面(窗口对象):当关闭该窗口对象时,系统会首先将该对象弹出栈,并销毁该对象.当栈里最后一个窗口对象被弹出栈后,回退栈为空,这时候回

Android笔记-活动生命周期&Bundle回收临时数据&活动启动模式&常用技巧

Android使用任务(Task)管理活动,是一组存放在返回栈(Back Stack)里的活动的合集: 系统总是显示栈顶活动给用户: 启动新活动->新活动入栈 按下Back键或调用finish()->栈顶活动出栈 活动生命周期的四种状态: 1. 运行状态:处于栈顶 2. 暂停状态:不处于栈顶,但仍然可见 3. 停止状态:不处于栈顶,完全不可见,系统仍然保存其状态和成员变量,但不可靠 4. 销毁状态:从栈中移除,活动被系统回收 Activity的七个回调方法: 1. onCreate():活动第

Android笔记:触摸事件的分析与总结----TouchEvent处理机制

   其他相关博文:    Android笔记:触摸事件的分析与总结----MotionEvent对象    Android笔记:触摸事件的分析与总结----TouchEvent处理机制 Android中的事件类型分为按键事件和屏幕触摸事件.TouchEvent是屏幕触摸事件的基础事件,要深入了解屏幕触摸事件的处理机制,就必须掌握TouchEvent在整个触摸事件中的转移和处理过程.此处将对TouchEvent处理机制的学习做个小小的总结和备记. 当屏幕中包含一个ViewGroup,而这个Vie

Android笔记之属性动画

前言.动画分类 如下图所示,Android的动画主要分为三种: 下面首先说说 属性动画 所谓属性动画-- 就是指对象的属性值发生了变化,如控件位置和透明度等. 举例,现在要实现一个按键先下移,再右移的动画. (1)编写动画xml 由于新建android工程的时候,在res下面并没有专门放置动画xml的文件夹,因此,我们新建一个animator名称的文件夹.建议不要起别的名字,因为ADT对res的文件夹命名有检索功能,如起animator这个名字的时候,ADT就能根据名称识别出这个是动画xml文件