2013-06-19 5 views
0

У меня есть веб-просмотр, который я пытаюсь убить, но это жесткий ублюдок! Я пробовал:Android WebView не заканчивается

в моей деятельности:

@Override 
protected void onStop() { 

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

и в моем WebView:

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;)

ответ

1

OnStop своей деятельности является не гарантировано называться. Вот часть документа, которая гласит:

Столбец с надписью «Killable after?» указывает, может ли система убить процесс, принимающий эту активность, в любое время после возвращения метода без выполнения другой строки кода действия. Три метода отмечены «да»: (onPause(), onStop() и onDestroy()). Поскольку onPause() является первым из трех, как только создается действие , onPause() является последним методом, который гарантированно должен быть вызван до того, как процесс может быть убит, - если система должна восстановить память в чрезвычайной ситуации, то onStop() и onDestroy() не может быть . Поэтому вы должны использовать onPause() для записи критических постоянных данных (например, прав пользователя) для хранения. Тем не менее, вы должны указать, какая информация должна быть сохранена во время onPause(), , поскольку любые процедуры блокировки в этом методе блокируют переход к следующим образом и замедляют работу пользователя.

Проверить http://developer.android.com/guide/components/activities.html

Попробуйте переместить код внутри OnStop методу OnPause.

Просьба опубликовать результаты.

+0

onStop называется - я проверил это. И я написал, что не хочу останавливатьTimers в onPause. Я хочу, чтобы мой веб-просмотр работал в фоновом режиме. Я разбираю сайты, пока веб-просмотр не отображается. – karex

Смежные вопросы