问题原因:该问题是由于程序退出时,FSharedContext 被释放,而 DoFinalizeShader 调用 Valid 没有做相应的处理,结果在检查到 FSharedContext 为空时,又重新创建了 FSharedContext 造成的。
解决办法:在 Valid ->ActivateSharedContext->CreateSharedContext 这三个函数中的任意一个,加入对程序正在退出状态的检查即可。比如我们加到 CreateSharedContext 里,在 FMX.Context.GLES.Android 单元,找到 CreateSharedContext 函数,然后在开始的地方修改为下面的代码:
var
AppTerminating:Boolean=false;
class procedure TCustomAndroidContext.CreateSharedContext;
var
ASvc:IFMXApplicationService;
begin
if AppTerminating or (TPlatformServices.Current.SupportsPlatformService(IFMXApplicationService,ASvc) and ASvc.Terminating) then
begin
AppTerminating:=true;
Exit;
end;
...其它原来的代码不变这样通过检查是否正在退出程序,如果退出中,就不再重新创建 FSharedContext 实例,就解决这个问题了。
