Java 反射机制中的两种写法:
例如我在调用清除应用程序缓存中调用方式:
PackageManager pm = getPackageManager();
try {
//反射第一种写法
// Method method = pm.getClass().getMethod("freeStorageAndNotify", long.class,IPackageDataObserver.class);
// method.invoke(pm, Long.MAX_VALUE,new IPackageDataObserver.Stub(){
// @Override
// public void onRemoveCompleted(String packageName,
// boolean succeeded) throws RemoteException {
// System.out.println("issucceeded:" + succeeded);
// }}
// );
//反射第二种写法
Method[] methods = pm.getClass().getMethods();
for(Method m : methods){
if(m.getName().equals("freeStorageAndNotify")){
m.invoke(pm, Long.MAX_VALUE,new IPackageDataObserver.Stub() {
@Override
public void onRemoveCompleted(String packageName, boolean succeeded)
throws RemoteException {
System.out.println("已经全部清除垃圾");
}
});
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}