如何终止Xamarin应用程序?

Nik*_*Nik 44 xamarin

如何从任何活动中终止Xamarin应用程序?

我已经尝试了两个System.Environment.Exit(0)和System.Environment.Exit(1)以及Finish()杀死所有活动.

它仍会打开一个包含默认活动名称和黑屏的空白页面.

对此有什么具体的解决方案吗?

Aka*_*min 47

如果您使用的是Xamarin.Forms,请创建一个依赖服务.

接口

public interface ICloseApplication
{
    void closeApplication();
}
Run Code Online (Sandbox Code Playgroud)

Android:使用FinishAffinity()不会重新启动您的活动.它只会关闭应用程序.

public class CloseApplication : ICloseApplication
{
    public void closeApplication()
    {
        var activity = (Activity)Forms.Context;
        activity.FinishAffinity();
    }
}
Run Code Online (Sandbox Code Playgroud)

IOS:如上所述.

public class CloseApplication : ICloseApplication
{
    public void closeApplication()
    {
        Thread.CurrentThread.Abort();
    }
}
Run Code Online (Sandbox Code Playgroud)

UWP

public class CloseApplication : ICloseApplication
{
    public void closeApplication()
    {
        Application.Current.Exit();
    }
}
Run Code Online (Sandbox Code Playgroud)

用于Xamarin表格

var closer = DependencyService.Get<ICloseApplication>();
    closer?.closeApplication();
Run Code Online (Sandbox Code Playgroud)

  • 这适用于Android,但我不得不将[assembly:Dependency(typeof(CloseApplication))]添加到CloseApplication类中以获取依赖服务 (7认同)
  • 只是一个想法,但是正如Apple告诉您不要这样做,使用此技术的应用很可能无法通过Apple应用商店评论。 (2认同)

Jas*_*son 20

对于Android,你可以做到

Android.OS.Process.KillProcess(Android.OS.Process.MyPid());
Run Code Online (Sandbox Code Playgroud)

iOS显然不为现有的App提供任何API.只有操作系统可以关闭应用程序.


vho*_*yer 11

使其跨平台工作的一种简单方法是通过以下命令:

System.Diagnostics.Process.GetCurrentProcess().CloseMainWindow();
Run Code Online (Sandbox Code Playgroud)

这个链接得到它.

编辑:使用它一段时间后,我发现.CloseMainWindow()不要杀死应用程序,只关闭它(好吧,那很明显).如果你想终止app(kill),你应该使用以下内容:

System.Diagnostics.Process.GetCurrentProcess().Kill();
Run Code Online (Sandbox Code Playgroud)

  • 对生产代码使用任何诊断方法都是一个坏主意。请改用 **System.Environment.Exit(0)**。 (3认同)
  • @Quarkly `System.Environment.Exit(0)` 不适用于 Android。 (2认同)

Dwi*_*ght 10

System.Environment.Exit(0);

为我工作。


Ido*_*doT 9

对于iOS,您可以使用以下代码:

Thread.CurrentThread.Abort();
Run Code Online (Sandbox Code Playgroud)

对于Android,正如@Jason在这里提到的:

Android.OS.Process.KillProcess(Android.OS.Process.MyPid());
Run Code Online (Sandbox Code Playgroud)

  • 好吧,它适用于我的应用程序.也许你不是从主UI线程调用它?尝试终止此lambda表达式中的应用程序:Xamarin.Forms.Device.BeginInvokeOnMainThread(()=> {Android.OS.Process.KillProcess(Android.OS.Process.MyPid());}); 如果有帮助,请告诉我. (3认同)
  • 你必须在主线程上才能关闭应用程序.试试这段代码:Acitivty.RunOnUiThread(()=> {Android.OS.Process.KillProcess(Android.OS.Process.MyPid());}); (2认同)

小智 7

在您的活动中,使用此代码

this.FinishAffinity();
Run Code Online (Sandbox Code Playgroud)


Nit*_*pra 6

我试过这段代码

protected override bool OnBackButtonPressed()
    {
        Device.BeginInvokeOnMainThread(async () =>
        {
            var result = await DisplayAlert("", "Would you like to exit from application?", "Yes", "No");
            if (result)
            {
                if (Device.OS == TargetPlatform.Android)
                {
                    Android.OS.Process.KillProcess(Android.OS.Process.MyPid());
                }
                else if (Device.OS == TargetPlatform.iOS)
                {
                   Thread.CurrentThread.Abort();
                }
            }
        });
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

在此情况下,当用户选择终止应用程序时,iOS 和 Android 应用程序将关闭。也许它对你有帮助。