:lol: 最近在学习Launcher
对加载APPS这一块总结了一下,有2块:Load,Bind。
这里偏重于load,如何取出了APPS的title、icon、packagename
可以用于APPS的展现的修改
Launcher.java
LauncherApplication app = ((LauncherApplication)getApplication());
mModel = app.setLauncher(this); //初始化mModel.initialize(launcher);
mIconCache = app.getIconCache();
if (!mRestoring) {
mModel.startLoader(this, true);
} //进入了LanucherModel,开始加载
LanucherModel.java
oldThread.stopLocked(); //等待旧进程
mLoaderThread = new LoaderThread(context, oldThread, isLaunching);
mLoaderThread.start();
private void loadAndBindAllApps() {
if (!loaded) {
loadAllAppsByBatch();
再次调用的话 loaded = mAllAppsLoaded;
mAllAppsLoaded = true;
就会直接进入 else {
onlyBindAllApps();
mAllAppsList.add(new ApplicationInfo(apps.get(i), mIconCache));
//将取得的值放入AllAppsList
如何取值后面再说
callbacks.bindAllApplications(added);
} else {
callbacks.bindAppsAdded(added);
} //绑定应用
下面,来说如何传值
mAllAppsList.add(new ApplicationInfo(apps.get(i), mIconCache));
看ApplicationInfo public ApplicationInfo(ResolveInfo info, IconCache iconCache) {
iconCache.getTitleAndIcon(this, info);
进入getTitleAndIcon
CacheEntry entry = cacheLocked(application.componentName, info);
mCache.put(componentName, entry);
entry.title = info.loadLabel(mPackageManager).toString(); //取得标题
entry.icon = Utilities.createIconBitmap(
info.activityInfo.loadIcon(mPackageManager), mContext); //取得图片
application.title = entry.title;
application.titleBitmap = entry.titleBitmap;
application.iconBitmap = entry.icon;
回到AllAppList
里面对应用进行了操作 add remove update
要想对应用的显示进行操作,必须有唯一标识 一般选择应用的包名
如何取得包名 看removePackage
final ComponentName component = info.intent.getComponent();
if (packageName.equals(component.getPackageName())) {
同理:如果你想在应用的GRID中显示你需要的应用
就在add方法中加入判断对data.add(info);
added.add(info); 进行操作
应用程序的GRID AllApps2D
从 final ApplicationInfo info = getItem(position);
所有值都存在于
public ApplicationInfo(ApplicationInfo info) {
super(info);
componentName = info.componentName;
title = info.title.toString();
intent = new Intent(info.intent);
}
要是想知道为什么能取得值,请进framework里查看取值类的源码
写的很简单,有错误或遗漏什么请大家点出,讨论一下。 :lol:
对加载APPS这一块总结了一下,有2块:Load,Bind。
这里偏重于load,如何取出了APPS的title、icon、packagename
可以用于APPS的展现的修改
Launcher.java
LauncherApplication app = ((LauncherApplication)getApplication());
mModel = app.setLauncher(this); //初始化mModel.initialize(launcher);
mIconCache = app.getIconCache();
if (!mRestoring) {
mModel.startLoader(this, true);
} //进入了LanucherModel,开始加载
LanucherModel.java
oldThread.stopLocked(); //等待旧进程
mLoaderThread = new LoaderThread(context, oldThread, isLaunching);
mLoaderThread.start();
private void loadAndBindAllApps() {
if (!loaded) {
loadAllAppsByBatch();
再次调用的话 loaded = mAllAppsLoaded;
mAllAppsLoaded = true;
就会直接进入 else {
onlyBindAllApps();
mAllAppsList.add(new ApplicationInfo(apps.get(i), mIconCache));
//将取得的值放入AllAppsList
如何取值后面再说
callbacks.bindAllApplications(added);
} else {
callbacks.bindAppsAdded(added);
} //绑定应用
下面,来说如何传值
mAllAppsList.add(new ApplicationInfo(apps.get(i), mIconCache));
看ApplicationInfo public ApplicationInfo(ResolveInfo info, IconCache iconCache) {
iconCache.getTitleAndIcon(this, info);
进入getTitleAndIcon
CacheEntry entry = cacheLocked(application.componentName, info);
mCache.put(componentName, entry);
entry.title = info.loadLabel(mPackageManager).toString(); //取得标题
entry.icon = Utilities.createIconBitmap(
info.activityInfo.loadIcon(mPackageManager), mContext); //取得图片
application.title = entry.title;
application.titleBitmap = entry.titleBitmap;
application.iconBitmap = entry.icon;
回到AllAppList
里面对应用进行了操作 add remove update
要想对应用的显示进行操作,必须有唯一标识 一般选择应用的包名
如何取得包名 看removePackage
final ComponentName component = info.intent.getComponent();
if (packageName.equals(component.getPackageName())) {
同理:如果你想在应用的GRID中显示你需要的应用
就在add方法中加入判断对data.add(info);
added.add(info); 进行操作
应用程序的GRID AllApps2D
从 final ApplicationInfo info = getItem(position);
所有值都存在于
public ApplicationInfo(ApplicationInfo info) {
super(info);
componentName = info.componentName;
title = info.title.toString();
intent = new Intent(info.intent);
}
要是想知道为什么能取得值,请进framework里查看取值类的源码
写的很简单,有错误或遗漏什么请大家点出,讨论一下。 :lol: