`

Android2.2完全退出程序

阅读更多

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毒害得太深了,总想保留更多的内存,但实际上这并不一定会提升速度,相反却丧失了程序启动快的这一系统特色,很没必要。



 

 

分享到:
评论
1 楼 西凉皇后 2011-08-12  
谢谢,受教了

相关推荐

    Android程序设计基础

     作为基于Linux的开源手机平台,Android包括一部手机工作所需的全部软件——操作系统、用户界面和应用程序,而且不存在任何以往阻碍移动产业创新的专有权障碍。谷歌公司与开放手机联盟合作开发了Android,这个联盟...

    完退出Android应用程序例子

    例子是Android1.6的,在2.2和4.0系统都试过没有问题,如有问题请加群:213167832,找Harlan.谢谢大家。

    Android基础教程

     《Android基础教程(第3版·修订版)》是一部关于Android开发的基础教程,采用Pragmatic系列图书一贯由浅入深、循序渐进的方式讲解了Android程序设计的核心概念和技术。书中不仅结合数独游戏开发案例形象生动地...

    android视频播放器实训报告.doc

    8)退出功能: 点击退出按钮时能够正常退出程序。 2.2 系统模块设计 1、输入文件模块:在该模块中采用EditText控件来实现。 2、播放视频模块:该模块是用MediaPlayer类通过surfaceView来实现。 3、暂停播放模块:该...

    Android期末设计报告.docx

    五子棋游戏的开发不仅是一个简单的游戏编写过程,更重要的是在系统分析和设计阶段所做的工作,本文在设计过程中严格遵循软件工程学的方法,用分段的生命周期计划严格管理,并主要讲述了程序的总体设计,详细设计阶段...

    深入理解Android:卷I--详细书签版

    注意,本书分析的源码是Android2.2。  第2章通过Android源码中的一处实例深入地介绍了JNI技术。  第3章围绕init进程,介绍了如何解析init.rc以启动Zygote和属性服务(property service)的工作原理。  第4章...

    智能移动终端应用开发设计报告Android-贪吃蛇.doc

    正是因为如此,本次设计的目的在于学习Java程序设计基本技术,学习用android开 发Java程序的相关技术,熟悉游戏"贪吃蛇"的需求,熟悉项目开发的完整过程。学会怎 样进行一个项目的需求分析、概要设计、详细设计等...

    Android开发资料合集-World版!

    9.8、程序完全全屏 200 9.8.1锁屏锁键盘 200 9.9、程序的开机启动 201 9.10、动态START页面 208 9.11、彻底退出当前程序 212 9.12、获取应用程序的名称,包名,版本号和图标 212 9.13、调用ANDROID INSTALLER 安装和...

    android 面试2

    避免ANR:Android应用程序通常运行在一个单独的线程里面,称谓主线程,所以在主线程里面少做一些耗时长的程序,而是利用子线程来操作一些繁琐的事情,用Handler来把子线程处理的消息返回给主线程 22、简要解释一下...

    Android 开发技巧

    9.8、程序完全全屏 200 9.8.1锁屏锁键盘 200 9.9、程序的开机启动 201 9.10、动态START页面 208 9.11、彻底退出当前程序 212 9.12、获取应用程序的名称,包名,版本号和图标 212 9.13、调用ANDROID INSTALLER 安装和...

    Android俄罗斯方块课程设计报告.docx

    目录 一、设计目的 1 二、需求分析 2 2.1游戏功能的需求分析 2 2.2方块及旋转变换需求分析 3 2.3游戏运行需求分析 4 2.4消行和分数统计需求分析 5 三、模块分析及设计 6 3.1 总体设计思想 6 3.2功能模块 6 四、制作...

    AppCan-BBS v2.2 for Discuz!X2 和 Discuz!X2.5.rar

    2. 部分手机无法上传图片,异常退出 3. 发帖上传图片与WEB端不同步 4. iPhone上传图片翻转显示错误 5. 无法查看帖子图片 6. 回复帖子为二条 7. 设置隐藏版块后客户端未生效 8. 设置回复隐藏后自己无法查看 9....

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    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 第三章 跨域交互...

    自定义统计SDKTcStatInterface.zip

    TcStatInterface是自定义统计SDK,完全放弃第三方平台,让app拥有自主的数据统计功能,支持页面统计 自定义事件统计 APP启动退出统计,不同渠道统计。客户端SDK功能概述在使用统计服务前,开发者先要拿到本身APPID。...

    学生公寓管理系统课程设计CSDN下载频道.doc

    2.2系统主要功能设计 系统主要功能包括: (1):管理系统:实现退出系统地功能. (2):查询学生:按照学号,姓名,家庭住址,班级以及混合查询学生信息. (3)学生管理:录入学生地基本情况,学生离校处理,按学期...

Global site tag (gtag.js) - Google Analytics