为啥 logcat 显示这个? [复制]

Posted

技术标签:

【中文标题】为啥 logcat 显示这个? [复制]【英文标题】:Why logcat showing this? [duplicate]为什么 logcat 显示这个? [复制] 【发布时间】:2012-10-23 10:13:17 【问题描述】:

我在eclipse (Helios) 中使用带有 4.1 版本模拟器的 android 最新版本 sdk。每件事都运行良好。但是在我的logcat 中,任何应用程序的每次运行都会得到以下声明。

I/Choreographer(1250): Skipped 1001 frames!  The application may be doing too much work on its main thread.

即使在 Hello world 应用程序中,也会得到相同的 logcat 输出。我没有在我的应用程序中使用多线程。谁能告诉我在我的 logcat 中获取这些日志的原因。

这是我的代码

public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_jsonparsing);

    _mContext = this;
    lv = (ListView) findViewById(R.id.listview);

    new JSONParserTask().execute();

在我的异步任务中,我从服务器获取 JSONArray,对其进行解析并列出。

【问题讨论】:

也许即使您的应用程序没有运行,它也会显示相同的内容? 不,它仅在启动我的(任何即示例或我的工作项目)应用程序时显示。 正如它所说:您正在 UI 线程上进行非 UI 计算。比如查询 sqlite db、评估共享偏好等 但我根本不使用任何数据库,共享偏好,也不做绘图,动画也。 您是否正确使用了 JSONParserTask(),请记住仅将 doInBackground() 用于大型任务。 onPostExecute() 在主 UI 线程中执行,所以不要在那里执行任何繁重的任务,如果可能的话,也粘贴你的 JSONParserTask!! 【参考方案1】:

Android 开发者文档提供了这个:

choreographer 从显示子系统接收定时脉冲(例如垂直同步),然后安排工作作为渲染下一个显示帧的一部分发生。

应用程序通常使用动画框架或视图层次结构中的更高级别抽象间接与choreographer 交互。

更多信息,请参考link和this。

【讨论】:

那么,我怎样才能防止这些日志出现在我的 logcat 中。因为我没有使用任何动画和绘图。 @Androholic 有时这是不可避免的。我在使用逐步调试时经常看到这个日志。编舞只告诉你它跳过的帧,它可能是由于你的 UI 线程上的一些耗时任务引起的,或者像我的情况是由调试暂停和重新启动引起的。因此,如果您在 UI 线程中没有调用任何繁重的任务,请忽略它。 我认为没有办法阻止这种情况。由于系统需要很长时间才能完成特定任务,Choreographer 将在 logcat 中发布说“该应用程序可能在其主线程”。【参考方案2】:

这个logcat跟踪

 I/Choreographer(1250): Skipped 1001 frames! 

应用程序可能在其主线程上做了太多工作,这表明您在主线程中执行了一些庞大的任务。如果您正在执行此类任务,请使用单独的线程机制(AsyncTaskThread 等)来执行此操作,此日志应该会消失。

如果不是,请粘贴你的代码的sn-p!!

【讨论】:

我在编辑中添加了主线程代码。【参考方案3】:

您是否在模拟器上运行您的应用程序。我猜您增加分配给您的 AVD 的内存可能会消除此警告!!..当我的设备模拟器分配的内存较少时,我会遇到类似的问题

【讨论】:

以上是关于为啥 logcat 显示这个? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥在真机上运行android程序,logcat不显示

为啥 android logcat 不显示运行时异常的堆栈跟踪?

eclipse 日志application不显示,整个一列都是空的,为啥啊。怎么解决。求教

为啥这个 CSS 媒体查询没有对在 iPhone 上显示的网站进行更改? [复制]

当两个版本具有相同的行为时,为啥这个 Swift 游乐场会显示不同数量的执行? [复制]

为啥 UIBarButtonItem 显示为禁用? [复制]