`
贫僧不吃肉
  • 浏览: 62974 次
  • 性别: 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开发过程中,有时我们需要实现一个“一键退出”功能,即用户点击某个按钮后能够迅速且干净地关闭整个应用程序。这不仅可以提升用户体验,还能确保程序资源...

    android2.2通讯录操作源代码

    本文将详细介绍一个基于Android 2.2版本的通讯录操作示例源代码。该代码实现了读取、添加、删除以及更新联系人的功能。对于学习Android平台上的通讯录操作来说,这是一个很好的实践案例。 #### 二、关键类与接口 1...

    VM虚拟机安装Android_2.2和设置虚拟SD卡

    Android 2.2,也称为Froyo,是一个较早的Android版本,但它仍广泛用于学习、测试和开发目的。 首先,确保你已经下载了必要的软件:VM虚拟机和Android-x86-2.2-generic.iso镜像文件。Android-x86项目提供了一个可以...

    Android程序完全退出的方法

    在Android开发过程中,有时我们需要让程序完全退出,而不是简单地关闭当前活动(Activity)。这在某些特定的应用场景下尤为重要,例如当用户点击“退出”按钮时,希望应用能够彻底关闭所有活动,释放资源,避免不必...

    完退出Android应用程序例子

    例如,针对API级别较低的版本(如Android 1.6)和较高版本(如Android 2.2和4.0),可能需要采用不同的实现策略,因为某些API或行为可能在不同版本间有所变化。 总之,实现完全退出Android应用程序通常涉及到对...

    用Android-X86和VirtualBox打造高性能Android开发环境

    本文主要介绍如何使用 Android-X86 和 VirtualBox 搭建高性能 Android 开发环境,以解决 Android 模拟器性能问题。Android 模拟器的性能问题主要由于它需要模拟 ARM 体系结构和模拟整个 GUEST 系统,而 iOS 和 WP7 ...

    VMware安装Android2.2-x86图文教程

    VMware 安装 Android 2.2-x86 图文教程 VMware 是一个功能强大的虚拟机软件,允许用户在单个物理机器上运行多个操作系统。今天我们将学习如何在 VMware 中安装 Android 2.2-x86 操作系统。 首先,需要下载 Android...

    Android代码-基于Android2.2照相机Demo可以直接放到项目里使用.rar

    这个"Android代码-基于Android2.2照相机Demo可以直接放到项目里使用.rar"压缩包提供了一个适用于Android 2.2(API级别8)的相机功能演示示例。让我们深入探讨这个Demo包含的知识点,以及如何在实际开发中应用这些...

    AndroidStudio 2.2设置文档

    Android Studio 是 Google 推出的一款强大的 Android 开发集成环境,其2.2版本提供了许多改进和优化,本文将详细介绍如何进行个性化设置,提升开发效率。 ### 1. 修改 `idea.properties` 文件 为了防止首次启动时...

    Android程序设计基础

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

    安卓Android源码——基于安卓Android2.2照相机Demo,可以直接放到项目里使用.rar

    本示例提供的是一个基于Android 2.2版本的照相机应用Demo,它为开发者提供了直接整合到自己项目的代码参考。以下是对这个Demo的详细解析: 1. **Android 2.2 (API Level 8)**:这个Demo是针对Android 2.2版本编写的...

    android2.2刷机教程.pdf

    总之,《Android 2.2 刷机教程》是一份详尽的指南,为HTC Desire用户提供了一站式的刷机解决方案,包括制作金卡、获取root权限以及升级系统等步骤。但务必谨慎操作,遵循安全原则,以免造成不必要的损失。

    Android开发C语言开发

    ### Android C语言开发知识点 #### 一、Android C语言开发之一:开发环境的配置 **1.1 交叉编译器的重要性** Android操作系统基于Linux内核,并主要针对ARM架构进行优化。因此,在非ARM架构(如x86的PC)上开发...

    Android开发 UI开发 界面资源汇总

    ### Android开发:UI开发界面资源汇总 #### 一、Activity页面切换效果 在Android开发中,页面切换效果是提升用户体验的重要组成部分。自Android 2.0版本起,开发者可以通过`overridePendingTransition()`方法来...

    android关闭应用程序

    总之,在Android开发中,关闭应用程序或管理进程并非简单的一行代码所能解决的问题,它涉及到权限管理、资源释放、异常处理等多个方面。开发者应根据具体场景选择最合适的方法,并遵循最佳实践,以确保应用的稳定性...

    android2.2刷机教程[借鉴].pdf

    Android 2.2刷机教程摘要 本文档提供了 Android 2.2 刷机教程,涵盖了从制作金卡到获得root权限的一系列步骤。该教程适合 HTC Desire 手机用户,旨在帮助用户成功升级到 Android 2.2 系统。 制作金卡 制作金卡是...

    Android中人为改变程序生命周期的研究.pdf

    Android 2.2版本中,开发者面临的一个挑战是如何人为地强制关闭应用程序。这是因为Android系统通常会管理应用的进程,以优化内存使用和用户体验。在默认情况下,即使用户退出应用程序,系统可能仍然保留其后台进程,...

Global site tag (gtag.js) - Google Analytics