我是Android SDK/API环境的新手。这是我第一次试着画一个图表。我尝试在模拟器上使用3个不同的免费库运行不同种类的示例代码,没有显示在布局屏幕上。日志猫正在重复如下信息:

 W/Trace(1378): Unexpected value from nativeGetEnabledTags: 0
 I/Choreographer(1378): Skipped 55 frames!  The application may be doing too much work on its main thread. 

当我运行一个与授权库的评估副本相关的示例代码时,这个问题并没有持续存在,图表也正常工作。


当前回答

正如上面其他人回答的那样,“跳过55帧!”意味着应用程序中有一些繁重的处理。

对于我的情况,我的申请过程并不繁琐。我反复检查了所有内容,并删除了那些我认为有点沉重的过程。

我删除了片段、活动、库,直到只剩下骨架。但是问题仍然没有消失。我决定检查一下资源,发现我使用的一些图标和背景相当大,因为我忘记检查这些资源的大小。

因此,我的建议是,如果以上答案都没有帮助,您也可以检查您的资源文件大小。

其他回答

因为我首先最好使用SVG图像而不是所有其他类型的图像,如果不可能,使用一些图像处理工具(如Adobe Photoshop或Fotosizer)压缩所有PNG和JPG资源。最简单的方法之一是在线图像压缩工具,像这样,它帮助我把所有的图像文件减少到初始大小的50%。

我不是专家,但当我想从我的android应用程序发送数据到web服务器时,我得到了这个调试消息。虽然我使用AsyncTask类并在后台进行数据传输,但为了从服务器获取结果数据,我使用了AsyncTask类的get()方法,这使得UI同步,这意味着你的UI将等待太长时间。所以我的建议是让你的应用程序在一个单独的线程上执行每个面向网络的任务。

Android UI:修复跳过的帧

任何开始开发android应用程序的人都会看到这条消息 “编舞(abc):跳过xx帧!申请可以是 在主线上做了太多工作。”那么它实际上是什么 意思是,你为什么要担心以及如何解决它。

这意味着您的代码需要很长时间来处理和帧 都因为它而被跳过,这可能是因为一些沉重的 您在应用程序或数据库的核心所做的处理 访问或任何其他事情,导致线程停止一段时间。

Here is a more detailed explanation: Choreographer lets apps to connect themselves to the vsync, and properly time things to improve performance. Android view animations internally uses Choreographer for the same purpose: to properly time the animations and possibly improve performance. Since Choreographer is told about every vsync events, I can tell if one of the Runnables passed along by the Choreographer.post* apis doesnt finish in one frame’s time, causing frames to be skipped. In my understanding Choreographer can only detect the frame skipping. It has no way of telling why this happens. The message “The application may be doing too much work on its main thread.” could be misleading. source : Meaning of Choreographer messages in Logcat Why you should be concerned When this message pops up on android emulator and the number of frames skipped are fairly small (<100) then you can take a safe bet of the emulator being slow – which happens almost all the times. But if the number of frames skipped and large and in the order of 300+ then there can be some serious trouble with your code. Android devices come in a vast array of hardware unlike ios and windows devices. The RAM and CPU varies and if you want a reasonable performance and user experience on all the devices then you need to fix this thing. When frames are skipped the UI is slow and laggy, which is not a desirable user experience. How to fix it Fixing this requires identifying nodes where there is or possibly can happen long duration of processing. The best way is to do all the processing no matter how small or big in a thread separate from main UI thread. So be it accessing data form SQLite Database or doing some hardcore maths or simply sorting an array – Do it in a different thread Now there is a catch here, You will create a new Thread for doing these operations and when you run your application, it will crash saying “Only the original thread that created a view hierarchy can touch its views“. You need to know this fact that UI in android can be changed by the main thread or the UI thread only. Any other thread which attempts to do so, fails and crashes with this error. What you need to do is create a new Runnable inside runOnUiThread and inside this runnable you should do all the operations involving the UI. Find an example here. So we have Thread and Runnable for processing data out of main Thread, what else? There is AsyncTask in android which enables doing long time processes on the UI thread. This is the most useful when you applications are data driven or web api driven or use complex UI’s like those build using Canvas. The power of AsyncTask is that is allows doing things in background and once you are done doing the processing, you can simply do the required actions on UI without causing any lagging effect. This is possible because the AsyncTask derives itself from Activity’s UI thread – all the operations you do on UI via AsyncTask are done is a different thread from the main UI thread, No hindrance to user interaction. So this is what you need to know for making smooth android applications and as far I know every beginner gets this message on his console.

我的应用程序也有同样的问题。但除了显示卡片列表和文本之外,它并没有做其他事情。没有在后台运行。但随后经过一些调查发现,卡片背景的图像设置导致了这种情况,尽管它很小(350kb)。然后我将图像转换为9patch图像使用 http://romannurik.github.io/AndroidAssetStudio/index.html。 这对我很管用。

如果在应用程序中使用async/await功能,这是正常的。