Android ObjectAnimator:如何检测帧率?

Android ObjectAnimator:如何检测帧率?,android,objectanimator,Android,Objectanimator,我在不同的设备上使用ObjectAnimator和测试应用程序。在一些老式手机上,它的动画效果太差(没有GPU,没有内存等),所以我想自动将用户切换到第二个(lite)版本的应用程序 那么,如何检测ObjectAnimator是什么呢 它有帧率报告吗?我什么也没找到 编舞有相同的听众吗?它在catlog中列出了错误,但我想在代码中得到它 01-22 05:55:15.775:信息/编舞(3794):跳过33帧!应用程序可能在其主线程上做了太多工作。 注意:我知道如何通过system命令解析cat

我在不同的设备上使用ObjectAnimator和测试应用程序。在一些老式手机上,它的动画效果太差(没有GPU,没有内存等),所以我想自动将用户切换到第二个(lite)版本的应用程序

那么,如何检测ObjectAnimator是什么呢

  • 它有帧率报告吗?我什么也没找到
  • 编舞有相同的听众吗?它在catlog中列出了错误,但我想在代码中得到它

    01-22 05:55:15.775:信息/编舞(3794):跳过33帧!应用程序可能在其主线程上做了太多工作。

  • 注意:我知道如何通过system命令解析catlog,但在我看来,这不是一个智能或快速的解决方案


    注2:我不需要让事情变得更快。我需要检测慢速手机。

    好的,这个解决方案很好用

    它可以从ObjAnimator的循环中调用(例如,listener-onRepeat)

    您可以对事件进行计数,并得出有关设备速度的结论

    p、 这还不够聪明,但直到没有人回答关于本机帧率报告的问题

    boolean getCatLog(){
        boolean yes=false;
        try {
            Process process = Runtime.getRuntime().exec("logcat -d");
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String output;
            String lastLine = null;
            while ((output = reader.readLine()) != null) {
                lastLine = output;
            }
            if(lastLine!=null && lastLine.contains("Choreographer")){
                Log.d(TAG,"yes!");  //do not remove!
                yes=true;
            }
            reader.close();
            process.waitFor();
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        return yes;
    }
    

    消息说你在主线程上做了太多的工作,所以动画断断续续。只需将工作移动到背景线程,动画就会顺利运行。当然不会。那么,如何捕捉编舞的信息呢?是的……好的……好的。祝你好运,ElDuderino,我得用慢速设备做压力测试。没有任何“主线程工作”,只有ObjAnimator。或者,想象一下,用户运行一些服务、更新和后台进程。我的应用程序需要检测自身的低速并进行纠正。所以我需要帧速率,或者捕获日志。(下面我发布了一些解决方案)