0

殺そうとするWebビューがありますが、それは難しい野郎です! 私はもう試した:

私の活動で:

@Override
protected void onStop() {

    if (webView_ != null) {
        webView_.finish(getApplicationContext());
        webView_.destroy();
        webView_ = null;
    }
    super.onStop();
}

そして私のウェブビューで:

public void finish(Context context) {

    stopLoading();
    pauseTimers();
    if (alarm_ != null)
        alarm_.cancelAlarm(context);
    if (webViewErrorHandler_ != null)
        webViewErrorHandler_.removeCallbacks(reloadRunnable_);
    if (requestQueue_ != null) {
        requestQueue_.clear();
        requestQueue_ = null;
    }
    callHiddenWebViewMethod("onPause");
}

private void callHiddenWebViewMethod(String name){
    if( this != null ){
        try {
            Method method = WebView.class.getMethod(name);
            method.invoke(this);
        } catch (NoSuchMethodException e) {
            Log.e("MYWEBVIEW", "No such method: " + name);
        } catch (IllegalAccessException e) {
            Log.e("MYWEBVIEW", "Illegal Access: " + name);
        } catch (InvocationTargetException e) {
            Log.e("MYWEBVIEW", "Invocation Target Exception: " + name);
        }
    }
}

しかし、デバッガーで見ると、まだこの WebView のスレッドが実行されています!

そして、特に onPause の後に動作させたいことを知っておく必要があります;)

4

1 に答える 1

1

アクティビティの onStop が呼び出される保証はありません。ドキュメントの一部を次に示します。

「Kill​​able after?」というラベルの付いた列。メソッドが戻った後、アクティビティのコードの別の行を実行することなく、いつでもシステムがアクティビティをホストしているプロセスを強制終了できるかどうかを示します。3 つのメソッド (onPause()、onStop()、および onDestroy()) が「はい」とマークされています。onPause() は 3 つのうち最初のメソッドであるため、アクティビティが作成されると、onPause() は、プロセスが強制終了される前に呼び出されることが保証されている最後のメソッドです。システムが緊急時にメモリを回復する必要がある場合は、onStop() onDestroy() が呼び出されない可能性があります。したがって、onPause() を使用して重要な永続データ (ユーザー編集など) をストレージに書き込む必要があります。ただし、onPause() 中に保持する必要がある情報については選択する必要があります。

http://developer.android.com/guide/components/activities.html を確認してください

onStop 内のコードを onPause メソッドに移動してみてください。

調査結果を投稿してください。

于 2013-06-19T19:21:29.087 に答える