应用程序可能在其主线程(Android)上做了太多工作

时间:2013-07-03 21:58:56

标签: android

我正在开发一个日历应用程序,并使用textview作为日历单元格,当我在启动应用程序后检查logcat时,我发现来自Choreographer的这条消息“Skipped 76 frames!该应用程序可能在其主要工作上做了太多工作线”。 我知道我正在创建很多textviews(120),但是如何构建我的日历而不影响我的应用程序性能? 是否有另一种方法来构建支持事件的日历?

5 个答案:

答案 0 :(得分:1)

120个文本视图似乎很多,特别是它看起来像几个屏幕的数据。

当您有多个数据屏幕时,考虑使用适配器视图是合乎逻辑的,例如ListViewGridView。适配器视图使用视图回收将任何给定时间使用的视图数限制为大约一个屏幕值。

答案 1 :(得分:0)

您是否有理由不使用Pickers

如果你需要自己控制,你需要将任何繁重的任务移到另一个线程。你可以

1)使用java Runnable接口或Thread类,可能使用匿名内部类(参见here)。

2)使用FutureTask + executor服务(here就是一个例子)。

答案 2 :(得分:0)

由于你正在制作一个日历,因此意识到手头的单元格数量,考虑可能会膨胀包含单元格的布局,并且用一个命令设置整个布局,然后你只需填写文本TextViews?

答案 3 :(得分:0)

我进行了搜索并找到了此链接:http://developer.android.com/reference/android/view/Choreographer.html。这是API 16中引入的新类。

Choreographer允许应用程序将自己连接到vsync,并正确计时以提高性能。

Android视图动画在内部使用Choreographer用于同一目的:正确计时动画并可能提高性能。

由于Choreographer被告知每个vsync事件,我可以判断Choreographer.post * apis传递的其中一个Runnables是否在一帧的时间内完成,导致跳过帧。

在我的理解中,编舞者只能检测跳帧。它无法解释为什么会发生这种情况。

消息“应用程序可能在其主线程上做了太多工作。”可能会产生误导。

You may refer this question

答案 4 :(得分:-1)

除非我认为我的应用程序性能不佳,否则我不愿意进行任何更改。我经常在我的模拟器上看到此消息,有时在Android启动时,有时在运行由Google提供的简单osample应用程序时。这值得一读:

Choreographer(697): Skipped 152 frames! Debug log