Change AppPrefLoader from AsyncTask to AsyncLoader.

Showing the wifi data usage results in reaching the max number of
threads in the pool executor. Switching the loader implementation
from Async task to AsynLoader and use a single loader to get the
whole list of preferences instead of using a new task to create each
list element.

Change-Id: I0da19ca09031a7fa178970c192e12a99ab489145
Fix: 33820327
Test: make RunSettingsRoboTests
This commit is contained in:
Doris Ling
2017-04-28 15:17:30 -07:00
parent 59f965d698
commit 2f02218493
3 changed files with 171 additions and 41 deletions

View File

@@ -0,0 +1,58 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.datausage;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.support.v7.preference.Preference;
import android.util.ArraySet;
import com.android.settings.utils.AsyncLoader;
public class AppPrefLoader extends AsyncLoader<ArraySet<Preference>> {
private ArraySet<String> mPackages;
private PackageManager mPackageManager;
private Context mPrefContext;
public AppPrefLoader(Context prefContext, ArraySet<String> pkgs, PackageManager pm) {
super(prefContext);
mPackages = pkgs;
mPackageManager = pm;
mPrefContext = prefContext;
}
@Override
public ArraySet<Preference> loadInBackground() {
ArraySet<Preference> results = new ArraySet<>();
for (int i = 1, size = mPackages.size(); i < size; i++) {
try {
ApplicationInfo info = mPackageManager.getApplicationInfo(mPackages.valueAt(i), 0);
Preference preference = new Preference(mPrefContext);
preference.setIcon(info.loadIcon(mPackageManager));
preference.setTitle(info.loadLabel(mPackageManager));
preference.setSelectable(false);
results.add(preference);
} catch (PackageManager.NameNotFoundException e) {
}
}
return results;
}
@Override
protected void onDiscardResult(ArraySet<Preference> result) {
}
}