2

使用している webview に小さな問題があります。ユーザーが登録フォームに記入できるように、webview を使用しようとしています。これは、ユーザーが 1 つのセッションでフォームを完了すると正常に機能しますが、ユーザーが電話をロックすると、webview アクティビティが破棄されます。

メモリ内に 2 つのアクティビティがあり、そのうちの 1 つは非常にメモリを集中的に使用します。私が抱えている問題は、この他のアクティビティが webview よりも多くのメモリを必要とするため、webview が破棄されることです。

ある程度は問題ありませんが、Web ページの現在の状態を保存できるようにして、ユーザーがすべての詳細を再度送信する必要がないようにしたいと考えています。とにかく私はこれを行うことができますか?

ありがとう

4

4 に答える 4

2

同様の問題が発生しました。Webview を使用したアクティビティがあります。
ユーザーが Web ビューのフォームに 3 つのフィールドを入力してから、新しいアクティビティ (カメラ) を起動して写真を撮るようにします。画像を取得したら、javascript を使用して、現在アクティブな webview フォームに画像を挿入します。99.9% の確率ですべてうまく機能します。ただし、再現が難しいいくつかの奇妙なシナリオでは、カメラ アクティビティがアクティブな間、その背後にある Web ビュー アクティビティが破壊されます。saveState / restoreState は、webview を部分的にのみ復元します。カメラを起動したときにユーザーが入力したが送信しなかった 3 つのフォーム フィールドは失われます。それらは webview.saveState によって保存されません。また、ページの一部の JavaScript 状態も失われます。

これを回避するために、JavaScript メソッドをページに追加し、saveInstanceState でアプリから呼び出します。次に、状態を復元した後、webview ページで別の JavaScript メソッドを呼び出して、状態を元に戻します。それは面倒ですが、それを行う必要があるフォームごとに作業が必要ですが、機能します。

Android webview.saveState の将来のバージョンでは、アクティビティが破棄される前とまったく同じように保存されることを願っています。または、アクティビティをアプリにとって重要であるとマークし、アプリがユーザーが現在使用しているアプリでない場合にのみ、そのアクティビティを破棄できるようにするとよいでしょう。

于 2013-12-06T16:46:28.773 に答える
1

WebView.addJavascriptInterface を試してみて、Activity.onPause のときは loadUrl("javascript:...") でページ内の javascript メソッドを呼び出し、Web ページでは WebView.addJavascriptInterface が提供するネイティブメソッドを呼び出してデータを保存します。これは、あなたの望むことですか?

于 2013-08-27T00:27:07.887 に答える
0

戻るキーを押すと、アクティビティを破棄できます。画面が回転したとき (アクティビティを破棄して、すべてのグラフィック要素を再作成する方が高速です); または、しばらくアクティブにならない可能性がある場合 (電話をロックする、ホーム キーを押す、または他のアプリケーションを起動する)。

@Ixx が彼のコメントで提案することを行う必要があります: Android webView saveState

アプリケーションのデータを次のように保存します

@Override
public void onSaveInstanceState(Bundle outState) {          
    super.onSaveInstanceState(outState);   
    /// save your things, e.g.
    outState.putString("name", name);
}

そして回復、それはメソッドに存在しますonCreate

@Override
public void onCreate(Bundle savedInstanceState) {       
    super.onCreate(savedInstanceState);
    // if it is a new activity
    if (savedInstanceState == null) {
        // initialize vars, e.g.
        name = "Unknown";
    }
    // if is a call after detroy the activity
    else {
        // recover vars, e.g.
        name = savedInstanceState.getString("name");
    }
}
于 2013-08-20T10:49:47.110 に答える