如何终止Xamarin应用程序?

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

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

仍然会打开一个空白页面,其中包含默认活动名称和黑屏。

有什么针对性的解决方案吗?

Nik asked 2020-08-06T01:07:33Z

12个解决方案

45 votes

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

接口

public interface ICloseApplication

{

void closeApplication();

}

Android:使用FinishAffinity()无法重启您的活动。 它将仅关闭应用程序。

public class CloseApplication : ICloseApplication

{

public void closeApplication()

{

var activity = (Activity)Forms.Context;

activity.FinishAffinity();

}

}

iOS:如上所述。

public class CloseApplication : ICloseApplication

{

public void closeApplication()

{

Thread.CurrentThread.Abort();

}

}

超人

public class CloseApplication : ICloseApplication

{

public void closeApplication()

{

Application.Current.Exit();

}

}

Xamarin形式的用法

var closer = DependencyService.Get();

closer?.closeApplication();

Akash Amin answered 2020-08-06T01:08:00Z

19 votes

对于Android,您可以

Android.OS.Process.KillProcess(Android.OS.Process.MyPid());

iOS明确不为现有应用提供任何API。 只有操作系统可以关闭应用程序。

Jason answered 2020-08-06T01:08:24Z

10 votes

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

System.Diagnostics.Process.GetCurrentProcess().CloseMainWindow();

从此链接得到它。

编辑:使用了一段时间后,我发现2998733080694894883328不会杀死该应用程序,只会关闭它(很明显)。 如果要终止应用程序(杀死),则应使用以下命令:

System.Diagnostics.Process.GetCurrentProcess().Kill();

vhoyer answered 2020-08-06T01:08:53Z

9 votes

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

Thread.CurrentThread.Abort();

对于Android,如@Jason在此处提及:

Android.OS.Process.KillProcess(Android.OS.Process.MyPid());

IdoT answered 2020-08-06T01:09:18Z

4 votes

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

this.FinishAffinity();

Lee Yeong Guang answered 2020-08-06T01:09:37Z

2 votes

System.Diagnostics.Process.GetCurrentProcess().Kill();

M. Hamza Rajput answered 2020-08-06T01:09:53Z

1 votes

上述答案的简单的多合一组合,而不是接口/依赖关系:

protected override bool OnBackButtonPressed()

{

Device.BeginInvokeOnMainThread(async () =>

{

var result = await this.DisplayAlert("Alert!", "want to exit?", "Yes", "No");

if (result)

{

#if __ANDROID__

var activity = (Android.App.Activity)Forms.Context;

activity.FinishAffinity();

#endif

#if __IOS__

Thread.CurrentThread.Abort();

#endif

}

});

return true;

}

AhHatem answered 2020-08-06T01:10:13Z

1 votes

我尝试了这段代码

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;

}

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

Nitika Chopra answered 2020-08-06T01:10:37Z

1 votes

System.Environment.Exit(0); 为我工作

Dwight answered 2020-08-06T01:10:57Z

0 votes

正如您最初的问题提到活动一样,您的问题专门针对Android,因此您应该牢记这一点来更新问题标题,以避免有人在这里寻找跨平台的解决方案。

对于iOS和Android(例如Xamarin Forms),您可以抛出一个异常,该异常是“繁重的工作”方法,可以完成此工作:

throw new Exception();

由于这不是最佳的用户体验,因此您可能只想在iOS上使用它,因为在Android上,您可能会看到系统弹出窗口,告诉您应用程序已崩溃。 但是,与其他iOS方法(例如通过选择器调用exit(0)或调用私有iOS方法(例如“ terminateWithSuccess”))不同,它不应仅根据您的操作方式使应用商店验证失败。 他们可能仍然无法使您失败,因为您的应用程序试图自行终止。

您可能想为Android实施一些不同的事情,在这种情况下,Jason的回答就足够了。

Android.OS.Process.KillProcess(Android.OS.Process.MyPid());

无论哪种方式,您都应该真正质疑为什么需要提供此选项。 与桌面应用程序不同,桌面应用程序需要关闭应用程序,因为应用程序驻留在窗口中,而这些应用程序在设计上允许进行多任务处理,而不是面向任务,因此,移动平台的主要目的是让用户一次专注于一项任务。 用户完成任务后,应决定通过单击主屏幕按钮,后退按钮或更改应用程序(任务)按钮来退出此任务。 这确实适用于所有平台。

Daniel Maclean answered 2020-08-06T01:11:37Z

0 votes

当我尝试从活动B关闭Xamarin Android应用程序并同时在其下打开活动A时,上述方法都没有帮助我完全关闭Xamarin Android应用程序。

一个聪明的家伙在这里留下了诡计

在活动B中首先致电private void CloseBtn_Click(object sender, EventArgs e){

FinishAffinity();

JavaSystem.Exit(0);

}(关闭两个活动,但是,该应用程序仍在后台运行)

然后调用private void CloseBtn_Click(object sender, EventArgs e){

FinishAffinity();

JavaSystem.Exit(0);

}杀死后台应用程序(我认为可以将其替换为Android.OS.Process.KillProcess(Android.OS.Process.MyPid());或System.Diagnostics.Process.GetCurrentProcess().Kill();)

我关闭应用程序的方法:

private void CloseBtn_Click(object sender, EventArgs e){

FinishAffinity();

JavaSystem.Exit(0);

}

