几个

时间:2017-07-26 13:21:10

标签: delphi

我开发了一款Android应用程序,可以在一家公司的某些华硕Android 7平板电脑上运行,但我发现这是一种非常奇怪的行为。这个应用程序非常小而且容易;它有:

  1. 用于存储取自2个编辑
  2. 的2个字符串值的按钮
  3. 一个包含3页的TTabControl,每个页面都有一个TWebBrowser。
  4. 顶部的按钮,用于执行一些javascript代码。
  5. 您可以看到从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应用程序上完美运行。

1 个答案:

答案 0 :(得分:-1)

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

我已经在Google的网页浏览中卸载了更新,现在该应用程序正常运行。当然Delphi的TWebBrowser依赖于webview服务,因此卸载更新是解决方案。