我有一个地图视图,它需要显示来自网络的大量覆盖。现在我当前的设计是使用AsyncTask
在哪里打开套接字连接,doInBackground()
并在publishProgress()
其中显示地图视图上的覆盖。
现在这个设计的问题是:
- 首先有
ItemizedOverlays<Overlayitem>
大约 100 个左右的叠加层 ( ),它在处理数据期间分配了一些内存。接下来覆盖地图图块也必须加载,在内存问题中运行,Grow Heap (frag case)
因为它必须加载位图(尽管我正在使用AsyncTask
并行执行器加载和显示)。 - 平移和缩放需要很长时间,因为显示了叠加层并且必须同时加载地图图块。有时会
ANR
弹出对话框。 - 现在我的套接字连接大部分时间都必须打开(比如大约 30 分钟),因为我不确定什么时候收到新数据,这意味着
AsyncTask
大部分时间都必须在后台运行。
现在我的计划是将这个 AsyncTask 类移动到 IntentService 类,这个套接字连接大部分时间都可以打开,但是我如何让它与FragmentActivity
?IntentService
在转向之前,转向或Service
完全离开AsyncTask
我已经在使用的课程是否有意义?
注意:我想移动的唯一原因是我IntentService
遇到Service
了内存问题,其中大部分是通过将内存分配给位图(maptiles)。我也尝试清理 maptile 缓存,但运气不佳。我尝试在某种程度上调用System.gc()
一个Timer
线程,它似乎工作,但长期不确定它会如何执行。
编辑:
底线GC
是导致我的应用程序变慢。另外请看一下这个链接,我实际上是如何加载我的地图的:优化 android 代码片段 - 更好的设计方法?
提醒一下,当没有叠加层时,地图贴图的加载速度非常快而且很好。只有当数据通过网络接收并试图覆盖它时,才会GC
触发多次。