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

Android 当应用程序导航到另一个活动时,如何删除启动屏幕的窗口背景图像(以避免内存泄漏),android,memory-leaks,xamarin,splash-screen,Android,Memory Leaks,Xamarin,Splash Screen,在我的XamarinAndroid应用程序中,当应用程序启动时,我会显示3秒钟的初始屏幕。在这段时间里,我做了创建sqlite表的后台工作,如果登录需要,从web加载用户信息。这些任务是使用异步方式完成的 我为splashactivity指定了主题,在该主题中,我将背景指定为一个37 KB的jpeg文件,其尺寸为400*692 3秒钟后,我导航到我的startActivity,在SplashScreen活动的onDestroy中,我将另一个主题分配给背景设置为null的窗口。但是,如果我拍摄堆的

在我的XamarinAndroid应用程序中,当应用程序启动时,我会显示3秒钟的初始屏幕。在这段时间里,我做了创建sqlite表的后台工作,如果登录需要,从web加载用户信息。这些任务是使用异步方式完成的

我为splashactivity指定了主题,在该主题中,我将背景指定为一个37 KB的jpeg文件,其尺寸为400*692

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

请让我知道如何避免泄漏

[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)
    {

        base.OnCreate(bundle);
        //Display Splash Screen for 3 Sec  
        AndroidDALProvider.InitializeTables();
        Thread.Sleep(3000);
        TablesCreated();

        //Start Activity1 Activity  
        StartActivity(typeof(LoginActivity));            
    }

    private void TablesCreated()
    {
        LoadData("283");
        LoadData("284");
        LoadData("248");
        LoadData("249");
    }

    private void LoadData(string userID)
    {
        DalProvider.GetPatInfoWithID(userID,PatInfoLoadedFromSqlite);
    }

    private void PatInfoLoadedFromSqlite(PatientDemographicsDTOUI patientInfo, string patID)
    {
        if (patientInfo == null)
            LoadDataFromInternet(patID);
    }

    private void LoadDataFromInternet(string userID)
    {
        //Check for internet connection
        if (IsNetworkAvailable)
        {
            //set loggedinuser details for this user
            try
            {
                ServiceProvider.GetPatDemographics(userID).ContinueWith(PatDemographicsReceived);
            }
            catch (Exception exception)
            {
                ShowMessage(ApplicationContext, exception.Message);
            }
        }
        else
        {
            ShowMessage(ApplicationContext, "Network not available");
            //ShowPatInfoScreen();
        }
    }

    void PatDemographicsReceived(Task<PatientDemographicsDTO> patient)
    {
        if (patient != null)
        {
            //Fill the received data into local storage
            DalProvider.AddPatInfoToStorage(patient.Result.GetUIModel(), PatInfoAddedToLocal);
        }            
    }

    private void PatInfoAddedToLocal(int obj)
    {

    }

    protected override void OnDestroy()
    {
        dalProvider = null;
        SetTheme(Resource.Style.Theme_SplashActivityNoBG);
        base.OnDestroy();
    }
}
[Activity(Theme=“@style/Theme.SplashActivity”,MainLauncher=true,NoHistory=true,ScreenOrientation=ScreenOrientation.grait)]
公共类SplashScreen:BaseActivity
{
私有AndroidDALProvider;
公共AndroidDALProvider DalProvider
{
获取{return(dalProvider???(dalProvider=newandroiddalprovider());}
}
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
//显示启动屏幕3秒
AndroidDALProvider.InitializeTables();
睡眠(3000);
创建表();
//开始活动1活动
StartActivity(类型(后勤活动));
}
创建的私有void表()
{
载荷数据(“283”);
载荷数据(“284”);
载荷数据(“248”);
载荷数据(“249”);
}
私有void LoadData(字符串userID)
{
DalProvider.getpatinfo-withid(userID,patinfo-loadedfromsqlite);
}
私有void patinfo从SQLite加载(PatientDemographicsDTOUI patientInfo,字符串patID)
{
if(patientInfo==null)
从互联网加载数据(patID);
}
私有void LoadDataFromInternet(字符串用户ID)
{
//检查互联网连接
如果(网络可用)
{
//设置此用户的loggedinuser详细信息
尝试
{
ServiceProvider.GetPatDemographics(userID).ContinueWith(PatDemographicsReceived);
}
捕获(异常)
{
ShowMessage(ApplicationContext,exception.Message);
}
}
其他的
{
ShowMessage(ApplicationContext,“网络不可用”);
//showPatInfo屏幕();
}
}
接收的无效患者人口统计(任务患者)
{
如果(患者!=null)
{
//将接收到的数据填入本地存储器
DalProvider.addPatInfo存储(patient.Result.GetUIModel(),patInfo AddedToLocal);
}            
}
专用void patinfo addedtocolal(int-obj)
{
}
受保护的覆盖无效OnDestroy()
{
dalProvider=null;
SetTheme(Resource.Style.Theme\u SplashActivityNoBG);
base.ondestory();
}
}
这里是一个风格的启动屏幕

<style name="Theme.SplashActivity" parent="CustomHoloTheme">
<item name="android:windowBackground">@drawable/splash</item>
<item name="android:windowNoTitle">true</item>
</style>

@可牵引/飞溅
真的
这种风格我是在飞溅活动的OnDestroy中应用的

<style name="Theme.SplashActivityNoBG" parent="CustomHoloTheme">
<item name="android:windowBackground">@null</item>
<item name="android:windowNoTitle">true</item>
</style>

@空的
真的