小编Suk*_*etu的帖子

当应用程序导航到另一个活动时如何删除启动画面的窗口背景图像(以避免内存泄漏)

在我的 Xamarin android 应用程序中,当应用程序启动时,我会显示闪屏 3 秒。在此期间,我为创建 sqlite 表做后台工作,如果需要登录,从 web 加载用户信息。这些任务是使用异步方式完成的。

我为 splashactivity 分配了主题,在该主题中,我将背景分配为一个 37 KB 大小的 jpeg 文件,尺寸为 400*692。

3 秒后,我导航到我的 startActivity,在 SplashScreen 活动的 onDestroy 中,我将另一个主题分配给背景设置为 null 的窗口。但是,如果我对堆进行快照并在 MAT 中进行检查,它仍然显示具有泄漏嫌疑的 SplashActivity 具有 4.4 MB(占总堆的 13%)。我正在为 SplashActivity 以及样式附加代码。

请让我知道如何避免这种泄漏?

[Activity(Theme = "@style/Theme.SplashActivity", MainLauncher = true, NoHistory = true, ScreenOrientation = ScreenOrientation.Portrait)]
public class SplashScreen : BaseActivity
{
    private AndroidDALProvider dalProvider;
    public AndroidDALProvider DalProvider
    {
        get { return (dalProvider ?? (dalProvider = new AndroidDALProvider())); }
    }
    protected override void OnCreate(Bundle bundle)
    { …
Run Code Online (Sandbox Code Playgroud)

android memory-leaks splash-screen xamarin

6
推荐指数
0
解决办法
1214
查看次数

Android Activity 方向改变,每次都有新实例

我创建了非常简单的活动 TempActivity,没有内容视图,仅用于测试目的。当这个活动加载到安卓手机中时,我做了大约 40 次方向改变,我将堆文件作为 hprof 并导出到 MAT 工具并进行检查。它显示了我的 TempActivity 的 40 个实例,在每个实例中都有许多用于操作栏视图的类,如线性布局、图像视图等。

每当我旋转屏幕时,DDMS 都会显示越来越多的内存添加到此应用程序的堆中,理想情况下不应该在一段时间后进行垃圾收集吗?当我强行执行 GC 时,它仍然没有被清除,并且显示堆中的内存增加。

请让我知道这是 Android 的默认行为,我们可以做些什么来删除所有以前的活动实例吗?这是内存泄漏的情况吗?因为在我的实时应用程序中(在 contentview 中有图像和其他东西),我在旋转屏幕时遇到同样的问题,每次创建新的实例活动并且堆大小不断增加。

是不是因为默认的 ActionBar imageview、linearlayout 或其他控件会自动内置每个 android 活动,对吗?

这是我的临时活动课程:

[Activity(Label = "TempAcivity", MainLauncher = true)]
public class TempAcivity : Activity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        // Create your application here
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑

这是我申请的清单文件和样式文件

<?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" …
Run Code Online (Sandbox Code Playgroud)

android garbage-collection memory-leaks screen-orientation xamarin

5
推荐指数
1
解决办法
1546
查看次数