能否在onDestroy中检查saveInstanceState?旋转时不执行指定操作
关于onDestroy中避免屏幕旋转时执行操作的解决方案
嘿,这个问题问得挺实际的——首先得明确一点:你没法在onDestroy()方法里直接检查saveInstanceState,因为这个参数根本就不是onDestroy()的方法参数(你可以看看Android的官方方法定义,onDestroy()是没有这个参数的),这也是为什么你从没见过有人这么做的原因。
那怎么实现“仅在非配置变化(比如用户返回、主动finish)的销毁场景执行操作”呢?Android系统其实给我们提供了专门的方法来判断:
推荐方案:使用isChangingConfigurations()
这个方法会在Activity因配置变化(比如屏幕旋转、语言切换等)即将被销毁重建时返回true,而在正常销毁(比如用户按返回键、调用finish()、系统因内存不足回收)时返回false。直接在onDestroy()里用它判断就行:
@Override protected void onDestroy() { super.onDestroy(); // 只有当不是配置变化导致的销毁时,才执行操作 if (!isChangingConfigurations()) { // 这里放你不想在屏幕旋转时触发的代码 performYourTargetOperation(); } }
为什么不用saveInstanceState的思路?
你之前在onCreate()里判断saveInstanceState != null是可行的,因为系统在配置变化销毁Activity前会调用onSaveInstanceState()保存状态,重建时会把这个状态传递给onCreate()和onRestoreInstanceState()。但onDestroy()本身并不接收这个参数,所以没法直接在这个方法里做判断——这从生命周期设计上就不支持。
这个方案是Android开发里处理这类场景的标准做法,比自己手动标记状态要可靠得多,因为系统已经帮我们封装好了配置变化的判断逻辑。
内容的提问来源于stack exchange,提问作者Anga
相关产品推荐
相关产品推荐

