这个例子使用了动态代理,因此可以对实现了相同接口的所有类的对应方法进行测试。 package com.linquan.test.time; //接口 public interface Testing { public void testArrayList(); public void testLinkList(); } //接口实现类: package com.linquan.test.time; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class TestingImpl implementsTesting{ private List link = newLinkedList(); private List array = newArrayList(); public TestingImpl(){ for(inti=0;i<10000;i++){ array.add(new Integer(i)); link.add(new Integer(i)); } } @Override public void testArrayList() { // TODO Auto-generated methodstub for(inti=0;i<10000;i++){ array.get(i); } } @Override public void testLinkList() { // TODO Auto-generated methodstub for(inti=0;i<10000;i++){ link.get(i); } } } //动态代理类: package com.linquan.test.time; importjava.lang.reflect.InvocationHandler; importjava.lang.reflect.Method; import java.lang.reflect.Proxy; import android.util.Log; public class Handler implementsInvocationHandler { private Object obj; public Handler(Object obj) { this.obj = obj; } public static ObjectnewInstance(Object obj) { Object result =Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), newHandler(obj)); return result; } @Override public Object invoke(Object proxy,Method method, Object[] args) throws Throwable { Object result = null; try { Log.i("Handler", "begin method " +method.getName()); long start =System.currentTimeMillis(); result = method.invoke(obj,args); long end =System.currentTimeMillis(); Log.i("Handler", "the method " +method.getName() + " lasts " + (end - start) + " ms"); } catch (Exception e) { e.printStackTrace(); } finally { Log.i("Handler", "end method " +method.getName()); } return result; } } //测试入口: try { Testing testing = (Testing)Handler.newInstance(new TestingImpl()); testing.testArrayList(); testing.testLinkList(); } catch (Exception e) { } ///測試結果如下:
|
Android测试函数使用时间(动态代理)
最新推荐文章于 2021-11-29 22:30:22 发布