gpt4 book ai didi

android - XE5 Android TBitmap.LoadFromStream 在线程内失败

转载 作者:行者123 更新时间:2023-11-29 16:05:16 39 4
gpt4 key购买 nike

我正在使用 Delphi XE5 为 Android 创建一个简单的游戏。我有一些资源,PNG 和 Jpeg,我想在我的程序加载所有资源时显示一个加载屏幕。

但我发现将 TBitmap.LoadFromFile 或 TBitmap.LoadFromStream 代码放入 android 线程中,会导致 App 立即退出并返回到 Launcher,在 Debug模式下,Delphi 甚至不会捕获异常。 (该代码在 Windows 上完美运行,在 Android 上没有线程)

我必须打开 logcat 才能看到发生了什么,我看到类似“创建绘图上下文时出错”的内容。

我的问题是有没有办法使用 Delphi XE5 为 Android 制作加载屏幕?以便在图像加载到内存中时显示进度屏幕。


我创建了测试项目只是为了隔离问题,这是结果。 LoadFromFile 是线程 1。日志表明线程实际运行,但之后引发异常???

Logcat 屏幕截图:Logcat Result源代码:http://www.pockhero.com/wp-content/uploads/2013/10/threadtest1.7z

最佳答案

这显然是一个应该在下一次更新中修复的错误。要将修复应用于您的代码,请声明此过程:

uses
Androidapi.NativeActivity,
Posix.Pthread;


procedure MyEndThreadProc(ExitCode:Integer);
var
PActivity: PANativeActivity;
begin
PActivity := PANativeActivity(System.DelphiActivity);
PActivity^.vm^.DetachCurrentThread(PActivity^.vm);
pthread_exit(ExitCode);
end;

并将其分配给 System.Classes 中的 EndThreadProc:

procedure TForm1.FormCreate(Sender: TObject);
begin
EndThreadProc := MyEndThreadProc;
end;

通过此修复,您可以设置,例如,您的线程

FreeOnTerminate := true;

然后这样的代码就不会再让应用程序崩溃了:

TYourThread.Create(something, somethingelse).Start;

我必须感谢 Antonio Tortosa 在 Embarcadero 论坛上发布了这个解决方案。

关于android - XE5 Android TBitmap.LoadFromStream 在线程内失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19364812/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com