我开发了一款Android应用程序,可以在一家公司的某些华硕Android 7平板电脑上运行,但我发现这是一种非常奇怪的行为。这个应用程序非常小而且容易;它有:
您可以看到从win32中获取的图片here。下面是代码,非常容易(我猜)没有错误。我当然是在火焰之下。
type
TForm1 = class(TForm)
// ... declarations ...
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
FLinea: string;
list: TStringList;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
//I take the text from the 3 edits you can see above (picture) and I save a txt file
procedure TForm1.Button1Click(Sender: TObject);
var salva: TStringList;
begin
/*just for debug purpose...*/
if ( (Length(EditLinea.Text) > 0) and (Length(EditOperatore.Text) > 0) and (Password.Text = 'abc123') ) then
begin
FLinea := TPath.Combine(TPath.GetHomePath, 'operatore.txt');
salva := TStringList.Create;
salva.Add(EditLinea.Text);
salva.Add(EditOperatore.Text);
salva.SaveToFile(FLinea);
ShowMessage('Saved! Restart the app.');
end
else
begin
ShowMessage('Wrong password!');
end;
end;
//when I press the STOP button above I execute a javascript function that is defined in the page loaded in the browser
procedure TForm1.Button2Click(Sender: TObject);
begin
WebBrowser.EvaluateJavaScript('stopExec();');
end;
//Here I just check if a txt file exists and I load it
procedure TForm1.FormCreate(Sender: TObject);
begin
//HERE I CHECK IF THERE IS A TXT FILE THAT I NEED TO LOAD
FLinea := TPath.Combine(TPath.GetHomePath, 'operatore.txt');
if (FileExists(FLinea)) then
begin
list := TStringList.Create;
list.LoadFromFile(FLinea);
LabelImpiegato.Text := 'OPERATORE '+list.Strings[1];
WebBrowser.URL := 'www.aaa.com/loader.php?linea='+list.Strings[0]+'&operat='+list.Strings[1];
WebBrowser.EnableCaching := false;
WebBrowser.Navigate;
end
else
begin
//error
TabControl.Visible := false;
Error.Visible := true;
end;
end;
问题:应用程序正常运行但经过一段时间(通常为10/15分钟)后崩溃。错误消息是“应用程序突然停止”。我的代码可能有问题吗?
我真的怀疑它可能是平板电脑上的省电配置。我真的不知道该怎么办,因为我正在寻找类似OnException
形式的财产,但没有运气。
可能是与TWebBrowser冲突的javascript代码吗?看:
function start() {
myVar = setInterval(myTimer, 1000);
myVar2 = setInterval(orologio, 1000);
}
基本上,这是一个在页面打开时调用的函数(body onload),而setInterval就像delphi TTimer
。在1000ms的周期内,它执行第一个参数的功能。它在Firefox和Win32应用程序上完美运行。
答案 0 :(得分:-1)
我已经解决了我的问题,这是一个与Delphi(或javascript)无关的问题。由于Google Webview
服务的更新导致应用程序崩溃,导致我所拥有的应用程序(内置Web浏览器的应用程序)出现问题。
我已经在Google的网页浏览中卸载了更新,现在该应用程序正常运行。当然Delphi的TWebBrowser
依赖于webview服务,因此卸载更新是解决方案。