0

我有一个地图视图,它需要显示来自网络的大量覆盖。现在我当前的设计是使用AsyncTask在哪里打开套接字连接,doInBackground()并在publishProgress()其中显示地图视图上的覆盖。

现在这个设计的问题是:

  1. 首先有ItemizedOverlays<Overlayitem>大约 100 个左右的叠加层 ( ),它在处理数据期间分配了一些内存。接下来覆盖地图图块也必须加载,在内存问题中运行,Grow Heap (frag case)因为它必须加载位图(尽管我正在使用AsyncTask并行执行器加载和显示)。
  2. 平移和缩放需要很长时间,因为显示了叠加层并且必须同时加载地图图块。有时会ANR弹出对话框。
  3. 现在我的套接字连接大部分时间都必须打开(比如大约 30 分钟),因为我不确定什么时候收到新数据,这意味着AsyncTask大部分时间都必须在后台运行。

现在我的计划是将这个 AsyncTask 类移动到 IntentService 类,这个套接字连接大部分时间都可以打开,但是我如何让它与FragmentActivityIntentService在转向之前,转向或Service完全离开AsyncTask我已经在使用的课程是否有意义?

注意:我想移动的唯一原因是我IntentService遇到Service了内存问题,其中大部分是通过将内存分配给位图(maptiles)。我也尝试清理 maptile 缓存,但运气不佳。我尝试在某种程度上调用System.gc()一个Timer线程,它似乎工作,但长期不确定它会如何执行。

编辑: 底线GC是导致我的应用程序变慢。另外请看一下这个链接,我实际上是如何加载我的地​​图的:优化 android 代码片段 - 更好的设计方法? 提醒一下,当没有叠加层时,地图贴图的加载速度非常快而且很好。只有当数据通过网络接收并试图覆盖它时,才会GC触发多次。

4

2 回答 2

0

根据评论,听起来 GC 导致应用程序变慢。不如重复使用您的位图,而不是回收它们

于 2014-06-18T17:11:34.580 回答
0

这是列出不同的问题,实际上是完全不同的。

  • 由于地图图块导致的 osmdroid 内存消耗问题
  • 关于如何以类似于推送模式的方式接收网络数据的问题
  • 关于处理大量叠加层的问题=>多少?(100 个?)哪种?我什至不清楚这对你来说是否真的是一个问题。

从我的角度来看,这个问题应该被删除,取而代之的是具体问题,适当地制定。

于 2014-06-18T17:29:24.643 回答