2017-07-26 38 views
-1

我开发了一个Android应用程序,可以在一家公司的一些华硕Android 7平板电脑上运行,但我发现一个非常奇怪的行为。这个应用程序非常小,容易;它具有:Delphi之后几个Android应用程序崩溃

  1. A按钮,以存储从2名编辑
  2. 采取
  3. 甲TTabControl用3页2个字符串值和他们每个人都有内部的TWebBrowser。
  4. 顶部的按钮执行一些JavaScript代码。

你可以看到图片here取自win32。下面是代码,这是很容易,(我猜)没有错误。当然,我受到了火种的熏陶。

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); 
} 

基本上这是一个当页面打开(身体的onload)和setInterval的是像德尔福TTimer调用的函数。以1000ms的周期执行第一个参数的功能。它适用于Firefox和Win32应用程序。

回答

-1

我已经解决了我的问题,这是一个与Delphi(或JavaScript)无关的问题。由于Google Webview服务的更新导致应用程序崩溃,这会导致应用程序出现问题,例如我的应用程序(内置Web浏览器的应用程序)。

我已经卸载了Google的webview上的更新,现在应用程序正常工作。当然Delphi的TWebBrowser依赖于webview服务,所以卸载更新是解决方案。

+0

我不认为这是一种永久的“解决方案”,特别是如果这是人们下载和使用的东西。这只是一个临时解决方法。 –