如何处理在应用程序的其余部分仍在运行时创建的新“应用程序”?

时间:2017-01-22 21:49:51

标签: c# android xamarin xamarin.forms

我遇到的东西对我来说似乎非常直观,也许是因为我对Android比较陌生,所以我似乎无法解决它,为了解决它。

当通过开始点击主页或“概览”按钮暂停某个应用时,其简历就是这样 - 它从中断处继续恢复。

BUT

当点击后退按钮暂停应用程序时,稍后会在MainActivity中再次调用LoadApplication(new App());恢复该应用程序。这意味着App内发生的任何初始化都会干扰仍然存在的所有其他变量(主要是思考:静态变量)。 (那么旧的App呢?它会被回收,还是会导致资源泄漏?)

SO

应如何处理?我应该重构我的所有代码以便在App中几乎没有任何内容吗?或者我在特定手机中看到了一些错误?正如我所说,这违背了我所知道的App是应用程序的“顶层”,所以我无法弄清楚这里发生了什么。

代码澄清要点:

public partial class App : Application
{
    bool b = Test1.B;//false the first time, true after "back" and resuming.

    public App()
    {
        InitializeComponent();
        Test1.B = true;
        MainPage = new Testbed.MainPage();
    }     
}

class Test1
{
    public static bool B = false;
}

1 个答案:

答案 0 :(得分:0)

首先,让我解释一下发生了什么。当有人回击时,你的Activity调用finish()(也许Xamarin不会将它们称为活动?无论它是否存在,它们都存在并且它有一个)。这结束了活动。当你到家时,没有调用完成,你的活动没有结束,它仍在运行,只是没有激活(想想它就像点击PC上的最小化按钮)。

每当您的应用不是活动应用(不在屏幕上)时,Android可能会在需要资源时将其终止。它通过优先系统杀死应用程序。没有正在运行的活动的应用程序比具有正在运行的活动的应用程序更可能被杀死。但是框架可能会在任何时候杀死任何应用程序 - 或者永远不会杀死它们并让它们永远运行。因此,当按下主页按钮使其不太可能被杀死时,它也不会阻止它。

(请注意,当发生这种情况时,您的应用程序使用的所有内存和资源都将被释放 - 该过程完全被杀死。)

您的应用程序需要编写,以便随时可以将其杀死并在之后重新初始化。这是通过在onSaveInstanceState中将状态写入Bundles,在onResumeInstanceState中读取它,并将从网络下载的数据写入磁盘而不是仅将其保留在内存中来完成的。或者通过决定你不关心,用户需要从空白状态开始(对于某些应用来说这是完全可以接受的)。

希望能稍微清楚一点。