Я провел некоторые исследования, и я до сих пор не уверен на 100%, может ли это вызвать утечку памяти. Я использую вид кнопки (v.context). Я думаю, что со мной все в порядке, так как контекст не хранится как статический, но я хотел бы получить отзыв, если это возможно. Основная проблема, которую я вижу, связана с OSMonitor... значение (M) увеличивается, увеличивается и увеличивается. При каждом открытии/закрытии виджета и повороте экрана.
32 м 43 м 61 м 77 м и т. д...
Я не уверен, является ли (M) мегабайтами или мегабитами. Если это основано на стеке, я предполагаю мегабиты perhpas, поскольку большинство высокопроизводительных устройств ограничены 32/48 МБ в стеке (или чем-то еще).
Спасибо за отзыв/дополнительные глаза!
Это приложение Banner в Маркете, кстати...
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;
}