• 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();



  • 相关阅读:
    JSON 数据转换
    .NET LINQ 数据排序
    .NET LINQ标准查询运算符
    UML 序列图
    UML 类图
    UML 用例建模
    UML 概述
    .NET LINQ查询语法与方法语法
    .NET LINQ查询操作中的类型关系
    .NET 反射概述
  • 原文地址:https://www.cnblogs.com/xiaoxiaing/p/7865366.html
Copyright © 2020-2023  润新知