1、关键代码
1、Launcher.java
通过log打印,onCreate里面没有加载列表,在onResume里面:
if (mOnResumeState != State.APPS) {
tryAndUpdatePredictedApps();---------这里更新APP
}
2、tryAndUpdatePredictedApps
AllAppsContainerView mAppsView;
List<ComponentKeyMapper<AppInfo>> apps = mLauncherCallbacks.getPredictedApps();
if (apps != null) {
mAppsView.setPredictedApps(apps);------mAppsView这个就是加载的APP列表了
}
3、setPredictedApps
private final List<AppInfo> mApps = new ArrayList<>();
public void setPredictedApps(List<ComponentKeyMapper<AppInfo>> apps) {
mApps.setPredictedApps(apps);------继续跟踪
}
public void setPredictedApps(List<ComponentKeyMapper<AppInfo>> apps) {
mPredictedAppComponents.clear();
mPredictedAppComponents.addAll(apps);
List<AppInfo> newPredictedApps = processPredictedAppComponents(apps);
// 我们只需要在任何可见的可预测应用程序发生变化的情况下进行工作。
if (!newPredictedApps.equals(mPredictedApps)) {
if (newPredictedApps.size() == mPredictedApps.size()) {
swapInNewPredictedApps(newPredictedApps);
} else {
// 我们需要更新所有项目的appIndex。
onAppsUpdated();--------------重点
}
}
}
/**
*更新应用程序集时更新内部。
*/
private void onAppsUpdated() {
// Sort the list of apps
mApps.clear();
mApps.addAll(mComponentToAppMap.values()); //app包名
Collections.sort(mApps, mAppNameComparator); //按abcd拼音排序
mComponentToAppMap,它就是获取的系统的APP值,.values()就是APP的包名
2、如何自定义APP排序?
1、自己做一个list集合列表
2、把系统获取过来要加载的app都加到mylist
3、然后把mApps清空
4、再直接导入mApps.addAll(mylist)
举例:
private static String[] UESR_APPS_PKGS = {A;B;C;D};
/**
* Adds or updates existing apps in the list
* 这里是遍历添加系统APP的地方,我们在这来获取AppInfo app存到我们自己的list里面去。
*/
public void addOrUpdateApps(List<AppInfo> apps) {
for (AppInfo app : apps) {
mComponentToAppMap.put(app.toComponentKey(), app);
String str = app.componentName.getPackageName();
if(str.contains("com.android.contacts")){
list_csh[0] = app;
}else if(str.contains("org.codeaurora.snapcam")){
list_csh[1] = app;
}else if(str.contains("com.android.settings")){
list_csh[2] = app;
}
}
onAppsUpdated();
}
private static String[] list_csh = ("com.android.contacts","org.codeaurora.snapcam","com.android.settings");
private AppInfo[] list_csh = new AppInfo[3];
public void addOrUpdateApps(List<AppInfo> apps) {
for (AppInfo app : apps) {
mComponentToAppMap.put(app.toComponentKey(), app);
String str = app.componentName.getPackageName();
if(str.contains("com.android.contacts")){
list_csh[0] = app;
}else if(str.contains("org.codeaurora.snapcam")){
list_csh[1] = app;
}else if(str.contains("com.android.settings")){
list_csh[2] = app;
}
}
onAppsUpdated();
}
private void onAppsUpdated() {
// Sort the list of apps
mApps.clear();
mApps.addAll(mComponentToAppMap.values());
Collections.sort(mApps, mAppNameComparator);
Arrays.asList(list_csh);
int i = 0;
while(i < list_csh.length)
{
if (list_csh[i] != null)
mApps.add(list_csh[i]);
i++;
}
参考资料
这是很久之前参考的一篇文章,但忘记了连接找不到了,如有侵权,立即删除