3
\$\begingroup\$

I started to code on Android, but I think my code is very heavy and may slow down the performance of my app.

For example, when I run my app and I try to drag the page in one of my webviews, it's pretty laggy.

This does not include imports:

package com.anthoapps.googlewebviewsample;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    //AFFICHAGE DU LOGO PENDANT 3SEC
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);

            final ImageView imgv1 = (ImageView) findViewById(R.id.logo);
            imgv1.setVisibility(View.VISIBLE);
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    imgv1.setVisibility(View.GONE);
                }
            },2 * 1000); // Pour 3 secondes
            final WebView webv1 = (WebView) findViewById(R.id.webView);
            webv1.setVisibility(View.INVISIBLE);

     // Nous cherchons le bouton dans notre interface
        ((ImageButton)findViewById(R.id.boutonfacebook))
        // Nous paramétrons un écouteur sur l’événement ‘click’ de ce bouton
        .setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
        // Nous affichons un message à l’utilisateur
            // Instanciation du WebView...

            webv1.setVisibility(View.VISIBLE);
            WebView wvSite = (WebView)findViewById(R.id.webView);
            WebView myWebView = (WebView) findViewById(R.id.webView);
            myWebView.setWebViewClient(new WebViewClient(){
                public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                    view.loadData("Impossible de charger la page, veuillez vérifier votre connexion internet.", "text/html", "UTF-8");
                }

            });

            //...on active JavaScript...
            WebSettings webSettings = wvSite.getSettings();
            webSettings.setJavaScriptEnabled(true);

            //...et on charge la page
            wvSite.loadUrl("https://m.facebook.com/Google");
        }
        }); 

        // Nous cherchons le bouton dans notre interface
        ((ImageButton)findViewById(R.id.boutonvip))
        // Nous paramétrons un écouteur sur l’événement ‘click’ de ce bouton
        .setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
        // Nous affichons un message à l’utilisateur
            // Instanciation du WebView...

            webv1.setVisibility(View.VISIBLE);
            WebView wvSite = (WebView)findViewById(R.id.webView);
            WebView myWebView = (WebView) findViewById(R.id.webView);
            myWebView.setWebViewClient(new WebViewClient(){
                public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                    view.loadData("Impossible de charger la page, veuillez vérifier votre connexion internet.", "text/html", "UTF-8");
                }

            });


            //...on active JavaScript...
            WebSettings webSettings = wvSite.getSettings();
            webSettings.setJavaScriptEnabled(true);

            //...et on charge la page
            wvSite.loadUrl("http://www.google.fr");
        }
        });

        // Nous cherchons le bouton dans notre interface
        ((ImageButton)findViewById(R.id.boutonlive))
        // Nous paramétrons un écouteur sur l’événement ‘click’ de ce bouton
        .setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
        // Nous affichons un message à l’utilisateur
            // Instanciation du WebView...

            webv1.setVisibility(View.VISIBLE);
            WebView wvSite = (WebView)findViewById(R.id.webView);
            WebView myWebView = (WebView) findViewById(R.id.webView);
            myWebView.setWebViewClient(new WebViewClient(){
                public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                    view.loadData("Impossible de charger la page, veuillez vérifier votre connexion internet.", "text/html", "UTF-8");
                }

            });


            //...on active JavaScript...
            WebSettings webSettings = wvSite.getSettings();
            webSettings.setJavaScriptEnabled(true);

            //...et on charge la page
            wvSite.loadUrl("http://www.google.de");
        }
        });


        // Nous cherchons le bouton dans notre interface
        ((ImageButton)findViewById(R.id.liste))
        // Nous paramétrons un écouteur sur l’événement ‘click’ de ce bouton
        .setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
        // Nous affichons un message à l’utilisateur
            // Instanciation du WebView...
            webv1.setVisibility(View.VISIBLE);
            WebView wvSite = (WebView)findViewById(R.id.webView);
            WebView myWebView = (WebView) findViewById(R.id.webView);
            myWebView.setWebViewClient(new WebViewClient(){
                public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                    view.loadData("Impossible de charger la page, veuillez vérifier votre connexion internet.", "text/html", "UTF-8");
                }

            });


            //...on active JavaScript...
            WebSettings webSettings = wvSite.getSettings();
            webSettings.setJavaScriptEnabled(true);

            //...et on charge la page
            wvSite.loadUrl("http://www.google.it");
        }
        });

    // Nous cherchons le bouton dans notre interface
    ((Button)findViewById(R.id.pagefb))
    // Nous paramétrons un écouteur sur l’événement ‘click’ de ce bouton
    .setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    // Nous affichons un message à l’utilisateur
        // Instanciation du WebView...

        webv1.setVisibility(View.VISIBLE);
        WebView wvSite = (WebView)findViewById(R.id.webView);
        WebView myWebView = (WebView) findViewById(R.id.webView);
        myWebView.setWebViewClient(new WebViewClient(){
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                view.loadData("Impossible de charger la page, veuillez vérifier votre connexion internet.", "text/html", "UTF-8");
            }

        });


        //...on active JavaScript...
        WebSettings webSettings = wvSite.getSettings();
        webSettings.setJavaScriptEnabled(true);

        //...et on charge la page
        wvSite.loadUrl("https://m.facebook.com/Google");
    }
    });
    // Nous cherchons le bouton dans notre interface
    ((Button)findViewById(R.id.pagevip))
    // Nous paramétrons un écouteur sur l’événement ‘click’ de ce bouton
    .setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        webv1.setVisibility(View.VISIBLE);
    // Nous affichons un message à l’utilisateur
        // Instanciation du WebView...

        WebView wvSite = (WebView)findViewById(R.id.webView);
        WebView myWebView = (WebView) findViewById(R.id.webView);
        myWebView.setWebViewClient(new WebViewClient(){
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                view.loadData("Impossible de charger la page, veuillez vérifier votre connexion internet.", "text/html", "UTF-8");
            }

        });


        //...on active JavaScript...
        WebSettings webSettings = wvSite.getSettings();
        webSettings.setJavaScriptEnabled(true);

        //...et on charge la page
        wvSite.loadUrl("http://www.google.fr");    
    }
    });

    // Nous cherchons le bouton dans notre interface
    ((Button)findViewById(R.id.live))
    // Nous paramétrons un écouteur sur l’événement ‘click’ de ce bouton
    .setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    // Nous affichons un message à l’utilisateur
        // Instanciation du WebView...

        webv1.setVisibility(View.VISIBLE);
        WebView wvSite = (WebView)findViewById(R.id.webView);
        WebView myWebView = (WebView) findViewById(R.id.webView);
        myWebView.setWebViewClient(new WebViewClient(){
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                view.loadData("Impossible de charger la page, veuillez vérifier votre connexion internet.", "text/html", "UTF-8");
            }

        });


        //...on active JavaScript...
        WebSettings webSettings = wvSite.getSettings();
        webSettings.setJavaScriptEnabled(true);

        //...et on charge la page
        wvSite.loadUrl("http://www.google.de");
    }
    });

    // Nous cherchons le bouton dans notre interface
    ((Button)findViewById(R.id.boutonliste))
    // Nous paramétrons un écouteur sur l’événement ‘click’ de ce bouton
    .setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    // Nous affichons un message à l’utilisateur
        // Instanciation du WebView...

        webv1.setVisibility(View.VISIBLE);
        WebView wvSite = (WebView)findViewById(R.id.webView);
        WebView myWebView = (WebView) findViewById(R.id.webView);
        myWebView.setWebViewClient(new WebViewClient(){
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                view.loadData("Impossible de charger la page, veuillez vérifier votre connexion internet.", "text/html", "UTF-8");
            }


        });


        //...on active JavaScript...
        WebSettings webSettings = wvSite.getSettings();
        webSettings.setJavaScriptEnabled(true);

        //...et on charge la page
        wvSite.loadUrl("http://www.google.it");
    }
    });
}
}
\$\endgroup\$
4
  • \$\begingroup\$ Does your indentation look like that in your IDE? \$\endgroup\$
    – Pimgd
    Oct 30, 2014 at 14:53
  • \$\begingroup\$ No it's weird because I moved the code 4 time from the left to display it in code \$\endgroup\$
    – CapeMoka
    Oct 30, 2014 at 14:57
  • \$\begingroup\$ Can you just directly paste your code into the question? Even if it doesn't format it as code, I think I can fix it for you and then it will look good \$\endgroup\$
    – Pimgd
    Oct 30, 2014 at 14:58
  • \$\begingroup\$ There is a lot of issue with your Formatting here, almost nothing is indented properly. And please if you want CodeReview to review your code, please translate at least the Comments to English. \$\endgroup\$
    – Malachi
    Oct 30, 2014 at 15:24

