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