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