Bad performance with a big UI layout












-1















In the beginning I had an activity with some fields on it. As time goes by the layout becomes too big, so now I need to refactor it.



Currently on Samsung Galaxy S8 the activity needs ~2 seconds to show up, on an older device this number is 4-5 seconds, which is terrible.



Does anyone has a tip for me where should I start the refactor? I thought about to put the bottom section in a recyclerview, but the rows are quite different, and the full content must be scrollable (plus there is a HorizontalScrollView for the images). I'm using Glide for loading images.



Layout file: layout xml.



Screenshot: screenshot from actual screen.



Update1:



Maybe some kind of dynamic data loading can help me? For example show the 'empty' fragment after the UI inflate and then dinamcially set the fields from top to bottom.










share|improve this question

























  • Maybe you should use fragment ? Like module, for exemple fragment for display picture etc, like that you'r going to explode you'r layout in different part

    – Benjamin
    Nov 20 '18 at 11:28











  • Use fragment. Too much scroll for one page layout. That's why it cause a 2 -5 seconds to appear.

    – No Name
    Nov 20 '18 at 11:49











  • Thanks both of you. How should I break the attached long fragment into smaller parts? The fragment is in a ViewPager (with a map fragment). What UI control should I use to replace my solution and accomplish what you are suggesting? UI control, design pattern, every suggestion should be helpful. How will the render be faster if I break a big thing to many little? The system have to process the same amount of view, isn't it? Thank you!

    – wyzard
    Nov 20 '18 at 12:41
















-1















In the beginning I had an activity with some fields on it. As time goes by the layout becomes too big, so now I need to refactor it.



Currently on Samsung Galaxy S8 the activity needs ~2 seconds to show up, on an older device this number is 4-5 seconds, which is terrible.



Does anyone has a tip for me where should I start the refactor? I thought about to put the bottom section in a recyclerview, but the rows are quite different, and the full content must be scrollable (plus there is a HorizontalScrollView for the images). I'm using Glide for loading images.



Layout file: layout xml.



Screenshot: screenshot from actual screen.



Update1:



Maybe some kind of dynamic data loading can help me? For example show the 'empty' fragment after the UI inflate and then dinamcially set the fields from top to bottom.










share|improve this question

























  • Maybe you should use fragment ? Like module, for exemple fragment for display picture etc, like that you'r going to explode you'r layout in different part

    – Benjamin
    Nov 20 '18 at 11:28











  • Use fragment. Too much scroll for one page layout. That's why it cause a 2 -5 seconds to appear.

    – No Name
    Nov 20 '18 at 11:49











  • Thanks both of you. How should I break the attached long fragment into smaller parts? The fragment is in a ViewPager (with a map fragment). What UI control should I use to replace my solution and accomplish what you are suggesting? UI control, design pattern, every suggestion should be helpful. How will the render be faster if I break a big thing to many little? The system have to process the same amount of view, isn't it? Thank you!

    – wyzard
    Nov 20 '18 at 12:41














-1












-1








-1








In the beginning I had an activity with some fields on it. As time goes by the layout becomes too big, so now I need to refactor it.



Currently on Samsung Galaxy S8 the activity needs ~2 seconds to show up, on an older device this number is 4-5 seconds, which is terrible.



Does anyone has a tip for me where should I start the refactor? I thought about to put the bottom section in a recyclerview, but the rows are quite different, and the full content must be scrollable (plus there is a HorizontalScrollView for the images). I'm using Glide for loading images.



Layout file: layout xml.



Screenshot: screenshot from actual screen.



Update1:



Maybe some kind of dynamic data loading can help me? For example show the 'empty' fragment after the UI inflate and then dinamcially set the fields from top to bottom.










share|improve this question
















In the beginning I had an activity with some fields on it. As time goes by the layout becomes too big, so now I need to refactor it.



Currently on Samsung Galaxy S8 the activity needs ~2 seconds to show up, on an older device this number is 4-5 seconds, which is terrible.



Does anyone has a tip for me where should I start the refactor? I thought about to put the bottom section in a recyclerview, but the rows are quite different, and the full content must be scrollable (plus there is a HorizontalScrollView for the images). I'm using Glide for loading images.



Layout file: layout xml.



Screenshot: screenshot from actual screen.



Update1:



Maybe some kind of dynamic data loading can help me? For example show the 'empty' fragment after the UI inflate and then dinamcially set the fields from top to bottom.







android android-linearlayout android-constraintlayout






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 20 '18 at 19:44







wyzard

















asked Nov 20 '18 at 9:45









wyzardwyzard

283313




283313













  • Maybe you should use fragment ? Like module, for exemple fragment for display picture etc, like that you'r going to explode you'r layout in different part

    – Benjamin
    Nov 20 '18 at 11:28











  • Use fragment. Too much scroll for one page layout. That's why it cause a 2 -5 seconds to appear.

    – No Name
    Nov 20 '18 at 11:49











  • Thanks both of you. How should I break the attached long fragment into smaller parts? The fragment is in a ViewPager (with a map fragment). What UI control should I use to replace my solution and accomplish what you are suggesting? UI control, design pattern, every suggestion should be helpful. How will the render be faster if I break a big thing to many little? The system have to process the same amount of view, isn't it? Thank you!

    – wyzard
    Nov 20 '18 at 12:41



















  • Maybe you should use fragment ? Like module, for exemple fragment for display picture etc, like that you'r going to explode you'r layout in different part

    – Benjamin
    Nov 20 '18 at 11:28











  • Use fragment. Too much scroll for one page layout. That's why it cause a 2 -5 seconds to appear.

    – No Name
    Nov 20 '18 at 11:49











  • Thanks both of you. How should I break the attached long fragment into smaller parts? The fragment is in a ViewPager (with a map fragment). What UI control should I use to replace my solution and accomplish what you are suggesting? UI control, design pattern, every suggestion should be helpful. How will the render be faster if I break a big thing to many little? The system have to process the same amount of view, isn't it? Thank you!

    – wyzard
    Nov 20 '18 at 12:41

















