Improve scrolling performance for App Info page

Root cause:
App info page will load application icon and content description in
onBindViewHolder(), it will query PackageManager and UserManager many
times in scrolling. Actually these actions will become time consuming if
there is a large app list.

Solution:
To relieve the janky scrolling, cache the icon and content description
if it has been loaded once.

Bug: 156527207
Test: manual test and robotests

Change-Id: I997179834511f86b3155c7d54989a873ac8e2559
This commit is contained in:
Yanting Yang
2020-05-21 18:09:36 +08:00
parent d1d32e7d22
commit 6b457d882c

View File

@@ -119,7 +119,6 @@ import com.android.settings.widget.LoadingViewController;
import com.android.settings.wifi.AppStateChangeWifiStateBridge; import com.android.settings.wifi.AppStateChangeWifiStateBridge;
import com.android.settings.wifi.ChangeWifiStateDetails; import com.android.settings.wifi.ChangeWifiStateDetails;
import com.android.settingslib.HelpUtils; import com.android.settingslib.HelpUtils;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState.AppEntry; import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.settingslib.applications.ApplicationsState.AppFilter; import com.android.settingslib.applications.ApplicationsState.AppFilter;
@@ -1462,12 +1461,10 @@ public class ManageApplications extends InstrumentedFragment
ApplicationsState.AppEntry entry = mEntries.get(position); ApplicationsState.AppEntry entry = mEntries.get(position);
synchronized (entry) { synchronized (entry) {
holder.setTitle(entry.label); holder.setTitle(entry.label);
holder.itemView.setContentDescription( mState.ensureLabelDescription(entry);
AppUtils.getAppContentDescription( holder.itemView.setContentDescription(entry.labelDescription);
mContext, mState.ensureIcon(entry);
entry.info.packageName, holder.setIcon(entry.icon);
UserHandle.getUserId(entry.info.uid)));
holder.setIcon(Utils.getBadgedIcon(mContext, entry.info));
updateSummary(holder, entry); updateSummary(holder, entry);
updateSwitch(holder, entry); updateSwitch(holder, entry);
holder.updateDisableView(entry.info); holder.updateDisableView(entry.info);