【Android开发】完美解决Android完全退出程序
情况:理论有两个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,自然必须vm虚拟机,而android上的运用是含有单独vm虚拟机的,也就是每开一个运用便会开启一个单独的vm虚拟机。那样设计方案的缘故是能够防止vm虚拟机奔溃造成全部崩溃,但成本便是必须大量运行内存。(跟赛班也不一样,安卓系统不易卡死重新启动)
之上这种设计方案保证了android的可靠性,一切正常状况下数最多单独程序流程奔溃,但全部系统软件不容易奔溃,也始终沒有内存不够的提醒出現。大伙儿可能是被windows危害得太深,老想保存大量的运行内存,但事实上这并不一定会提高速率,反过来却缺失了程序流程运行快的这一系统软件特点,很没必要。大伙儿何不按我讲的习惯性来用这一系统软件。
祝大家玩机开心,这系统软件开十天一个半月都没什么问题,并不是windows。