本人博客原文 在Android中,即使我们退出了所有的Activity。但是其应用程序并不能结束,系统还有继续保持其一段时间。 关于此的更多内容请参照《 Task和Activity相关的一些属性 》中,关于 android:alwaysRetainTaskState等相关的介绍 然而我们可以在 根Acitivity的onDestroy() 方法中,做一些操作来让该应用程序彻底退出,即进程结束。 我现在测试并有效的方法有 System.exit(0) android.os.Process.killProcess(android.os.Process.myPid()) 这两种方法。网上有人反应这两种方法无效,我想他们可能是没在 根Acitivity 的onDestroy() 使用他们。 上面这两种方法在非根Activity中使用时,的确无效
如果你还不知道什么样的 Acitivity 称之为为 根Acitivity 的话,请参阅《 Activity和Task的基本模型 》和《 Task和Activity相关的一些属性 示例程序1: protected voidonDestroy() { super.onDestroy(); System.exit(0); //或android.os.Process.killProcess(android.os.Process.myPid()); Log.d(tag,"onDestroy"); } 示例程序2 (自己的Application中)

private final static HandlerThread business0HandlerThread = new HandlerThread ( "Business0Handler" ); private static Handler business0Handler ; public static Handler getBusiness0Handler () { if ( business0Handler == null ) { synchronized ( business0HandlerThread ){ if ( business0Handler == null ) { business0HandlerThread . start (); business0Handler = new Handler ( business0HandlerThread . getLooper ()); } } } return business0Handler ; } /* * 在这里判断是否还有工作在进行 */ public boolean isAnyWorkGoing () { return false ; } ActivityManager am ; public boolean shouldKill () { if ( isAnyWorkGoing ()) { return true ; } else { if ( am == null ) { for ( int i = 0 ; i < 5 ; i ++) { am = ( ActivityManager ) getSystemService ( Context . ACTIVITY_SERVICE ); if ( am != null ) break ; try { Thread . sleep ( 50 ); } catch ( InterruptedException e ) { e . printStackTrace (); } } } List < RunningTaskInfo > runningTasks = am . getRunningTasks ( 100 ); for ( RunningTaskInfo task : runningTasks ) { ComponentName baseActivity = task . baseActivity ; if ( baseActivity != null && task . baseActivity . getClassName (). startsWith ( "cn.edu.edut.robin" )) { if ( task . numRunning > 0 ) { Log . d ( TAG , task . baseActivity . getClassName () + task . numRunning ); flgKillLoop = false ; return true ; } } } } return false ; } boolean flgKillLoop = false ; public void signKill () { flgKillLoop = true ; getBusiness0Handler (). post ( killRunable ); } Runnable killRunable = new Runnable () { @Override public void run () { if ( shouldKill ()) { android . os . Process . killProcess ( android . os . Process . myPid ()); } else if ( flgKillLoop ) { getBusiness0Handler (). postDelayed ( killRunable , 60 * 1000 ); } } };

结束

更多相关文章

  1. Android自定义View的实现方法,带你一步步深入了解View(三) 。
  2. 【移动开发】Android中图片过大造成内存溢出,OOM(OutOfMemory)异常
  3. Android 超简单的录制屏幕视频及生成GIF文件的方法
  4. Android仿淘宝首页UI(附代源代码及示例图片)
  5. Android处理图片OOM的若干方法小结
  6. exp:Android Studio调试系统源码的方法 (干货分享)
  7. android activity 基类 通用方法
  8. Android 反射获取私有方法,成员变量
  9. Android 杀掉自己进程的方法

随机推荐

  1. 手机侦探 奇迹 (android)
  2. Firefly-RK3288 Android 5.1 HDMI输出4K
  3. 【Android自动化 】那些常见的缩写名词
  4. 更改android 默认语言
  5. Android App 应用前后台的切换
  6. 谷歌公布各版本Android份额 2.3占半壁江
  7. Android屏蔽Home键,适配所有版本
  8. android 分享------使用友盟社会化组件
  9. Android Netd
  10. Android之使用Android-query框架进行开发