如何避免在切换活动时出现白屏

问题描述 投票:0回答:1

我正在从意图开始一个活动。在我的代码中,我有更多的Activity,但只有在一个特定的Activity中,当试图从Intent启动时,得到空白的白屏,之后该Activity被加载。但是只有在一个特定的活动中,当试图从一个意图中启动时,得到空白的白色屏幕,之后活动被加载。所以我想到了显示进度条。但是在白屏之后也显示进度条。如何避免显示白屏呢,先谢谢了。

getWebViewUrlSuccessResponse方法是在得到Retrofit请求的响应时调用的。

@Override
    public void getWebViewUrlSuccessResponse(String url,String id,String currency) {

        Intent intent=new Intent(FirstActivity.this, WebViewActivity.class);
        intent.putExtra("url",url);
        intent.putExtra("id",id);
        intent.putExtra("name",name);
        intent.putExtra("password",password);
        intent.putExtra("code",code);
        intent.putExtra("currency",currency);
        startActivity(intent);
    }

这是我的第二次活动

 protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AndroidLogger.log(5,TAG,"WEBVIEW");
        getWindow().requestFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.activity_webview);
        AndroidLogger.log(5,TAG,"progress bar made visible");
       Intent intent=getIntent();
        RelativeLayout layout = findViewById(R.id.payment_gateway_relative_layout);
        ProgressBar progressBar = new ProgressBar(PaymentGatewayActivity.this,null,android.R.attr.progressBarStyleSmallInverse);
        progressBar.setIndeterminate(true);
        progressBar.setVisibility(View.VISIBLE);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(100,100);
        params.addRule(RelativeLayout.CENTER_IN_PARENT);
        layout.addView(progressBar,params);

        //setContentView(layout);
       this.name=intent.getStringExtra("name");
       this.url=intent.getStringExtra("url");
       this.id=intent.getStringExtra("id");
       this.code=intent.getStringExtra("code");
       this.password=intent.getStringExtra("password");
       this.currency=intent.getStringExtra("currency");
        webView =(WebView)findViewById(R.id.webView);
        webView.setWebViewClient(new WebViewClient());
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setDomStorageEnabled(true);
        webView.setOverScrollMode(WebView.OVER_SCROLL_NEVER);
        webView.loadUrl(url);

        webView.setWebViewClient(new WebViewClient() {

        public boolean shouldOverrideUrlLoading(WebView view, String url) {

                // do your handling codes here, which url is the requested url
                // probably you need to open that url rather than redirect:
                AndroidLogger.log(5, TAG, "url:" + url);
                AndroidLogger.log(5, TAG, "view.geturl" + view.getUrl());
               //AndroidLogger.log(5,TAG,view.goBack()); view.canGoBack();

               view.loadUrl(url);

                return false; // then it is not handled by default action
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);

                progressBar.setVisibility(View.VISIBLE);
                AndroidLogger.log(5,TAG,"started"+url);

            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                AndroidLogger.log(5,TAG,"Finished"+url);

                webView.setVisibility(View.VISIBLE);


            }

        });
    }
java android android-activity
1个回答
0
投票

白屏可能是由于你的布局加载延迟造成的。

你可以检查一下你的onCreate方法,看看是否有长期运行的工作,比如网络访问、数据库访问或文件访问,然后把它们移到onStart方法中。

onCreate应该尽快返回。


0
投票

你可以尝试改变你的主题的默认活动背景。<item name="android:windowBackground">. 但无论如何,之后你会得到那个背景颜色或图像,直到你的活动测量和绘制你的布局。所以这里是我的style.xml中的代码片段

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowBackground">@color/background_color</item>
</style>

改变背景颜色,你就能得到它


0
投票

行webView.loadUrl(url); 导致白屏...因为在我的代码中,我使用postUrl来加载webview,我没有在代码中提到。我有两次试图加载URL。这就是问题所在。删除这一行后,一切都正常。感谢所有试图帮助我的人。

热门问题
推荐问题
最新问题