2016-02-11 7 views
7

私はサービスを開始しています=>バックグラウンドサービス、および "新しいスレッド"のファイルのチェックを開始するログでは、アプリが一時停止します。I/artを取得する:明示的な同時マーク掃引GC解放

ログイン:I/art: Explicit concurrent mark sweep GC freed 25935(1686KB) AllocSpace objects, 13(903KB) LOS objects, 39% free, 13MB/22MB, paused 649us total 43.569ms

それは写真(約20写真)の束が含まれているSDカード内のMyData内のファイル、のためだけのスキャンです。

**スキャン=画像名を取得して文字列に保存する。

答えて

15

これは、ガベージコレクタがジョブを実行してメモリを解放しているということです。

頻繁に(または一貫して)表示されている場合は、あまりにも多くのオブジェクトを割り当てる可能性があります。一般的な原因は、そうのようなループ内で多くの(または少数の大規模な)オブジェクトを割り当てている。

for (int i = 0; i < 100; i++) { 
    Bitmap bmp = Bitmap.create(100, 100, Bitmap.Config.ARGB_4444); 
} 

我々はこのループを打つたびに、我々は百個の新しいビットマップオブジェクトを割り当てます。

GCスイープを防ぐ最も良い方法は、オブジェクトを割り当てないことです。もちろん、オブジェクトをJavaで割り当てる必要があるため、不必要に割り当てることがないようにする必要があります。

Here is one of many YouTube videos Googleは、GCイベントを回避し、メモリを適切に管理するためのヒントを公開しています。

+1

私は30回連続して働くアプリケーションでこの問題を抱えています。コードで何も変更されていません。グレーの画面が表示され、永遠にこれを続けます。 Androidスタジオは「 – ObedMarsh

+0

」AndroidスタジオはIDEで、デバイス上で動作するコードとは関係ありません。無限に動いているループがあるように思えます。 –

+0

新しいエミュレータを作成してからしばらくすると、現在コードにループが存在しない場合、コードが正常に機能します。それは、sqlliteを使用する基本的なメモアプリです。データベースatmに3つのメモがあります。私は何らかの理由でカーソルを反復しようとすると起こるようです。 – ObedMarsh

関連する問題