2 Answers 2

2
\$\begingroup\$

There is a lot of issue with your Formatting here, almost nothing is indented properly.

And please if you want CodeReview to review your code, please translate at least the Comments to English.

Here is what the code should look like when it is properly indented

package com.anthoapps.googlewebviewsample;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    //AFFICHAGE DU LOGO PENDANT 3SEC
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);

        final ImageView imgv1 = (ImageView) findViewById(R.id.logo);
        imgv1.setVisibility(View.VISIBLE);
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                imgv1.setVisibility(View.GONE);
            }
        },2 * 1000); // Pour 3 secondes
        final WebView webv1 = (WebView) findViewById(R.id.webView);
        webv1.setVisibility(View.INVISIBLE);

        // Nous cherchons le bouton dans notre interface
        ((ImageButton)findViewById(R.id.boutonfacebook))
        // Nous paramétrons un écouteur sur l’événement ‘click’ de ce bouton
        .setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // Nous affichons un message à l’utilisateur
                // Instanciation du WebView...

                webv1.setVisibility(View.VISIBLE);
                WebView wvSite = (WebView)findViewById(R.id.webView);
                WebView myWebView = (WebView) findViewById(R.id.webView);
                myWebView.setWebViewClient(new WebViewClient(){
                    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                        view.loadData("Impossible de charger la page, veuillez vérifier votre connexion internet.", "text/html", "UTF-8");
                    }

                });

                //...on active JavaScript...
                WebSettings webSettings = wvSite.getSettings();
                webSettings.setJavaScriptEnabled(true);

                //...et on charge la page
                wvSite.loadUrl("https://m.facebook.com/Google");
            }
        }); 

        // Nous cherchons le bouton dans notre interface
        ((ImageButton)findViewById(R.id.boutonvip))
        // Nous paramétrons un écouteur sur l’événement ‘click’ de ce bouton
        .setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // Nous affichons un message à l’utilisateur
                // Instanciation du WebView...

                webv1.setVisibility(View.VISIBLE);
                WebView wvSite = (WebView)findViewById(R.id.webView);
                WebView myWebView = (WebView) findViewById(R.id.webView);
                myWebView.setWebViewClient(new WebViewClient(){
                    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                        view.loadData("Impossible de charger la page, veuillez vérifier votre connexion internet.", "text/html", "UTF-8");
                    }

                });


                //...on active JavaScript...
                WebSettings webSettings = wvSite.getSettings();
                webSettings.setJavaScriptEnabled(true);

                //...et on charge la page
                wvSite.loadUrl("http://www.google.fr");
            }
        });

        // Nous cherchons le bouton dans notre interface
        ((ImageButton)findViewById(R.id.boutonlive))
        // Nous paramétrons un écouteur sur l’événement ‘click’ de ce bouton
        .setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // Nous affichons un message à l’utilisateur
                // Instanciation du WebView...

                webv1.setVisibility(View.VISIBLE);
                WebView wvSite = (WebView)findViewById(R.id.webView);
                WebView myWebView = (WebView) findViewById(R.id.webView);
                myWebView.setWebViewClient(new WebViewClient(){
                    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                        view.loadData("Impossible de charger la page, veuillez vérifier votre connexion internet.", "text/html", "UTF-8");
                    }

                });


                //...on active JavaScript...
                WebSettings webSettings = wvSite.getSettings();
                webSettings.setJavaScriptEnabled(true);

                //...et on charge la page
                wvSite.loadUrl("http://www.google.de");
            }
        });


        // Nous cherchons le bouton dans notre interface
        ((ImageButton)findViewById(R.id.liste))
        // Nous paramétrons un écouteur sur l’événement ‘click’ de ce bouton
        .setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // Nous affichons un message à l’utilisateur
                // Instanciation du WebView...
                webv1.setVisibility(View.VISIBLE);
                WebView wvSite = (WebView)findViewById(R.id.webView);
                WebView myWebView = (WebView) findViewById(R.id.webView);
                myWebView.setWebViewClient(new WebViewClient(){
                    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                        view.loadData("Impossible de charger la page, veuillez vérifier votre connexion internet.", "text/html", "UTF-8");
                    }

                });


                //...on active JavaScript...
                WebSettings webSettings = wvSite.getSettings();
                webSettings.setJavaScriptEnabled(true);

                //...et on charge la page
                wvSite.loadUrl("http://www.google.it");
            }
        });

        // Nous cherchons le bouton dans notre interface
        ((Button)findViewById(R.id.pagefb))
        // Nous paramétrons un écouteur sur l’événement ‘click’ de ce bouton
        .setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // Nous affichons un message à l’utilisateur
                // Instanciation du WebView...

                webv1.setVisibility(View.VISIBLE);
                WebView wvSite = (WebView)findViewById(R.id.webView);
                WebView myWebView = (WebView) findViewById(R.id.webView);
                myWebView.setWebViewClient(new WebViewClient(){
                    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                        view.loadData("Impossible de charger la page, veuillez vérifier votre connexion internet.", "text/html", "UTF-8");
                    }

                });


                //...on active JavaScript...
                WebSettings webSettings = wvSite.getSettings();
                webSettings.setJavaScriptEnabled(true);

                //...et on charge la page
                wvSite.loadUrl("https://m.facebook.com/Google");
            }
        });
        // Nous cherchons le bouton dans notre interface
        ((Button)findViewById(R.id.pagevip))
        // Nous paramétrons un écouteur sur l’événement ‘click’ de ce bouton
        .setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                webv1.setVisibility(View.VISIBLE);
                // Nous affichons un message à l’utilisateur
                // Instanciation du WebView...

                WebView wvSite = (WebView)findViewById(R.id.webView);
                WebView myWebView = (WebView) findViewById(R.id.webView);
                myWebView.setWebViewClient(new WebViewClient(){
                    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                        view.loadData("Impossible de charger la page, veuillez vérifier votre connexion internet.", "text/html", "UTF-8");
                    }

                });


                //...on active JavaScript...
                WebSettings webSettings = wvSite.getSettings();
                webSettings.setJavaScriptEnabled(true);

                //...et on charge la page
                wvSite.loadUrl("http://www.google.fr");    
            }
        });

        // Nous cherchons le bouton dans notre interface
        ((Button)findViewById(R.id.live))
        // Nous paramétrons un écouteur sur l’événement ‘click’ de ce bouton
        .setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // Nous affichons un message à l’utilisateur
                // Instanciation du WebView...

                webv1.setVisibility(View.VISIBLE);
                WebView wvSite = (WebView)findViewById(R.id.webView);
                WebView myWebView = (WebView) findViewById(R.id.webView);
                myWebView.setWebViewClient(new WebViewClient(){
                    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                        view.loadData("Impossible de charger la page, veuillez vérifier votre connexion internet.", "text/html", "UTF-8");
                    }

                });


                //...on active JavaScript...
                WebSettings webSettings = wvSite.getSettings();
                webSettings.setJavaScriptEnabled(true);

                //...et on charge la page
                wvSite.loadUrl("http://www.google.de");
            }
        });

        // Nous cherchons le bouton dans notre interface
        ((Button)findViewById(R.id.boutonliste))
        // Nous paramétrons un écouteur sur l’événement ‘click’ de ce bouton
        .setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // Nous affichons un message à l’utilisateur
                // Instanciation du WebView...

                webv1.setVisibility(View.VISIBLE);
                WebView wvSite = (WebView)findViewById(R.id.webView);
                WebView myWebView = (WebView) findViewById(R.id.webView);
                myWebView.setWebViewClient(new WebViewClient(){
                    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                        view.loadData("Impossible de charger la page, veuillez vérifier votre connexion internet.", "text/html", "UTF-8");
                    }


                });


                //...on active JavaScript...
                WebSettings webSettings = wvSite.getSettings();
                webSettings.setJavaScriptEnabled(true);

                //...et on charge la page
                wvSite.loadUrl("http://www.google.it");
            }
        });
    }
}

