当Android停止活动并再次启动时,有没有办法完全重启应用程序?

当Android停止活动并再次启动时,有没有办法完全重启应用程序?,android,xamarin.android,Android,Xamarin.android,我的应用程序有多个活动,其中一些活动具有复杂的视图模型,并且它们之间存在高度依赖性。 当Android需要它时,它会终止进程,当用户再次导航到应用程序时,会调用上次使用的活动OnCreate。重建前一个状态是复杂的,对于应用程序的类型没有任何价值。当用户导航到被终止的活动时,只要系统从头开始重新启动应用程序,就会变得更简单、更健壮 有办法吗?你可以这样做 custon MyApplication.cs: 创建一个SplashActivity.cs,它是lanch活动: [Activity(Lab

我的应用程序有多个活动,其中一些活动具有复杂的视图模型,并且它们之间存在高度依赖性。 当Android需要它时,它会终止进程,当用户再次导航到应用程序时,会调用上次使用的活动OnCreate。重建前一个状态是复杂的,对于应用程序的类型没有任何价值。当用户导航到被终止的活动时,只要系统从头开始重新启动应用程序,就会变得更简单、更健壮

有办法吗?

你可以这样做

custon MyApplication.cs:

创建一个SplashActivity.cs,它是lanch活动:

[Activity(Label = "SplashActivity")]
public class SplashActivity : Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        MyApplication.APP_STATUS = MyApplication.APP_STATUS_NORMAL; //App starts normally. Set the startup status of App to normal startup
        base.OnCreate(savedInstanceState);

        SetContentView(Resource.Layout.activity_splash);

        GoMain();

    }
    private void GoMain()
    {
        Intent intent = new Intent(this, typeof(MainActivity));
        StartActivity(intent);
        Finish();
    }
}
然后创建BaseActivity.cs,所有活动将其扩展到SplashActivity之外:

[Activity(Label = "BaseActivity")]
public abstract class BaseActivity : Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        if (MyApplication.APP_STATUS != MyApplication.APP_STATUS_NORMAL)
        { // Start the process abnormally and reinitialize the application interface directly
            MyApplication.ReInitApp();
            Finish();
            return;
        }
        else
        { // Normal startup process
            SetUpViewAndData(savedInstanceState); // child Activity initialization
        }

    }
    //Provide an interface to the subactivity setup interface. Do not initialize in onCreate
    protected abstract void SetUpViewAndData(Bundle savedInstanceState);
}

您可以在onCreat中首先确定活动是否已销毁,如果是,请重新启动lanuch活动将lanuch活动设置为single task,
[Activity(Label = "BaseActivity")]
public abstract class BaseActivity : Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        if (MyApplication.APP_STATUS != MyApplication.APP_STATUS_NORMAL)
        { // Start the process abnormally and reinitialize the application interface directly
            MyApplication.ReInitApp();
            Finish();
            return;
        }
        else
        { // Normal startup process
            SetUpViewAndData(savedInstanceState); // child Activity initialization
        }

    }
    //Provide an interface to the subactivity setup interface. Do not initialize in onCreate
    protected abstract void SetUpViewAndData(Bundle savedInstanceState);
}