记录学Delphi安卓编程过程中的一个坑
以下这段代码在win10和在安卓下的执行顺序有区别:abcde为序号:
在win中,顺序是abcdef,fs在修改后能保存,在安卓下,顺序是aefbcd,所以fs没能在修改后保存。
a: TDialogService.MessageDialog('用户:'+user+' 已经存在,但你输入的密码与保存的密码不相同,是否更新密码?',
TMsgDlgType.mtConfirmation,[TMsgDlgBtn.mbYes,TMsgDlgBtn.mbNo],TMsgDlgBtn.mbYes,0,procedure (const AResult: TModalResult)begin
b: if AResult=mrYes then
begin
c: fs.Values[user]:='123';
d: TDialogService.ShowMessage('aresult=mryes,已经执行更新密码操作');
end;end);end;
e: fs.SaveToFile(filepath);
f: TDialogService.ShowMessage('saves');
-------应该是因为MessageDialog在win下是模态,会中断程序执行,而安卓下则不是,所以在对话框显示期间,后面的代码还在继续执行。
以下是盒子一大佬的回复
------- 同步/异步
阻塞/非阻---------
Windows 底下编程,你也可以选择异步模式。
安卓底下,和界面有关的主线程,不允许阻塞,否则会被系统杀死。所以对话框也只能是异步非阻塞的。
异步非阻塞的代码,如果需要获得返回值,就得插入回调函数,把代码整得复杂了。但这个是安卓系统的特性,没办法。