2011-12-08 13 views
0

私はAndroid 13MBのアプリケーションを持っています。これは、SDカードからオフライン/キャッシュされた地図を表示します。私はmapnik mapsourceを使用しており、33、000のマップタイルを持っています。OutOfMemoryErrorを避けるAndroidアプリの最適化

m_mapView.setTileSource(TileSourceFactory.MAPNIK); 

問題:マップを表示しているとき

、それはmaptilesをロードするために時間がかかります。さらに、スクロールすると約2〜3秒間フリーズし、強制的に閉じます。 try catchを使うことはできますか?

enter image description here

+3

画像の代わりにlogcatのテキストを使用してください – Craigy

+0

lagcatの詳細をコピーできませんので、画面を印刷します – rahstame

+1

実際にコピーする行を選択してから、「Ctrl + C」 '編集 - >コピー 'に行きます – Craigy

答えて

0

これらのイメージが大きい場合や多くの場合は、すべてを一度にメモリに保存するだけのメモリが不足している可能性があります。使用可能なヒープスペース(32MB)に合わせて、タイルをインテリジェントにロードおよびアンロードする方法を見つける必要があります。

しかし、私は別の推測を持っています:あなたがもう必要としないオブジェクトをのBitmapに呼び出していますか?そうでない場合は、十分なメモリがある場合でもすぐにこのエラーが発生します。

0

私はとにかくタイルがどのように表示されるかを正確に知っているが、ここではいくつかのポイントはありません:

  1. をあなたがそれらを必要とする場合にのみ、メモリで物事を維持していることを確認します。 Androidのヒープサイズは16〜32MBの間で異なります。また、多くの場合、Androidのヒープサイズが不足するとアプリがクラッシュします。
  2. WeakReferences - http://developer.android.com/reference/java/lang/ref/WeakReference.html
  3. あなたはSDカードから物事が遅くなるたびに読み込んでいます。別のスレッドでこれを実行していることを確認してください。
  4. 可能であれば、NDKを使用してください。ネイティブコードには、AndroidのJava環境が課す厳しい要件はありません。
+0

まず最初にあなたの答えをありがとう、私はメモリに物事を保持するような方法でコード化する方法がわかりません。第二に、あなたがスレッディングを行うタイミングを教えてくれたときの例を挙げることができます。第三に、私はJavaに新しいと私はどのようにファイルI/Oを使用するか分からない、ファイルI/Oから別のアイテムを脇に与えることができます...ありがとう – rahstame

関連する問題