0

我有一个我试图杀死的 webview,但它是一个硬混蛋!我试过了:

在我的活动中:

@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。这是文档的一部分,内容如下:

标有“之后可以杀死?”的列 指示系统是否可以在方法返回后的任何时间终止承载活动的进程,而无需执行活动的另一行代码。三个方法被标记为“是”:(onPause()、onStop() 和 onDestroy())。因为 onPause() 是三个中的第一个,所以一旦创建了 Activity,onPause() 是保证在进程被杀死之前调用的最后一个方法——如果系统必须在紧急情况下恢复内存,那么 onStop()并且 onDestroy() 可能不会被调用。因此,您应该使用 onPause() 将关键的持久数据(例如用户编辑)写入存储。但是,您应该选择在 onPause() 期间必须保留哪些信息,

检查http://developer.android.com/guide/components/activities.html

尝试将 onStop 中的代码移动到 onPause 方法。

请张贴你的发现。

于 2013-06-19T19:21:29.087 回答