android 完全退出程式

來源:互聯網
上載者:User

轉自:http://chenzoudgh.blog.163.com/blog/static/149868996201011143483180/

 

 

有幾個activity,有一需求是在一個activityA點擊back鍵退出系統而不是跳到之前的activity    首先想到的是清空activityA的堆棧,使用intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 但是該activityA不是已經存在於堆棧底端的,所以清除的只是堆棧中該activityA上面的activity,但後退後還是會返回堆棧中該activityA下面的activity。    然後想到的是截獲back按鍵的事件,使用System.exit(0)和android.os.Process.killProcess(android.os.Process.myPid())來退出程式,還是不行,當前的activityA是被幹掉了,但是還是會被ActivityManager接管返回到前一個activity。而且如果之前activity需要一些傳過來的參數的話會導致程式連續拋異常。    最後終於找到一個可行的方法:使用ActivityManager徹底退出程式ActivityManager manager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);   manager.restartPackage(getPackageName()); 需要聲明許可權<uses-permission android:name="android.permission.RESTART_PACKAGES"/>這種方法會終止一切和這個程式包關聯的,所有共用同一uid的process被kill,所有的activity會被removed所有建立的服務會停止,還會發一個廣播  
Intent.ACTION_PACKAGE_RESTARTED導致所有註冊alarms 被stopped, notifications 被removed。   這幾天刷了2.2的rom發現restartPackage方法無效,網上搜了下答案: 在Android 2.2中新增了一個API可以協助我們殺死後台進程,不過Android123再次強調其調用的API Level最小為8,killBackgroundProcesses是android.app.ActivityManager類的方法,使用時必須在androidmanifest.xml檔案中加入KILL_BACKGROUND_PROCESSES這個許可權。雖然本類還提供了restartPackage (String packageName) 方法調用的API Level為3,但是SDK中已經標記為deprecated,其實他們的原理都是一樣的,只不過過去Google的命名方式確實不是很合理,restartPackage的作用很難讓我們聯想到是結束進程。

 

 

   該方法的原型 public void killBackgroundProcesses (String packageName)  僅有一個參數為package Name,使用方法比較簡

 

單。

 

 

   ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 

 

   am.killBackgroundProcesses("cn.com.android123.cwj");   // API Level至少為8才能使用

 

所以要用此方法最好加個判斷如果是2.2之前的rom就用restartPackage之後的就用killBackgroundProcesses

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.