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\$
  • \$\begingroup\$ Does your indentation look like that in your IDE? \$\endgroup\$ – Pimgd Oct 30 '14 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 '14 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 '14 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 '14 at 15:24
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

|improve this answer|||||
\$\endgroup\$
  • \$\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 '14 at 15:43
  • \$\begingroup\$ I'm not complaining about the identation, but about the performance of the webview in app :) \$\endgroup\$ – CapeMoka Oct 30 '14 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 '14 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 '14 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 '14 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.

|improve this answer|||||
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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