You also have a bit of extra white space in there as well

\$\endgroup\$
5
  • \$\begingroup\$ Yes I know, but is it a way to avoid configuring the webview multiple times ? For example in the onclicklistener, just type wvSite.loadUrl("anysite.com"); \$\endgroup\$
    – CapeMoka
    Oct 30, 2014 at 15:43
  • \$\begingroup\$ I'm not complaining about the identation, but about the performance of the webview in app :) \$\endgroup\$
    – CapeMoka
    Oct 30, 2014 at 15:46
  • 3
    \$\begingroup\$ Maintenance is an issue for performance, because if you can't read your code efficiently than you have a decrease in developer performance, or worse more bugs because something was read wrong. \$\endgroup\$
    – Malachi
    Oct 30, 2014 at 15:53
  • \$\begingroup\$ I know but it's just an app for testing, I don't mind making a lot of apps, I only need to make this one better. \$\endgroup\$
    – CapeMoka
    Oct 31, 2014 at 7:40
  • 1
    \$\begingroup\$ so instead of fixing a bug in your code you would rather write a new application from scratch? \$\endgroup\$
    – Malachi
    Oct 31, 2014 at 13:31
1
\$\begingroup\$

There is a lot of code duplication in your onCreate - all your onClickListeners are equal except for the url they load. You can put those urls to views' tags or create Map to map id-url.

