`
贫僧不吃肉
  • 浏览: 62360 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

【Android开发】Android2.2版本完全退出程序,完美解决

阅读更多



本文属贫僧不吃肉原创,欢迎转载。转载请注明出处

 

 

 

 


http://never-say-never.iteye.com/blog/976704

 



背景:假说有两个Activity, Activity1和Activity2, 1跳转到2,如果要在2退出程序,一般网上比较常见的说法是用


 

System.exit(0)




或是

android.os.Process.killProcess(android.os.Process.myPid())





但实际应用中,并不是能够真正退出,问题出在?1跳转到2时,如果Activity1你finish掉了,两么是可以退出程序的,但有时1跳转到2时,我们不能将Activity1 finish掉,那么在Activity2就不能退出程序。于是有更好的退出程序的方法,不管你有没有finish前一个activiy都可以退出程序,



或是

final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); am.restartPackage(getPackageName());





但记得在androidmanifest.xml里添加权限

<uses-permission android:name="android.permission.RESTART_PACKAGES">
</uses-permission>



以上方法在2.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);







至于为什么google要取消掉restartPackage()这么好用的方法,君可参见下文:


android的原理,为什么我们不需要手动关闭程序


不用在意剩余内存的大小,其实很多人都是把使用其他系统的习惯带过来来了。android大多应用没有退出的设计其实是有道理的,这和系统对进程的调度机制有关系。如果你知道java,就能更清楚这机制了。其实和java的垃圾回收机制类似,系统有一个规则来回收内存。进行内存调度有个阀值,只有低于这个值系统才会按一个列表来关闭用户不需要的东西。当然这个值默认设置得很小,所以你会看到内存老在很少的数值徘徊。但事实上他并不影响速度。相反加快了下次启动应用的速度。这本来就是android标榜的优势之一,如果人为去关闭进程,没有太大必要。特别是使用自动关进程的软件。(这里解决了大家非要关进程的误区!)
        到这里有人会说了,那为什么内存少的时候运行大型程序会慢呢?其实很简单,在内存剩余不多时打开大型程序,会触发系统自身的调进程调度策略,这是十分消耗系统资源的操作,特别是在一个程序频繁向系统申请内存的时候。这种情况下系统并不会关闭所有打开的进程,而是选择性关闭,频繁的调度自然会拖慢系统。所以,论坛上有个更改内存阀值的程序可以有一定改善。但改动也可能带来一些问题,取决于值的设定。
       那么,进程管理软件有无必要呢?有的。就是在运行大型程序之前,你可以手动关闭一些进程释放内存,可以显著的提高运行速度。但一些小程序,完全可交由系统自己管理。
       谈到这里,可能有的朋友会问,如果不关程序是不是会更耗电。我就说说android后台的原理,你就明白了。android的应用在被切换到后台时,它其实已经被暂停了,并不会消耗cpu资源,只保留了运行状态。所以为什么有的程序切出去重进会到主界面。但是,一个程序如果想要在后台处理些东西,如音乐播放,它就会开启一个服务。服务可在后台持续运行,所以在后台耗电的也只有带服务的应用了。这个在进程管理软件里能看到,标签是service。至于广播什么的我就不涉及了。所以没有带服务的应用在后台是完全不耗电的,没有必要关闭。这种设计本来就是一个非常好的设计,下次启动程序时,会更快,因为不需要读取界面资源,何必要关掉他们抹杀这个android的优点呢?(告诉我们如何合理使用进程管理软件)
       还有一个,为什么android一个应用看起来那么耗内存。大家知道,android上的应用是java,当然需要虚拟机,而android上的应用是带有独立虚拟机的,也就是每开一个应用就会打开一个独立的虚拟机。这样设计的原因是可以避免虚拟机崩溃导致整个系统崩溃,但代价就是需要更多内存。(跟塞班也不一样,安卓不容易死机重启)
        以上这些设计确保了android的稳定性,正常情况下最多单个程序崩溃,但整个系统不会崩溃,也永远没有内存不足的提示出现。大家可能是被windows毒害得太深了,总想保留更多的内存,但实际上这并不一定会提升速度,相反却丧失了程序启动快的这一系统特色,很没必要。大家不妨按我说的习惯来用用这个系统。
      祝大家玩机愉快,这系统开十天半个月都没问题,不是windows。

 

 

 

 

 

 

11
14
分享到:
评论
1 楼 leigous 2011-09-01  
我做了调试,如果不手动让程序主动退出,当有人恶新快速重复开启和关闭程序时就会出异常!就是为了解决这个问题所以才找完全退出的方法。

相关推荐

    Android程序设计基础

     第一部分中将首先介绍Android,内容涉及如何安装Android模拟器,如何使用IDE(Intergrated Development Environment,集成开发环境)编写第一个程序。然后,我们将介绍一些基本的概念,比如Android中的生命周期。...

    完退出Android应用程序例子

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

    Android开发资料合集-World版!

    9.11、彻底退出当前程序 212 9.12、获取应用程序的名称,包名,版本号和图标 212 9.13、调用ANDROID INSTALLER 安装和卸载程序 215 9.14、后台监控应用程序包的安装&卸载 216 9.15、显示应用详细列表 224 9.16、寻找...

    Android基础教程

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

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

    培养运用所学知识 解决实际课程的能力,培养开发Android应用程序的思想和方法。同时在实训过程中也能 不断学习新的知识。 2 Android视频播放器系统的分析与设计 2.1 系统功能描述 该系统是一个能够在Android平台下...

    Android 开发技巧

    9.11、彻底退出当前程序 212 9.12、获取应用程序的名称,包名,版本号和图标 212 9.13、调用ANDROID INSTALLER 安装和卸载程序 215 9.14、后台监控应用程序包的安装&卸载 216 9.15、显示应用详细列表 224 9.16、寻找...

    UMcall免费语音软件 For Android v2.2.1108.zip

    UMcall - 免费通话软件:  UMcall是基于互联网络免费通话和收发消息的软件, 适用于2G/3G/WiFi 网络,... 【2.2.1108版本更新】:  1、修改通话过程中按home键退出不能回到通话界面的问题  2、优化通话质量。

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

    Android支持使用Java作为编程语言来开发应用程序,而Android的Java开发方面从接 口到功能,都有层出不穷的变化。考虑到Java虚拟机的效率和资源占用,谷歌重新设计 了Android的Java,以便能提高效率和减少资源占用,...

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

    1.2.4 Android移动Web项目开发的三种解决方案:Native, Web和Hybrid优缺陷分析 4 1.2.5国内外应用现状 6 1.2.6 研究现状总结 7 1.3研究目标与内容 7 1.3.1多窗口浏览器模式的实现机制 7 1.3.2跨域交互即缓存处理方法...

    Android期末设计报告.docx

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

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

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

    Android调用海康威视SDK实现网络实时播放

    播放库版本7.0.2.2 网络库版本4.2 存在问题: 1 在网络条件不好的情况下在全屏和竖屏两个Activity之间切换可能会出错退出,原因是官方播放库中的线程没有做线程分离,在log中可以看到错误信息,这个问题在应用层...

    Android_打地鼠类型游戏_源码

    hitme是个打地鼠类型的小游戏,界面上有分数栏,9宫格图案,以及开始,关闭按键。...android platform 1.6 api level 4 虚拟机测试 platform 2.2,运行正常 stonemile真机测试,platform 2.1运行正常

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

    因插件注册机制的修改,2.1版本不能自动升级,如需重新生成手机应用,只能升级至2.2版本(请放心:手机应用旧版本的用户使用不受影响)。 2)升级步骤: 在升级至2.2时必须按以下步骤操作:卸载插件&gt;删除服务器插件包...

    1001-基于Android的医院预约挂号系统.zip

    医院预约挂号系统毕业设计源码: ...1.2 登录 ...2.首页 2.1搜索栏 可通过科室搜索,显示该科室的主治病;可通过病因搜索,显示推荐的治疗科室;...2.2 优秀医师展示 以照片形式对优秀的医师个人履历进行轮播

    android 面试2

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

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

    Android俄罗斯方块课程设计报告全文共15页,当前为第1页。Android俄罗斯方块课程设计报告全文共15页,当前为第1页。河南城建学院 Android俄罗斯方块课程设计报告全文共15页,当前为第1页。 Android俄罗斯方块课程...

    垃圾分类助手APP的设计与实现安卓期末大作业(AndroidStudio开发),垃圾分类助手app,分为前台后台,代码有注释,均

    2.2 APP后台部分 (1)管理员模块:管理员主要有管理员登录、用户信息管理功能。 (2)垃圾分类模块:管理员可以对垃圾分类信息进行增删改查。 (3)垃圾模块:管理员可以对垃圾信息进行增删改查。 (4)新闻模块:...

    自定义统计SDKTcStatInterface.zip

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

Global site tag (gtag.js) - Google Analytics