2011-12-07 13 views
4

私はいくつかのリサーチを行っていますが、これが原因でメモリリークが発生する可能性がある場合は、まだ100%確実ではありません。私はボタンビュー(v.context)を使用しています。私はコンテキストが静的なものとして保存されていないので私はOKだと思いますが、可能であればフィードバックをお願いします。私が目にしている主な問題はOSMonitorです。(M)の値はUP、UP、UPになります。ウィジェットのオープン/クローズとスクリーン回転のたびに。静的メモリリーク(コンテキストあり)

32M 43M 61M 77M 等...

私は(M)はメガバイトまたはMegebitsであるかはわかりません。これがスタックに基づいている場合、ほとんどのハイエンドデバイスはスタック(または何か)の32/48 MBに制限されているので、私はMegebitsのperhpasと仮定しています。

フィードバック/余分な目をありがとう!

これはところで、市場でのバナーアプリです...

public class Globals { 

public static final String PREF_NAME  = "BannerPreferences"; 
public static final int  MAX_TEXT_SIZE = 20; 

// refresh ALL widgets loaded on the user's screens 
// this could be for removing or adding 'pendingIntents or during bootup 
public static void refreshAllWidgets(Context context) { 
    Logger.d("BANNER", "Globals:refreshAllWidgets"); 

    invalidateWidgets(context, BannerWidget.class); // 1x4 
    invalidateWidgets(context, BannerWidget1x2.class); 
    invalidateWidgets(context, BannerWidget2x2.class); 
} 

// there has to be a API way to do this!! Until then, just loop thru all 
// widget_provider classes.. 
private static void invalidateWidgets(Context context, Class<?> cls) { 

    ComponentName comp = new ComponentName(context, cls); 
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 

    int[] appWidgetIds = appWidgetManager.getAppWidgetIds(comp); 

    for (int i = 0; i < appWidgetIds.length; i++) { 
     BannerWidgetBase.updateAppWidget(context, appWidgetManager, appWidgetIds[i]); 
    } 

    appWidgetIds = null; 
} 
+0

メモリーがリークしていると思われる場合は、DDMSを使用してヒープ・ダンプを生成し、Eclipse MATユーティリティーで結果を分析してください。 – CommonsWare

+0

@CommonsWare私はそれを使用するためのガイドに従ったが、少し圧倒される。私は変換し、それは日食を使用して開いたが、私はかなりデータを使用するcouldnt。多くの方法に。 – kenyu73

答えて

2

漏れがあるようにはありません。 Dalvik VMの性質上、ヒープは最大ヒープサイズに達するまで使用中に成長し続けます。ただし、オブジェクトのヒープに十分な領域がある可能性があります。私はエミュレータのイメージ内のプロセスメモリ(ヒープ)を制限し、実際にOutOfMemoryErrorを取得するかどうかを確認することをお勧めします。エミュレータを作成する際には、設定するMax VM application heap sizeというプロパティがあります。 〜32(メガバイトで測定)。

OutOfMemoryErrorを取得した場合は、Eclipse MATを詳しく見てください。

P.S .:アプリケーションのコンテキストを自分のケースで使用し、アクティビティを使用しないでください。アクティビティからアクティビティをトリガする場合は、アクティビティをコンテキストとして渡すのではなく、getApplicationContextと考えてください。静的なものは、アクティビティのインスタンスよりも長く存続する可能性があります。

関連する問題