user3480038 answered 2020-08-06T01:12:15Z

0 votes

这些都不适用于Android8。它们都将应用程序保留在后台。我可以通过按关闭所有按钮来证明这一点,并且该应用程序仍然存在。

为了进行测试,我使用了一个全新的简单Android应用程序,并尝试了所有答案。

GaryP answered 2020-08-06T01:12:39Z

android 中止应用程序,如何终止Xamarin应用程序?相关推荐

  1. 关于xxl-job终止任务但程序没有停止的问题

    1.问题的现象    在使用XXL-JOB的时候,使用XxlJob注解创建了一个任务,计算任务的运行时间需要十多分钟,中途用户修改了计算任务的配置,需要重新进行一次计算,使用XXL-JOB的终止任务, ...

  2. 使用Dotfuscator保护你的Xamarin应用程序

    老实说,发布一个库.桌面应用程序或移动应用程序可能有点吓人.一旦你的软件可以免费提供给世界,你就失去了如何使用它的某种程度的控制权.特别是,开发人员经常担心逆向工程的威胁. 在许多平台和语言中,代码混 ...

  3. 《Android移动应用基础教程》(Android Studio)(第二版)黑马程序员 课后习题答案

    <Android移动应用基础教程>(Android Studio)(第二版)黑马程序员 课后习题答案 目录 第1章 Android基础入门 第2章 Android常见界面布局 第3章 An ...

  4. Android:销毁所有的Activity退出应用程序几种方式

    Android:销毁所有的Activity退出应用程序几种方式 author:DRC工作室 我们都知道,Activity是存放在栈中.在默认的情况下(standard)Activity在栈中是以先进后 ...

  5. android屏幕分辨率详解 ldpi mdpi hdpi 程序UI自适应 《官方翻译》

    2019独角兽企业重金招聘Python工程师标准>>> 看世界杯的空闲 时间,翻译一下 官方文档.分辨率 问题是大家都很关心的(720×480会不会悲剧),而关于这个问题,andro ...

  6. 所有java程序都有线程_若所有的用户线程都终止了,Java程序就会结束。( )_学小易找答案...

    [单选题]关于链表结构,陈述错误的是 . [单选题]下列关于构造方法的特点的描述中,错误的是 . [判断题]在构造方法中如调用 super() 语句,则必须使其成为构造方法中的第一条语句. [单选题] ...

  7. Android字体占有内存,android随意创建字体对象引发的应用程序运行时占用内存过大...

    android随意创建字体对象引发的应用程序运行时占用内存过大 在实际开发android项目过程中,由于是初次设置android系统没有的字体,所以用到了一个外部文件FounderFineRoundS ...

  8. 从零开始学Xamarin.Forms(四) Android 准备步骤(添加第三方Xamarin.Forms.Labs库)

    从零开始学Xamarin.Forms(四) Android 准备步骤(添加第三方Xamarin.Forms.Labs库) 原文:从零开始学Xamarin.Forms(四) Android 准备步骤(添 ...

  9. Android 关于长按back键退出应用程序的实现

    Android 关于长按back键退出应用程序的实现 最近在做一个Android上的应用,碰到一个问题就是如何实现长按back键退出应用程序.在网上查找了很多资料,发现几乎没有这样的实现,大部分在处理 ...

最新文章

  1. 【怎样写代码】工厂三兄弟之抽象工厂模式(六):扩展案例II
  2. MPB:山大倪金凤组-白蚁肠道木质纤维素降解细菌的分离与培养
  3. 乐享计算机会计学院,EMBA
  4. Docker windows 安装MySql和Tomcat
  5. 怎样呵护友谊_怎样呵护友谊(作文)
  6. CentOS学习笔记(一):中文语言包及输入法的安装使用
  7. MySQL探秘(二):SQL语句执行过程详解
  8. 2017-2018 Northwestern European Regional Contest (NWERC 2017)
  9. 衡量文章词汇复杂度Type Token Ratio (TTR)
  10. caas k8s主控节点如何查询_k8s中部署prometheus监控告警系统prometheus系列文章第一篇...
  11. 6.Swoole WebSocket
  12. 解决@media screen (自适应)IE浏览器不兼容问题
  13. matlab在xrd中的应用,XRD物相分析(Jade软件的应用).pdf
  14. Java 运行环境安装(JRE JDK 区别)
  15. python蒙特卡洛模拟return_python蒙特卡洛脚本模拟—挑战者号爆炸概率
  16. 你怎么保存微博中喜欢的视频
  17. nexus 启动报错 The nexus service was launched, but failed to start
  18. 05流量管理原理-3金丝雀TCP流量整形比例分配
  19. vasp 模拟退火_【转】vasp的分子动力学模拟 - 第一原理 - 小木虫 - 学术 科研 互动社区...
  20. 如何将视频文件中的音频提取出来?

热门文章

  1. Mobius反演总结
  2. PIL Image创建空白图片的bug
  3. 数据有效性高级应用——制作二级下拉菜单
  4. web前端——div和span标签
  5. Java XML教程
  6. 2018 “百度之星”程序设计大赛 - 初赛(A)
  7. 商店管理系统的设计与实现
  8. 工程流体力学笔记暂记10(动量矩方程)
  9. mooc《工程流体力学》笔记
  10. 八拜之交是指哪八拜?