Android2.2完全退出程序
Jason in iteye.com
在Android开发的时候,需要给某按钮或者某事件赋予完全退出程序的方法。
Android中有一个很常用的方法是finish();
finish()可以返回Activity堆栈中的上一个Activity,即pop(),如果当前Activity已是最底层的Activit则会退出程序。
这就引出一个问题了:
如果当Activity1 跳转到 Activity2 的时候,如果在Activity2中调用finish()其实只会回到Activity1而不是退出程序。这个时候调用finish显然就不行了。
一般网上比较常见的说法是用:
System.exit(0);
或是
android.os.Process.killProcess(android.os.Process.myPid())
经过试验过后发现并无效果。
其实以上方法在Android2.1中是可行的。
2.2以后统统作废,几经折腾,终于觅得终极解决方案:
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain); System.exit(0);
这个方法很猛,可以直接回到android主界面,也算是可以解决一时只需了。
不过话说回来,这种退出的方式其实并不推荐。
Android大多应用没有退出的设计其实是有道理的,这和系统对进程的调度机制有关系。如果你知道java,就能更清楚这机制了。其实和java的垃圾回收机制类似,系统有一个规则来回收内存。进行内存调度有个阀值,只有低于这个值系统才会按一个列表来关闭用户不需要的东西。当然这个值默认设置得很小,所以你会看到内存老在很少的数值徘徊。但事实上他并不影响速度。相反加快了下次启动应用的速度。这本来就是android标榜的优势之一,如果人为去关闭进程,没有太大必要。特别是使用自动关进程的软件。(这里解决了大家非要关进程的误区!)
到这里有人会说了,那为什么内存少的时候运行大型程序会慢呢?其实很简单,在内存剩余不多时打开大型程序,会触发系统自身的调进程调度策略,这是十分消耗系统资源的操作,特别是在一个程序频繁向系统申请内存的时候。这种情况下系统并不会关闭所有打开的进程,而是选择性关闭,频繁的调度自然会拖慢系统。
那么,进程管理软件有无必要呢?有的。就是在运行大型程序之前,你可以手动关闭一些进程释放内存,可以显著的提高运行速度。但一些小程序,完全可交由系统自己管理。
谈到这里,可能有的朋友会问,如果不关程序是不是会更耗电。我就说说android后台的原理,你就明白了。android的应用在被切换到后台时,它其实已经被暂停了,并不会消耗cpu资源,只保留了运行状态。所以为什么有的程序切出去重进会到主界面。但是,一个程序如果想要在后台处理些东西,如音乐播放,它就会开启一个服务。服务可在后台持续运行,所以在后台耗电的也只有带服务的应用了。这个在进程管理软件里能看到,标签是service。至于广播什么的我就不涉及了。所以没有带服务的应用在后台是完全不耗电的,没有必要关闭。这种设计本来就是一个非常好的设计,下次启动程序时,会更快,因为不需要读取界面资源,何必要关掉他们抹杀这个android的优点呢?(告诉我们如何合理使用进程管理软件)
还有一个,为什么android一个应用看起来那么耗内存。大家知道,android上的应用是java,当然需要虚拟机,而android上的应用是带有独立虚拟机的,也就是每开一个应用就会打开一个独立的虚拟机。这样设计的原因是可以避免虚拟机崩溃导致整个系统崩溃,但代价就是需要更多内存。(跟塞班也不一样,安卓不容易死机重启)
以上这些设计确保了android的稳定性,正常情况下最多单个程序崩溃,但整个系统不会崩溃,也永远没有内存不足的提示出现。大家可能是被windows毒害得太深了,总想保留更多的内存,但实际上这并不一定会提升速度,相反却丧失了程序启动快的这一系统特色,很没必要。
分享到:
相关推荐
作为基于Linux的开源手机平台,Android包括一部手机工作所需的全部软件——操作系统、用户界面和应用程序,而且不存在任何以往阻碍移动产业创新的专有权障碍。谷歌公司与开放手机联盟合作开发了Android,这个联盟...
例子是Android1.6的,在2.2和4.0系统都试过没有问题,如有问题请加群:213167832,找Harlan.谢谢大家。
《Android基础教程(第3版·修订版)》是一部关于Android开发的基础教程,采用Pragmatic系列图书一贯由浅入深、循序渐进的方式讲解了Android程序设计的核心概念和技术。书中不仅结合数独游戏开发案例形象生动地...
8)退出功能: 点击退出按钮时能够正常退出程序。 2.2 系统模块设计 1、输入文件模块:在该模块中采用EditText控件来实现。 2、播放视频模块:该模块是用MediaPlayer类通过surfaceView来实现。 3、暂停播放模块:该...
五子棋游戏的开发不仅是一个简单的游戏编写过程,更重要的是在系统分析和设计阶段所做的工作,本文在设计过程中严格遵循软件工程学的方法,用分段的生命周期计划严格管理,并主要讲述了程序的总体设计,详细设计阶段...
注意,本书分析的源码是Android2.2。 第2章通过Android源码中的一处实例深入地介绍了JNI技术。 第3章围绕init进程,介绍了如何解析init.rc以启动Zygote和属性服务(property service)的工作原理。 第4章...
正是因为如此,本次设计的目的在于学习Java程序设计基本技术,学习用android开 发Java程序的相关技术,熟悉游戏"贪吃蛇"的需求,熟悉项目开发的完整过程。学会怎 样进行一个项目的需求分析、概要设计、详细设计等...
9.8、程序完全全屏 200 9.8.1锁屏锁键盘 200 9.9、程序的开机启动 201 9.10、动态START页面 208 9.11、彻底退出当前程序 212 9.12、获取应用程序的名称,包名,版本号和图标 212 9.13、调用ANDROID INSTALLER 安装和...
避免ANR:Android应用程序通常运行在一个单独的线程里面,称谓主线程,所以在主线程里面少做一些耗时长的程序,而是利用子线程来操作一些繁琐的事情,用Handler来把子线程处理的消息返回给主线程 22、简要解释一下...
9.8、程序完全全屏 200 9.8.1锁屏锁键盘 200 9.9、程序的开机启动 201 9.10、动态START页面 208 9.11、彻底退出当前程序 212 9.12、获取应用程序的名称,包名,版本号和图标 212 9.13、调用ANDROID INSTALLER 安装和...
目录 一、设计目的 1 二、需求分析 2 2.1游戏功能的需求分析 2 2.2方块及旋转变换需求分析 3 2.3游戏运行需求分析 4 2.4消行和分数统计需求分析 5 三、模块分析及设计 6 3.1 总体设计思想 6 3.2功能模块 6 四、制作...
2. 部分手机无法上传图片,异常退出 3. 发帖上传图片与WEB端不同步 4. iPhone上传图片翻转显示错误 5. 无法查看帖子图片 6. 回复帖子为二条 7. 设置隐藏版块后客户端未生效 8. 设置回复隐藏后自己无法查看 9....
2.2 多窗口浏览器模式的实现机制 12 2.2.1安卓移动端多窗口浏览器框架 12 2.1.2多窗口浏览器模式实现机制 13 2.3 模块实现 13 2.3.1类浏览器模式 13 2.3.2多窗口类浏览器模式 14 2.4 本章小结 15 第三章 跨域交互...
TcStatInterface是自定义统计SDK,完全放弃第三方平台,让app拥有自主的数据统计功能,支持页面统计 自定义事件统计 APP启动退出统计,不同渠道统计。客户端SDK功能概述在使用统计服务前,开发者先要拿到本身APPID。...
2.2系统主要功能设计 系统主要功能包括: (1):管理系统:实现退出系统地功能. (2):查询学生:按照学号,姓名,家庭住址,班级以及混合查询学生信息. (3)学生管理:录入学生地基本情况,学生离校处理,按学期...