1. 背景说明
嗯...还是之前的APP, 拖了很久的一个迷bug: 调用摄像头进行拍照时"偶然"会出现APP卡死.
Delphi版本: Delphi 10 Seattle
Delphi的界面框架: OrangeUI 1.67 Seattle
(应该跟这个框架没有关系, 这里只是为了尽量描述详细一些)
2. 原因
由于问题发现的比较晚, 整个APP都开发完成后才发现...
所以只好各种屏蔽代码来排查问题...
最后发现: 调用了Delphi提供的TNotificationCenter 对象发送通知消息后, 再调用摄像头进行拍照时, 就会出现卡死的情况.
当然, 最根本的原因是什么, 并没有找到...我也不想找了...
3. 解决方法
要么不拍照, 要么不用TNotificationCenter 发送通知消息了...
这个项目中, 不拍照是不可能的, 但是对TNotificationCenter 发送通知消息的要求不高...
最后换成了ShowMessage...(好在客户好说话, 就这样草草接受了)...
4. 详细描述
a. 我在主页面(frmMain)添加了一个TNotificationCenter 对象, 用于在某件事件触发时, 发出系统通知消息.
b. 然后创建了一个公共的方法来调用这个对象:
// 发送通知
class procedure TUtilsClass.Notify(szBody: String);
var
notify: TNotification;
begin
// 关闭通知时, 退出
if G_TITLE_BAR_PROMPT = false then
exit;
// 目前通知信息内容是一样的, 所以发