【问题标题】:Webview reload page get force closeWebview重新加载页面强制关闭
【发布时间】:2014-01-31 20:13:41
【问题描述】:

我正在使用 webview 加载网页,然后每 5 秒重新加载此页面。页面加载正常,但 5 秒后应该开始重新加载我得到这个:

特别是在第 48 行,方法是:wvNovaMenzaCammera.reload();

 01-31 21:01:06.198  26188-26361/com.pfittech.menzauniza E/AndroidRuntime﹕ FATAL EXCEPTION: Timer-0
    java.lang.RuntimeException: java.lang.Throwable: Warning: A WebView method was called on thread 'Timer-0'. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads.
            at android.webkit.WebView.checkThread(WebView.java:2093)
            at android.webkit.WebView.reload(WebView.java:955)
            at com.pfittech.menzauniza.CommunityFragment$1$1.run(CommunityFragment.java:48)
            at java.util.Timer$TimerImpl.run(Timer.java:284)
     Caused by: java.lang.Throwable: Warning: A WebView method was called on thread 'Timer-0'. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads.
            at android.webkit.WebView.checkThread(WebView.java:2084)
            at android.webkit.WebView.reload(WebView.java:955)
            at com.pfittech.menzauniza.CommunityFragment$1$1.run(CommunityFragment.java:48)
            at java.util.Timer$TimerImpl.run(Timer.java:284)

这是我的代码:

public class CommunityFragment extends Fragment {
WebView wvNovaMenzaCammera;
private static final String TAG = "Cammera 1";
private ProgressDialog progressBarWV1;
public CommunityFragment(){}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_community, container, false);
    wvNovaMenzaCammera = (WebView)rootView.findViewById(R.id.wvCammera1);
    getActivity().runOnUiThread(new Runnable() {
        public void run() {
            WebSettings webSettings = wvNovaMenzaCammera.getSettings();
            wvNovaMenzaCammera.getSettings().setJavaScriptEnabled(true);
            wvNovaMenzaCammera.loadUrl("http://zuzo.sk/ftp/akt-a.jpg");
            new Timer().schedule(new TimerTask() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    wvNovaMenzaCammera.reload();
                }
            }, 5000, 5000);
        }
    });
    return rootView;
}

【问题讨论】:

    标签: android webview forceclose


    【解决方案1】:

    将您的 TimerTask 更改为以下内容:

    new TimerTask() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                public void run() {
                    wvNovaMenzaCammera.reload();
                }
            });      
        }
    }
    

    正如错误日志所说,您必须在 UI 线程中重新加载 WebView,并且您的 TimerTask 在后台线程中运行。

    【讨论】:

    • 嗯,我现在它的工作没有什么问题,但是当我离开这个活动时,我得到了 FC,因为活动不再存在,但计时器/线程正在运行,有什么办法在我离开时如何停止这个线程/运行活动
    • 保留对您的计时器的引用,并在应用关闭时调用 yourTimer.cancel()(即在 onPaused() 中)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    相关资源
    最近更新 更多