Reduce jank in wifi settings

- Fix view recycling for AccessPointPreferences by adding a dummy
   during initial inflation
 - Cut down on what is done during onBindView and refresh()
 - Try to re-use AccessPointPreferences when possible

Some jank still occurs when scan results come in, but it is less
than before.

Bug: 16518752
Change-Id: I2619303281dd50aa3864783c49738ae9f221834a
This commit is contained in:
Jason Monk
2015-06-29 13:28:21 -04:00
parent 52dce9d334
commit 55dd8869db
4 changed files with 79 additions and 47 deletions

View File

@@ -78,6 +78,7 @@ import com.android.settings.location.ScanningSettings;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw;
import com.android.settings.wifi.AccessPointPreference.UserBadgeCache;
import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.AccessPoint.AccessPointListener;
import com.android.settingslib.wifi.WifiTracker;
@@ -159,6 +160,8 @@ public class WifiSettings extends RestrictedSettingsFragment
private HandlerThread mBgThread;
private UserBadgeCache mUserBadgeCache;
/* End of "used in Wifi Setup context" */
public WifiSettings() {
@@ -177,6 +180,9 @@ public class WifiSettings extends RestrictedSettingsFragment
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.wifi_settings);
mUserBadgeCache = new UserBadgeCache(getPackageManager());
mBgThread = new HandlerThread(TAG, Process.THREAD_PRIORITY_BACKGROUND);
mBgThread.start();
}
@@ -270,8 +276,6 @@ public class WifiSettings extends RestrictedSettingsFragment
}
}
addPreferencesFromResource(R.xml.wifi_settings);
mEmptyView = initEmptyView();
registerForContextMenu(getListView());
setHasOptionsMenu(true);
@@ -311,6 +315,7 @@ public class WifiSettings extends RestrictedSettingsFragment
public void onResume() {
final Activity activity = getActivity();
super.onResume();
removePreference("dummy");
if (mWifiEnabler != null) {
mWifiEnabler.resume(activity);
}
@@ -652,8 +657,12 @@ public class WifiSettings extends RestrictedSettingsFragment
// Ignore access points that are out of range.
if (accessPoint.getLevel() != -1) {
hasAvailableAccessPoints = true;
if (accessPoint.getTag() != null) {
getPreferenceScreen().addPreference((Preference) accessPoint.getTag());
continue;
}
AccessPointPreference preference = new AccessPointPreference(accessPoint,
getActivity(), false);
getActivity(), mUserBadgeCache, false);
if (mOpenSsid != null && mOpenSsid.equals(accessPoint.getSsidStr())
&& !accessPoint.isSaved()