2017-07-26 6 views
-1

会社の一部のAsus Android 7タブレットで動作するアンドロイドアプリを開発しましたが、私は非常に奇妙な動作を見つけました。このアプリケーションは非常に小さく簡単です。デルファイアンドロイドアプリケーションが数分後にクラッシュする

  1. ボタンが3ページで
  2. A TTabControl 2つの編集
  3. から取られた2つの文字列値を格納するために、それらのそれぞれは、内部TWebBrowserを持っている:それはあります。
  4. トップにあるJavaScriptコードを実行するボタン。

はwin32から取得した画像が表示されます。下にはエラーなしで簡単に(そしておそらく)コードがあります。私はもちろんfiremonkeyの下にいます。

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は、Delphi TTimerのようなものです。 1000msの周期で、第1引数に関数を実行します。これはFirefoxとWin32アプリとして完璧に動作します。

答えて

-1

私は自分の問題を解決しましたが、これはDelphi(またはjavascript)に関係しない問題です。 GoogleのWebviewサービスが更新されたため、アプリケーションがクラッシュしました。これは、自分のアプリケーション(Webブラウザが内部にあるアプリケーション)のようなアプリケーションで問題を引き起こしています。

Googleのwebviewでアップデートをアンインストールしました。これでアプリケーションは正常に動作します。もちろん、DelphiのTWebBrowserはwebviewサービスを利用しているため、アップデートをアンインストールすることが解決策でした。

+0

これは、人がダウンロードして使用するものであれば、これを永続的な「解決策」とは考えません。これは一時的な回避策です。 –

関連する問題