Wel*_*Wel 4 delphi android firemonkey
我正在使用Delphi 10.2创建Android应用程序,该应用程序使用Rest组件从post表单中读取返回的数据.当我按下按钮加载数据时,它会在大约3秒钟冻结后正常加载.问题是,如果用户尝试点击(或触摸)应用程序在3秒冻结后立即退出的任何控件,但如果用户没有触摸应用程序数据已正常加载!
这是什么原因以及我应该如何解决?
我用于按钮的代码是
RESTRequest1.Execute;
Run Code Online (Sandbox Code Playgroud)
我使用3个组件RESTClient,RESTRequest和RESTResponse
这是我用来获取数据的代码:
procedure TfrmMain.RESTRequest1AfterExecute(Sender: TCustomRESTRequest);
var
return_response: string;
begin
if RESTResponse1.StatusCode = 200 then begin
//fill years
return_response := RESTResponse1.Content;
memo1.text := return_response;
end;
end.
Run Code Online (Sandbox Code Playgroud)
在移动平台上,您应该始终使用ExecuteAsync它,因为它不在与UI相同的线程中运行.Execute而是在与 UI 相同的线程上运行,以便在请求处理时冻结.Android关闭应用程序,如果它在几秒钟后没有响应(=冻结),这是你的问题!
更确切地说,这是doc:
强烈建议在移动平台上使用ExecuteAsync方法.iOS(可能是Android)会在认为主线程无响应时终止应用程序,即如果正在运行的请求需要超过一秒或两秒才能返回
你可以在这里找到更多信息.
ExecuteAsync正如您在doc中所看到的,该函数具有一个有用的参数,该参数采用匿名过程.ExecuteAsync完成任务后,将调用此过程的代码.这是一个例子:
RESTRequest1.ExecuteAsync(
procedure
begin
ShowMessage('Finished!');
end;);
Run Code Online (Sandbox Code Playgroud)
这非常简单,您也不需要键入其他参数,因为默认情况下它们会有一个值.同样,如果您查看您将看到的文档,例如ASynchronized: Boolean = True;,将匿名proc之后的第二个参数设置为True将无关紧要.
| 归档时间: |
|
| 查看次数: |
336 次 |
| 最近记录: |