Delphi XE5 Android应用程序应该在线程内处理耗时的任务吗?

Delphi XE5 Android应用程序应该在线程内处理耗时的任务吗?,android,multithreading,delphi,firemonkey,delphi-xe5,Android,Multithreading,Delphi,Firemonkey,Delphi Xe5,我只是DelphiXe5开发Android应用程序的新手 在主进程中处理一些耗时的任务时,轻敲屏幕(不断地反复轻敲屏幕)会导致应用程序异常结束 我猜这是因为所谓的“应用程序没有响应”,并通过下面的代码块确认我的猜测 procedure TForm1.Button1Click(Sender: TObject); begin Button1.Text := 'Start'; // Text is 'Button1' on design time sleep(10000);

我只是DelphiXe5开发Android应用程序的新手

在主进程中处理一些耗时的任务时,轻敲屏幕(不断地反复轻敲屏幕)会导致应用程序异常结束

我猜这是因为所谓的“应用程序没有响应”,并通过下面的代码块确认我的猜测

procedure TForm1.Button1Click(Sender: TObject);
begin
    Button1.Text := 'Start';    // Text is 'Button1' on design time
    sleep(10000);
    Button1.Text := 'OK';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    Button2.Text := 'Start';    // Text is 'Button2' on design time
    TThread.CreateAnonymousThread(
        procedure()
        begin
            Sleep(10000);
            TThread.Synchronize(TThread.CurrentThread,
            procedure
            begin
                Button2.Text := 'OK';
            end);
        end).Start;
end;
对于按钮1,连续敲击会导致ANR。当我从应用程序堆栈还原应用程序时,Button1的文本显示“Button1”。看起来按钮1的点击过程被重新启动了。 相反,在按钮2的情况下,连续的标签不会导致ANR

我从未在Windows应用程序的开发中使用过线程。 这是在线程(而不是主线程)中处理耗时任务的正常方式吗?
或者还有其他解决方法吗?

线程是解决此问题的正确方法。如果希望避免系统确定应用程序没有响应,则主线程需要有响应。对于移动平台和桌面平台来说都是如此


因此,将所有长时间运行的任务转移到线程上,从而保持主线程的响应能力。

对Delphi了解不多。但是在原生android中,我们使用后台线程或服务来执行长时间运行的任务,这样就不会阻塞UI线程

对于Delphi,请通过此链接。


跳过它可以帮助您。

是的,这很正常,因为您不能在GUI事件处理程序中等待。在Windows、Qt、C#等平台上也是如此。