WM_Close,WM_Destory与WM_Quit的区别

本文详细解析了Windows应用程序中从用户点击Close按钮开始到程序退出整个消息循环的处理过程。包括WM_Close、WM_Destory及WM_Quit消息的具体作用与处理方式。

当使用者按下系统功能表中的Close按钮,系统送出WM_Close,通常程序的窗口函数不拦截此消息,于是DefWindowProc处理它,

DefWindowProc收到WM_Close后调用DestoryWindow把窗口清除,DestroyWindow本身会送出WM_Destory.

程序对WM_Destory的标准反应是调用PostQuitMessage,PostQuitMessage送出WM_Quit,结束消息循环

给定引用中未提及“wm_destroy_activity”的相关信息,无法根据引用内容准确回答其含义、使用及相关问题解决方案。不过,推测“wm_destroy_activity”可能 Activity 的销毁操作相关。在 Android 系统中,Activity 的销毁是其生命周期的重要环节,通常涉及系统服务 AMS 向客户端进程对应 Activity 发送 Destory 通知等操作,发送超时之后,系统服务 AMS 会通知 WMS 将当前 Activity 的 Window 移除掉 [^1]。 ### 相关含义推测 从 Android 系统架构和 Activity 生命周期的角度推测,“wm_destroy_activity”可能是 WindowManagerService(WMS)中用于销毁 Activity 窗口的一个操作或方法。当 Activity 要被销毁时,WMS 可能会通过该操作来处理窗口相关的资源释放和清理工作。 ### 相关使用推测 在正常的 Android 开发中,开发者一般不会直接调用“wm_destroy_activity”。Activity 的销毁通常是由系统根据各种条件(如用户按下返回键、内存不足等)自动触发的。开发者更多地是在 Activity 的生命周期方法(如 `onDestroy()`)中进行资源的释放和清理工作。例如: ```java @Override protected void onDestroy() { super.onDestroy(); // 释放资源,如关闭数据库连接、取消广播接收器等 if (mDatabase != null) { mDatabase.close(); } if (mReceiver != null) { unregisterReceiver(mReceiver); } } ``` ### 相关问题解决方案推测 如果在 Activity 销毁过程中出现问题,如黑屏、资源泄漏等,可以参考以下解决方案: - **防止 Activity 被销毁**:可以通过设置 `android:configChanges` 属性来避免 Activity 在某些配置变化时被销毁。例如,在锁屏时只调用 `onPause` 而不调用 `onDestroy`,可以设置 `android:configChanges="keyboardHidden|orientation|screenSize"` [^3]。 - **解决 `onDestroy()` 回调缓慢问题**:可以使用一个标志位来确保资源只被回收一次,避免重复操作。示例代码如下: ```java private boolean isDestroyed = false; private void destroy() { if (isDestroyed) { return; } // 回收资源 isDestroyed = true; } @Override protected void onPause() { super.onPause(); if (isFinishing()) { destroy(); } } @Override public void onDestroy() { destroy(); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值