我正在开发一个项目,我们正在创建一个Android应用程序,要求服务器上的数据显示在用户的设备上(不知道我能提供多少背景信息...如果更多的话,我会尽力而为需要)。我们支持姜饼(2.3)及以上(最新的JellyBean 4.2)。
现在奇怪的是,应用程序在运行2.3.x的手机上运行非常快速和平稳(这些通常是稍微较旧的设备,如LG Optimus 2X),而如果我们尝试相对运行应用程序拥有JellyBean 4.1+的新设备(Galaxy s3等),应用程序运行速度太慢,性能成为可用性问题。这种情况发生在从服务器提取数据并显示它们的屏幕上。
我还通过在模拟器上运行它来确认了这种行为。
所以我根据以下事实做了一些研究:我们在LogCat中仅获得4.1 +的以下内容:
06-29 23:11:17.796:I / Choreographer(691):跳过X帧!应用程序可能在其主线程上做了太多工作。
所以似乎这个名为Choreographer的东西被添加到API lvl 16中,它会协调动画,输入和绘图的时间。
我想知道这是否导致了这个问题?似乎不太可能是硬件问题,我们的应用程序没有任何动画,我们没有针对2.3.x和4.1 +的单独实现
由于
答案 0 :(得分:1)
从Ice Cream Sandwich开始,AsyncTask
的默认行为已从并行执行程序更改为序列化执行程序。
当您在一批AsyncTask
中执行多个网络请求时(如注释中所示),这意味着您的应用程序在启动下一个请求之前会等待先前的请求响应。
您可以使用以下代码更改AsyncTask
的执行者:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
myTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
else {
myTask.execute();
}
来自CommonsWare博客的AsyncTask Threading Regression Confirmed。
答案 1 :(得分:1)
我在Kindle Fire,Sony Xperia Z和Samsung S4(都是用android 4.2)上经历了同样的事情。
修复方法是:在App Manifest文件中删除“android:supportsRtl =”true“”。
希望它能节省您的时间。在我拿到它之前,我花了4个小时进行测试和合并。