其他分享
首页 > 其他分享> > Delphi XE5 Android应用应该在线程内处理耗时的任务?

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

作者:互联网

我只是Delphi XE5的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;

对于Button1,连续点击会导致ANR.当我从应用程序堆栈恢复应用程序时,Button1的文本显示“Button1”.看起来像Button1Click的过程被重绕了.
相反,在Button2的情况下,连续标签不会导致ANR.

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

解决方法:

线程是解决这个问题的正确方法.如果您希望避免系统确定您的应用程序没有响应,则主线程需要响应.对于移动平台而言,这与桌面平台一样.

因此,将所有长时间运行的任务移到线程上,这样可以保持主线程的响应速度.

标签:android,multithreading,delphi,firemonkey,delphi-xe5
来源: https://codeday.me/bug/20190830/1767421.html