Bad performance with a big UI layout
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
add a comment |
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
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
add a comment |
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
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
android android-linearlayout android-constraintlayout
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
add a comment |
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
add a comment |
1 Answer
1
active
oldest
votes
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);
}
}
});
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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);
}
}
});
add a comment |
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);
}
}
});
add a comment |
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);
}
}
});
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);
}
}
});
answered Nov 21 '18 at 20:48
wyzardwyzard
283313
283313
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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