代码之家  ›  专栏  ›  技术社区  ›  zac

为什么我的Android应用突然退出?

  •  4
  • zac  · 技术社区  · 7 年前

    我正在使用Delphi 10.2创建Android应用程序,该应用程序使用Rest组件读取post表单返回的数据。当我按下按钮加载数据时,它会在冻结大约3秒后正常加载数据。如果用户尝试单击(或触摸)表单上的任何控件,应用程序在冻结3秒后立即退出,但如果用户没有触摸应用程序,则数据加载正常!

    我用于按钮的代码是

    RESTRequest1.Execute;
    

    我使用了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.
    
    1 回复  |  直到 7 年前
        1
  •  7
  •   Alberto Miola user831258    7 年前

    在移动平台上,您应该始终使用 ExecuteAsync 在与UI相同的线程中运行。 Execute 而是在 相同的 线程作为UI,以便在处理请求时冻结。如果几秒钟后应用程序没有响应(=冻结),Android会关闭应用程序,这是你的问题!

    强烈建议在移动设备上使用ExecuteAsync方法 平台。如果出现以下情况,iOS(可能还有Android)将终止应用程序: 它认为主线程没有响应,即如果 请求需要一两秒钟才能返回

    你可以找到更多信息 here


    函数 执行同步 正如您在文档中看到的,它有一个有用的参数,该参数采用匿名过程。一旦 执行同步 已经完成了他的任务。举个例子:

    RESTRequest1.ExecuteAsync(
     procedure
     begin
      ShowMessage('Finished!');
     end;);
    

    ASynchronized: Boolean = True; ,因此将匿名过程后的第二个参数设置为True将不相关。