Maybe you should use fragment ? Like module, for exemple fragment for display picture etc, like that you'r going to explode you'r layout in different part

– Benjamin
Nov 20 '18 at 11:28





Maybe you should use fragment ? Like module, for exemple fragment for display picture etc, like that you'r going to explode you'r layout in different part

– Benjamin
Nov 20 '18 at 11:28













Use fragment. Too much scroll for one page layout. That's why it cause a 2 -5 seconds to appear.

– No Name
Nov 20 '18 at 11:49





Use fragment. Too much scroll for one page layout. That's why it cause a 2 -5 seconds to appear.

– No Name
Nov 20 '18 at 11:49













Thanks both of you. How should I break the attached long fragment into smaller parts? The fragment is in a ViewPager (with a map fragment). What UI control should I use to replace my solution and accomplish what you are suggesting? UI control, design pattern, every suggestion should be helpful. How will the render be faster if I break a big thing to many little? The system have to process the same amount of view, isn't it? Thank you!

– wyzard
Nov 20 '18 at 12:41





Thanks both of you. How should I break the attached long fragment into smaller parts? The fragment is in a ViewPager (with a map fragment). What UI control should I use to replace my solution and accomplish what you are suggesting? UI control, design pattern, every suggestion should be helpful. How will the render be faster if I break a big thing to many little? The system have to process the same amount of view, isn't it? Thank you!

– wyzard
Nov 20 '18 at 12:41












1 Answer
1






active

oldest

votes


















0














I've chosen AsyncLayoutInflater, so far it seems a good choice for my problem.



Sample code:



AsyncLayoutInflater asyncLayoutInflater = new AsyncLayoutInflater(getContext());
asyncLayoutInflater.inflate(R.layout.fragment_lake_more_data, mLakeDataContainer, new AsyncLayoutInflater.OnInflateFinishedListener() {

@Override
public void onInflateFinished(@NonNull View view, int resid, ViewGroup parent) {
// set UI elements with data
// ...

parent.addView(view);
}

}
});





share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53390182%2fbad-performance-with-a-big-ui-layout%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    I've chosen AsyncLayoutInflater, so far it seems a good choice for my problem.



    Sample code:



    AsyncLayoutInflater asyncLayoutInflater = new AsyncLayoutInflater(getContext());
    asyncLayoutInflater.inflate(R.layout.fragment_lake_more_data, mLakeDataContainer, new AsyncLayoutInflater.OnInflateFinishedListener() {

    @Override
    public void onInflateFinished(@NonNull View view, int resid, ViewGroup parent) {
    // set UI elements with data
    // ...

    parent.addView(view);
    }

    }
    });





    share|improve this answer




























      0














      I've chosen AsyncLayoutInflater, so far it seems a good choice for my problem.



      Sample code:



      AsyncLayoutInflater asyncLayoutInflater = new AsyncLayoutInflater(getContext());
      asyncLayoutInflater.inflate(R.layout.fragment_lake_more_data, mLakeDataContainer, new AsyncLayoutInflater.OnInflateFinishedListener() {

      @Override
      public void onInflateFinished(@NonNull View view, int resid, ViewGroup parent) {
      // set UI elements with data
      // ...

      parent.addView(view);
      }

      }
      });





      share|improve this answer


























        0












        0








        0







        I've chosen AsyncLayoutInflater, so far it seems a good choice for my problem.



        Sample code:



        AsyncLayoutInflater asyncLayoutInflater = new AsyncLayoutInflater(getContext());
        asyncLayoutInflater.inflate(R.layout.fragment_lake_more_data, mLakeDataContainer, new AsyncLayoutInflater.OnInflateFinishedListener() {

        @Override
        public void onInflateFinished(@NonNull View view, int resid, ViewGroup parent) {
        // set UI elements with data
        // ...

        parent.addView(view);
        }

        }
        });





        share|improve this answer













        I've chosen AsyncLayoutInflater, so far it seems a good choice for my problem.



        Sample code:



        AsyncLayoutInflater asyncLayoutInflater = new AsyncLayoutInflater(getContext());
        asyncLayoutInflater.inflate(R.layout.fragment_lake_more_data, mLakeDataContainer, new AsyncLayoutInflater.OnInflateFinishedListener() {

        @Override
        public void onInflateFinished(@NonNull View view, int resid, ViewGroup parent) {
        // set UI elements with data
        // ...

        parent.addView(view);
        }

        }
        });






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 21 '18 at 20:48









        wyzardwyzard

        283313




        283313






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53390182%2fbad-performance-with-a-big-ui-layout%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Create new schema in PostgreSQL using DBeaver

            Deepest pit of an array with Javascript: test on Codility

            Costa Masnaga