zoukankan      html  css  js  c++  java
  • Android 最简单的测试UI卡顿

    就两个类:

    public class BlockDetectByPrinter {
    private static final String START = ">>>>> Dispatching";
    private static final String END = "<<<<< Finished";
    public static void start(){
    Looper.getMainLooper().setMessageLogging(new Printer() {
    @Override
    public void println(String x) {
    if(x.startsWith(START)){
    LogMonitor.getsInstance().startMonitor();
    }
    if(x.startsWith(END)){
    LogMonitor.getsInstance().startMonitor();
    }
    }
    });
    }
    }


    public class LogMonitor {
    private static LogMonitor sInstance = new LogMonitor();
    private HandlerThread mLogThread = new HandlerThread("log");
    private Handler mIoHandler;
    private static final long TIME_BLOCK = 2000L;

    private LogMonitor(){
    mLogThread.start();
    mIoHandler = new Handler(mLogThread.getLooper());
    }
    private static Runnable mLogRunnable = new Runnable() {
    @Override
    public void run() {
    StringBuilder sb = new StringBuilder();
    StackTraceElement[] stackTrace = Looper.getMainLooper().getThread().getStackTrace();
    for(StackTraceElement s:stackTrace){
    sb.append(s.toString()+" ");
    }
    LogUtil.e("LogMonitor",sb.toString());
    }
    };
    public static LogMonitor getsInstance(){
    return sInstance;
    }
    // public boolean isMonitor(){
    // return mIoHandler.hasCallbacks(mLogRunnable);
    // }
    public void startMonitor(){
    mIoHandler.postDelayed(mLogRunnable,TIME_BLOCK);
    }
    public void removeMonitor(){
    mIoHandler.removeCallbacks(mLogRunnable);
    }

    }
    然后在application的onCreate方法使用
    BlockDetectByPrinter.start();



  • 相关阅读:
    Spring Boot 配置元数据指南
    面试中常被提到的最左前缀匹配原则
    MyBatis缓存机制(一级缓存,二级缓存)
    计算机网络基础知识
    垃圾收集算法与垃圾收集器
    递归与分治策略
    五种IO模型和BIO,NIO,AIO
    七种阻塞队列
    ConcurrentHashMap(1.7版本和1.8版本)
    重入锁 ReentrantLock
  • 原文地址:https://www.cnblogs.com/xiaoxiaing/p/7865366.html
Copyright © 2011-2022 走看看