我有一个我试图杀死的网页视图,但这是一个很难的混蛋!我试过了:
在我的活动中:
@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之后工作;)
答案 0 :(得分:1)
不保证调用活动的onStop。以下是doc的一部分内容:
标有“Killable after?”的专栏表示是否 系统可以在之后的任何时间杀死托管活动的进程 方法返回,而不执行活动代码的另一行。 三种方法标记为“是”:( onPause(),onStop()和 的onDestroy())。因为onPause()是三个中的第一个,一旦是 如果创建了activity,则onPause()是最后一个保证的方法 如果系统必须恢复,则在进程被杀死之前被调用 紧急情况下的内存,然后onStop()和onDestroy()可能不是 调用。因此,您应该使用onPause()来写关键 持久性数据(如用户编辑)到存储。但是,你应该 选择在onPause()期间必须保留哪些信息, 因为此方法中的任何阻止过程都会阻止转换到 下一个活动并减缓用户体验。
检查http://developer.android.com/guide/components/activities.html
尝试将onStop中的代码移动到onPause方法。
请将结果发布给您。