Also you are finding your web view on every click - make it a field and find and configure it once. findViewById is pretty heavy for performance.

Implementing: (sorry, I don't know the language used for comments so their structure can be damaged)

private WebView myWebView; //fields are accessible for anonymous classes

/**
 * Called when the activity is first created.
 */
//AFFICHAGE DU LOGO PENDANT 3SEC
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_main);

    final ImageView logo = (ImageView) findViewById(R.id.logo); //bad name. you can use "logo", or if you are stuck to pointing the type in the name - ivLogo
   // logo.setVisibility(View.VISIBLE); //onCreate is called when activity is first created, so you can omit this line.
    new Handler().postDelayed(new Runnable() { //non-static handlers are dangerous for memory-leaks
        @Override
        public void run() {
            imgv1.setVisibility(View.GONE);
        }
    }, 2 * 1000); // Pour 3 secondes - this is for 2 :)
    myWebView = (WebView) findViewById(R.id.webView);
    myWebView.setVisibility(View.INVISIBLE); //again, onCreate is called when activity is first created, so explicitly set webview's visibility in your xml

    //You are duplicating code in all your onClickListeners. The only explicit difference is in url to load. We can put that in views tag or create Map<Integer, String> with <id-urlToLoad>
    myWebView.setWebViewClient(new WebViewClient() {
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            view.loadData("Impossible de charger la page, veuillez v&eacute;rifier votre connexion internet.", "text/html", "UTF-8");
        }

    });

    //...on active JavaScript...
    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);

    final OnClickListener onClickListener = (OnClickListener) new OnClickListener() {
        @Override
        public void onClick(View v) {
            // Nous affichons un message à l’utilisateur
            // Instanciation du WebView...

            webv1.setVisibility(View.VISIBLE);

            //...et on charge la page
            myWebView.loadUrl((String) v.getTag());
        }
    };
    final ImageButton fbButton = (ImageButton) findViewById(R.id.boutonfacebook);
    fbButton.setTag("https://m.facebook.com/Google");
    fbButton.setOnClickListener(onClickListener);

    // Nous cherchons le bouton dans notre interface
    final ImageButton vipButton = (ImageButton) findViewById(R.id.boutonvip);
    vipButton.setTag("http://www.google.fr")
    vipButton
            // Nous paramétrons un écouteur sur l’événement ‘click’ de ce bouton
            .setOnClickListener(onClickListener);

    //and so on...

}

And names of variables could be more meaningful. imgv1 is pretty useless as a name, you can use "logo" or (if you are stuck to typing view's type into name) ivLogo. I'd use "ivLogo" for xml id and "logo" for variable name.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.