2013-06-19 9 views
0

나는 죽이려는 웹보기가 있지만 힘든 놈입니다! 나는 시도했다 : 내 활동Android 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); 
     } 
    } 
} 

하지만 난 디버거에서 볼 때 여전히 웹보기가 실행 스레드가!

그리고 당신은 내가 특히이 onPause 후 작업 할 것을 알아야합니다)

답변

1

활동의 중지시 호출 할 보장 할 수 없습니다. 다음은 읽는 문서의 일부입니다.

"Killable after?" 메서드가 반환 된 후 아무 때나 활동 코드의 다른 행을 실행하지 않고 시스템에서 시스템이 해당 활동을 호스팅하는 프로세스를 종료 할 수 있는지 여부를 나타냅니다. 세 가지 방법은 "on"(onPause(), onStop() 및 onDestroy())라고 표시되어 있습니다. onPause()가 처음 세 번이므로 활동이 만들어지면 onPause()는 이 프로세스가 종료되기 전에 호출되도록 보장되는 마지막 메서드입니다. 시스템이 응급시 메모리를 복구해야하는 경우에는 onStop() 및 onDestroy()는 이 아닐 수도 있습니다. 따라서 중요한 변경 사항 (예 : 사용자 수정)을 저장소에 쓸 때는 onPause()를 사용해야합니다. 그러나 은이 메서드의 모든 차단 프로 시저가 로 전환하는 것을 차단하고 사용자 환경을 느리게하기 때문에 onPause(), 동안 보존해야하는 정보를 선택해야합니다.

확인 http://developer.android.com/guide/components/activities.html

은 onPause 방법에 중지시 내부의 코드를 옮겨보십시오.

조사 결과를 게시하십시오.

+0

onStop이 호출되었습니다. - 이것을 확인했습니다. 그리고 나는 onPause에서 Timers를 멈추고 싶지 않다고 썼다. 백그라운드에서 작동하도록 내 webview를 원합니다. 웹 뷰는 보이지 않지만 사이트를 구문 분석합니다. – karex

관련 문제