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

应用程序可能在其主线程(Android)上做了太多工作,android,Android,我正在开发一个日历应用程序,使用textview作为日历单元格,当我启动应用程序后检查logcat时,我发现来自Choreographer的消息“跳过76帧!应用程序可能在其主线程上做了太多工作”。 我知道我正在创建很多文本视图(120),但是如何在不影响应用程序性能的情况下构建日历呢? 是否有其他方法来构建支持活动的日历 您不使用的原因是什么 如果您需要滚动自己的控件,则需要将任何重物移动到另一个线程。你也可以 1) 使用java Runnable接口或线程类,可能使用匿名内部类(请参阅) 2

我正在开发一个日历应用程序,使用textview作为日历单元格,当我启动应用程序后检查logcat时,我发现来自Choreographer的消息“跳过76帧!应用程序可能在其主线程上做了太多工作”。 我知道我正在创建很多文本视图(120),但是如何在不影响应用程序性能的情况下构建日历呢?
是否有其他方法来构建支持活动的日历

您不使用的原因是什么

如果您需要滚动自己的控件,则需要将任何重物移动到另一个线程。你也可以

1) 使用java Runnable接口或线程类,可能使用匿名内部类(请参阅)


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

除非我确定我的应用程序性能不好,否则我不愿意做任何更改。我经常在我的模拟器上看到这条消息,有时是在Android仍在启动时,有时是在运行谷歌提供的简单osample应用程序时。这值得一读:


由于您正在制作日历,因此知道手头的单元格数量,考虑可能会扩大包含单元格的布局,这样一个命令就可以设置整个布局,然后您只需填写文本视图的文本?

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


当您有多个数据屏幕时,考虑使用适配器视图是合乎逻辑的,例如
ListView
GridView
。适配器视图使用视图循环将任何给定时间使用的视图数量限制在大约一个屏幕的大小。

我进行了搜索,找到了以下链接:。这是API 16中引入的一个新类

Choreographer允许应用程序将自己连接到vsync,并适当地调整时间以提高性能

Android view动画在内部使用Choreographer的目的是相同的:正确地计时动画,并可能提高性能

由于Choreographer被告知每个vsync事件,因此我可以判断Choreographer.post*API传递的一个Runnable是否在一帧时间内完成,从而导致跳过帧

据我所知,编舞只能检测到跳帧。它无法解释为什么会发生这种情况

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


这与另一个支持活动的日历无关。您只需将TextView创建移动到背景线程。请阅读Android开发者页面。但是,是的,不同的视图可能会减轻负载,尽管/对每个日历单元格使用TextView是推荐的方法吗?您可能需要查看示例应用程序以确保。我相信GridView、TableLayout或其他一些复合视图组比使用一堆文本视图更好,这就是为什么LogCat是complaining@JadeGridView或TableLayout都需要创建文本视图。。。我看不出这有什么帮助。@幸运的是,你在UI线程下创建
TextView
s的“can”是正确的,这不会为你节省任何东西,因为你只能从UI线程将它们添加到布局中,而测量图形占用了所有的时间,不是对象创建。我没有使用选择器,因为我需要在日历上显示事件,我还需要单击事件来显示一些信息(这就是为什么我使用textview),这是一个有趣的想法,但我使用的是从textview继承的自定义类,我需要添加一些属性来存储信息,如何在XML文件中使用它?O.O现在我还没有经验,但这里有一个Android链接,我找到了一个开始[。不确定它是否有用,但我希望如此。我在搜索“Android自定义视图XML”时也得到了一些结果在谷歌。在这一点上,我只能说祝你好运:Pi A感谢你的帮助,谢谢!没问题,任何时候:)这个。看看回收你的视图。谷歌创建的日历就是这样做的。它们的代码是开源的。值得研究。