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:
58
src/com/android/settings/datausage/AppPrefLoader.java
Normal file
58
src/com/android/settings/datausage/AppPrefLoader.java
Normal 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) {
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user