public class HelloGoodbye{
try{
System.out.println(“Hello World”);
System.exit(0);
} finally {
System.out.println(“Goodbye World”);
}}
上面这段代码会打印出什么呢?要知道答案需要了解System.exit(0)这个方法在执行过程中到底发生了哪些事情。API文档上描述System.exit方法会导致当前运行线程停止并使其它线程都终止,因此上面这段代码中的finally代码块不会被执行。
进一步探索System.exit被调用后的行为,它在虚拟机在退出前会执行两个清除任务。第一,它会执行所有通过Runtime.addShutdownHook注册的shutdown hooks.它能有效的释放JVM之外的资源。第二,执行清除任务,运行相关的finalizer方法终结对象。
如果需要在调用System.exit方法后仍然打印出“Goodbye World”,可采用如下的方法:
System.out.println(“Hello World”);
Runtime.getRuntime().addShutdownHook(
new Thread(){
public void run(){
System.out.println(“Goodbye world”);
}
}
)
System.exit(0);
在Tomcat的源代码中也有用到shutdownHook,保证了Tomcat在运行时,收到Ctrl+c命令终止JVM进程时,能够正确退出。
System.exit(0)和System.exit(1)区别:
System.exit(0)是将你的整个虚拟机里的内容都停掉了,而finish()只是退出了activity,并没有退出应 用,Application还是存在于内存中的,除非被系统回收。无论如何,内存都释放了!也就是说连JVM都关闭了,内存里根本不可能还有什么东西。关 于finished与System.out的区别,请参考:http://blog.sina.com.cn/s/blog_48e2ea3401017m3f.html
System.exit(0)是正常退出程序,而System.exit(1)或者说非0表示非正常退出程序
System.exit(status)不管status为何值都会退出程序。和return 相比有以下不同点:return是回到上一层,而System.exit(status)是回到最上层
相关推荐
在Android中,如果想退出Android程序,一般都是调用finish()、System.exit(0)android.os.Process.killProcess(android.os.Process.myPid())等方法来实现退出程序功能,可是在实际开发中,并不能达到完全退出应用程序...
对于完全退出应用,我们需要在适当的时候调用System.exit(0)来结束进程。 其次,让我们看看几种常见的退出应用的方法: 1. **利用Activity的finish()方法**:当用户按下Back键或者调用finish()时,当前Activity会...
描述中提到的"exit"通常指的是强制退出整个应用程序,这通常是通过调用`System.exit(0)`来实现的。这种方法会立即结束应用程序进程,不再执行任何Java代码,包括没有被清理的资源。与`finish()`不同,`System.exit...
在Android中,单纯调用`System.exit(0)`或`android.os.Process.killProcess(android.os.Process.myPid())`并不能确保应用程序中的所有Activity都被完全关闭,尤其是当应用程序中有多个Activity栈存在时。这种情况下...
首先获取当前进程的PID(Process ID),然后使用`killProcess()`方法杀死进程,最后使用`System.exit(0)`确保Java虚拟机正常关闭。这种方法虽然直接,但可能会影响其他正在运行的组件和服务。 ```java android.os...
总之,正确地关闭Android App并不仅仅是调用`System.exit(0)`或`Process.killProcess(Process.myPid())`那么简单。要真正杀死App,需要确保关闭所有Activity,然后再结束进程。不过,作为开发者,我们应该谨慎使用...
System.exit() 是 Java 中结束进程的方法,调用它将关闭当前的 JVM 虚拟机。例如: ```java System.exit(0); ``` 这将正常退出应用程序。System.exit() 方法可以带有参数,0 表示正常退出,非 0 表示非正常退出。...
通常,开发者会尝试使用`finish()`、`System.exit(0)`或`android.os.Process.killProcess(android.os.Process.myPid())`等方法来关闭应用,但这些方法往往只能结束当前活动的Activity,而无法彻底关闭整个应用,因为...
在Android中,如果想退出Android程序,一般都是调用finish()、System.exit(0)、android.os.Process.killProcess(android.os.Process.myPid())等方法来实现退出程序功能,可是在实际开发中,并不能达到完全退出应用...
在Android应用开发中,正确管理和安全退出多个Activity是至关重要的,因为这直接影响到用户体验和应用的性能。本文将深入探讨几种常见的方法来实现这一目标,同时确保应用在退出时资源得到妥善释放,避免内存泄漏等...
使用`System.exit(0)`可以强制退出应用程序,这会结束当前进程。但是,这种方法不推荐使用,因为它破坏了Android的生命周期管理,可能导致数据丢失和用户体验下降。 2. **杀死所有活动**: 通过遍历`...
这将遍历并结束列表中的所有Activity,然后调用`onDestroy()`释放资源,并使用`System.exit(0)`结束进程。 ```java // 假设在某个地方需要退出App ((AgentApplication) getApplication()).exitApp(); ``` 这种实现...
2. 结束应用进程:更直接的方法是调用System.exit(0)来强制结束应用进程,但这并不推荐,因为它可能影响系统的正常内存管理。如果确实需要,可以这样实现: ```java public void exitApp() { ActivityManager ...
当需要退出时,遍历该列表并调用每个Activity的`finish()`方法来关闭它们,并最终调用`System.exit(0)`来结束进程。 #### 代码详解 ##### SysApplication 类 ```java public class SysApplication extends ...
首先创建一个BroadcastReceiver,并在接收到特定广播时调用System.exit(0)方法。注册BroadcastReceiver可以在AndroidManifest.xml中进行,也可以在代码中动态注册。但需要注意的是,System.exit()并不是最佳实践,...
这时,可以在相应按钮的点击事件中调用System.exit(0)或finishAffinity()来实现。 4. **System.exit(0)**: 这个方法会立即终止当前进程,结束所有关联的Activity,但不保证执行onDestroy()。使用此方法需谨慎,...
1. **使用System.exit(0)**: 这是最直接的方式,通过调用`System.exit(0)`方法可以立即终止应用程序。然而,这种方式并不推荐,因为它不遵循Android的生命周期管理,可能导致资源未被正确释放,同时可能影响其他组件...
- 在每个Activity的`onBackPressed()`方法中,检查当前Activity是否为栈顶元素,如果是,则调用`AppManager`的退出方法,这个方法会遍历栈并逐个`finish()`所有Activity,最后调用`System.exit(0)`。 2. **监听...
13. 退出 Activity 错误的方法是 System.exit( ); 14. 当启动一个 Activity 并且新的 Activity 执行完后需要返回到启动它的 Activity 来执行的回调函数是 onActivityResult()。 15. 这个 shape 文件是画一条虚线,...
通过注册广播接收器(BroadcastReceiver),当接收到特定的系统广播(如ACTION_ACTIVITY_PAUSED)时,可以判断是否是最后一个活动被暂停,如果是,则调用System.exit(0)强制退出程序。这种方法需要更复杂的代码结构...