为什么servicemanager 获取ibinder
如何通过反射方法获取com.android.internal.os.PkgUsageStats
通过com.android.internal.os.PkgUsageStats这个类可以得到一个应用程序的启动次数,运行时间等信息,功能很强大。但是google并没有将这个类作为API接口提供给开发者,如果在android源码下开发,可以通过以下代码来使用这个类:
import com.android.internal.app.IUsageStats;
import com.android.internal.os.PkgUsageStats;
//比较两个应用程序的启动次数和运行时间
public final int compare(ApplicationInfo a, ApplicationInfo b) {
ComponentName aName = a.intent.getComponent();
ComponentName bName = b.intent.getComponent();
int result = 0;
//get usagestats service
IUsageStats mUsageStatsService = IUsageStats.Stub
.asInterface(ServiceManager.getService(“usagestats“));
try {
//get PkgUsageStats
PkgUsageStats aStats = mUsageStatsService
.getPkgUsageStats(aName);
PkgUsageStats bStats = mUsageStatsService
.getPkgUsageStats(bName);
if(aStats!=null && bStats!=null) {
if ((aStats.launchCount 》 bStats.launchCount)
|| ((aStats.launchCount == bStats.launchCount) && (aStats.usageTime 》 bStats.usageTime)))
result = -1;
else if ((aStats.launchCount 《 bStats.launchCount)
|| ((aStats.launchCount == bStats.launchCount) && (aStats.usageTime 《 bStats.usageTime)))
result = 1;
else {
result = 0;
}
}else if(aStats!=null && bStats ==null) {
result = -1;
} else if(aStats==null && bStats !=null) {
result = 1;
}
} catch (RemoteException e) {
Log.i(“TAG“, “get package usage stats fail“);
}
return result;
}
那么如果想在sdk中使用这个 类要如果作呢--可以使用反射 的方法,代码如下:
public final int compare(ApplicationInfo a, ApplicationInfo b) {
ComponentName aName = a.intent.getComponent();
ComponentName bName = b.intent.getComponent();
int aLaunchCount,bLaunchCount;
long aUseTime,bUseTime;
int result = 0;
try {
//获得ServiceManager类
Class ServiceManager = Class
.forName(“android.os.ServiceManager“);
//获得ServiceManager的getService方法
Method getService = ServiceManager.getMethod(“getService“, java.lang.String.class);
//调用getService获取RemoteService
Object oRemoteService = getService.invoke(null, “usagestats“);
//获得IUsageStats.Stub类
Class cStub = Class
.forName(“com.android.internal.app.IUsageStats$Stub“);
//获得asInterface方法
Method asInterface = cStub.getMethod(“asInterface“, android.os.IBinder.class);
//调用asInterface方法获取IUsageStats对象
Object oIUsageStats = asInterface.invoke(null, oRemoteService);
//获得getPkgUsageStats(ComponentName)方法
Method getPkgUsageStats = oIUsageStats.getClass().getMethod(“getPkgUsageStats“, ComponentName.class);
//调用getPkgUsageStats 获取PkgUsageStats对象
Object aStats = getPkgUsageStats.invoke(oIUsageStats, aName);
Object bStats = getPkgUsageStats.invoke(oIUsageStats, bName);
//获得PkgUsageStats类
Class PkgUsageStats = Class.forName(“com.android.internal.os.PkgUsageStats“);
aLaunchCount = PkgUsageStats.getDeclaredField(“launchCount“).getInt(aStats);
bLaunchCount = PkgUsageStats.getDeclaredField(“launchCount“).getInt(bStats);
aUseTime = PkgUsageStats.getDeclaredField(“usageTime“).getLong(aStats);
bUseTime = PkgUsageStats.getDeclaredField(“usageTime“).getLong(bStats);
if((aLaunchCount》bLaunchCount)||
((aLaunchCount == bLaunchCount)&&(aUseTime》bUseTime)))
result = 1;
else if((aLaunchCount《bLaunchCount)||((aLaunchCount ==
bLaunchCount)&&(aUseTime《bUseTime)))
result = -1;
else {
result = 0;
}
} catch (Exception e) {
Log.e(“###“, e.toString(), e);
}
return result;
}
在电脑C:\Program Files\Common Files的文件可以删除吗
不能删除计算机上C:\ Program Files \ Common Files中的文件。 在这里,存储着将用于安装应用程序软件的公共库文件。
“Common Files”文件还包括操作系统的系统程序和应用程序,是一个应用程序运行时文件,存储了许多相关的数据库,涵盖了1,000多个有用的应用程序的插件,补丁程序等,其内的子文件夹是相关的应用程序。-em
因此,C:\Program Files\Common Files的文件是不能删除的,否则会引起系统异常。
扩展资料:
c盘瘦身的方法如下:
1、首先,打开“此电脑”,如下图所示。
2、其次,右键单击c盘,选择“属性”,如下图所示。
3、接着,点击“磁盘清理”按钮,如下图所示。
4、最后,在新窗口中点击“确定”按钮即可,如下图所示。这样,系统就开始自动清理磁盘,达到c盘瘦身的目的。
WindowsImageBackup是什么文件有54G可以删除吗
这是系统镜像备份文件,可以删除。
如果想用一键还原等功能的话,建议自己安装一个系统还原,并且备份系统,一般来说备份一次就够了,经常备份的话占磁盘空间太大了,而且没必要。
需要提醒你的是,系统备份文件有可能被锁定,这时候用强制删除工具可以删除,或者在PE系统中删除。
-s