Я создал очень простую деятельность TempActivity без содержания, просто для целей тестирования. Когда эта активность загружается в Android-телефон, я сделал примерно 40-кратное изменение ориентации, я взял файл кучи как hprof и экспортировал его в инструмент MAT и осмотрел. Он показывает 40 экземпляров моего TempActivity и в каждом случае много классов для просмотра панели действий, таких как linearlayout, imageview и т. Д.Изменение ориентации активности Android, каждый раз новый экземпляр
Каждый раз, когда я поворачиваю экран, DDMS показывает все больше и больше памяти, добавленной в кучу для этого приложения, Это будет сбор мусора через некоторое время? Когда я принудительно сделал GC, все равно он не очистился, и он показал увеличенную память в куче.
Пожалуйста, дайте мне знать, что это поведение Android по умолчанию, можем ли мы сделать что-то, чтобы удалить все предыдущие экземпляры активности? Это случай утечки памяти? Потому что в моем приложении реального времени (с изображениями и другими материалами в contentview), я сталкиваюсь с той же проблемой, когда я поворачиваю экран, каждый раз, когда создается новая активность экземпляра, и размер кучи продолжает расти.
Не из-за по умолчанию ActionBar imageview, linearlayout или других элементов управления автоматически встроены в каждую активность андроида?
Вот мой класс темп деятельности:
[Activity(Label = "TempAcivity", MainLauncher = true)]
public class TempAcivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Create your application here
}
}
EDIT
Вот мой файл манифеста и файл стиля, который применяется для нанесения
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="HF.Mobility.Android" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="21" />
<application android:label="Health Hub" android:theme="@style/CustomHoloTheme" android:icon="@drawable/ApplicationIcon" android:allowBackup="false">
<application android:label="@string/ApplicationName"></application>
</application>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
</manifest>
Стиль файла:
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<style name="CustomHoloTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowActionBarOverlay">true</item>
<item name="android:icon">@android:color/transparent</item>
<item name="android:actionBarStyle">@style/MyTheme.ActionBarStyle</item>
<item name="android:itemTextAppearance">@style/myCustomMenuTextApearance </item>
<item name="android:typeface">monospace</item>
</style>
<style name="MyTheme.ActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
<item name="android:background">@drawable/actionbar_background</item>
</style>
<style name="MyTheme.ActionBar.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
<item name="android:textColor">#FFFFFF</item>
</style>
<style name="myCustomMenuTextApearance" parent="@android:style/TextAppearance.Widget.IconMenu.Item">
<item name="android:textColor">@color/xam_green</item>
</style>
</resources>
Вот actionbar_background.xml файл:
<?xml version="1.0" encoding="utf-8" ?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="#00000000" />
</shape>
</item>
</layer-list>
Пожалуйста, ваши файлы манифест. –
Всякий раз, когда вы меняете активность ориентации экрана, снова создавайте, так что onCreate Called everytime. Но если вы хотите управлять объектом или вы не хотите создавать объект каждый раз, тогда вы должны сохранять объект в пакете в методе onSaveInstanceState и проверять его экземпляр в onCreate ... –
Утилизируйте Activity в своем методе 'OnDestroy' для разрыва партнера объектное соединение. Мой другой ответ здесь охватывает то, что происходит более подробно: http://stackoverflow.com/questions/28863058/xamarin-android-finalizer-not-getting-called-when-leaving-the-activity-to-go-to/ 28868582 # 28868582 – matthewrdev