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

时间:2014-11-13 08:07:47

标签: android multithreading delphi firemonkey delphi-xe5

我只是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应用程序的开发中使用过线程。 在线程(而不是主线程)中处理耗时任务的正常方法是什么? 或者还有其他解决方法吗?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

对Delphi不太了解。但在本机android中,我们使用Background线程或服务来执行Long运行任务,这样它就不会阻止UI线程。

对于Delphi,请浏览此链接。 http://www.fmxexpress.com/build-responsive-apps-with-timers-and-threads-using-delphi-xe6-firemonkey-on-android-and-ios/

跳它可以帮助你。