Android結(jié)束進(jìn)程的方法詳解
本文實(shí)例講述了Android結(jié)束進(jìn)程的方法。分享給大家供大家參考,具體如下:
最近在做一個(gè)類似與任務(wù)管理器的東西,里面有個(gè)功能,可以通過這個(gè)管理器結(jié)束掉其他的進(jìn)程。
在Android平臺(tái)下,結(jié)束進(jìn)程的方法還是比較多的。首先指明,此處的“結(jié)束進(jìn)程”,包含了結(jié)束自身進(jìn)程和結(jié)束其他進(jìn)程兩個(gè)方面。通過查閱SDK文檔和網(wǎng)上的一些資料,自己找到一些結(jié)束進(jìn)程的方法。在這里做一些歸納和總結(jié),文章的部分信息有可能來自網(wǎng)上已有的文章和帖子,由于過了比較長(zhǎng)時(shí)間,所以若發(fā)現(xiàn)本文與其他文章雷同,請(qǐng)諒解。
一、結(jié)束一個(gè)活動(dòng)Activity
要主動(dòng)的結(jié)束一個(gè)活動(dòng)Activity,(先強(qiáng)調(diào)一下,是結(jié)束一個(gè)活動(dòng),而不是進(jìn)程)眾所周知,肯定是finish方法啦,這個(gè)就毋庸置疑了,而且這個(gè)方法最后會(huì)調(diào)用Activity的生命周期函數(shù)onDestroy方法,結(jié)束當(dāng)前的Activity,從任務(wù)棧中彈出當(dāng)前的Activity,激活下一個(gè)Activity。當(dāng)然其他的finish系列方法,我們不在這里做詳細(xì)討論,有興趣的同學(xué)可以自己查閱一下SDK 的文檔。
二、強(qiáng)制結(jié)束當(dāng)前的進(jìn)程
強(qiáng)行結(jié)束當(dāng)前進(jìn)程有兩個(gè)方法。(呵呵,這里就是結(jié)束進(jìn)程了)
1、killProcess(int pid) 例子:
android.os.Process.killProcess(android.os.Process.myPid());
對(duì)于這個(gè)方法,需要詳細(xì)解釋一下。在SDK的文檔中,解釋如下:
Kill the process with the given PID. Note that, though this API allows us to request to kill any process based on its PID, the kernel will still impose standard restrictions on which PIDs you are actually able to kill. Typically this means only the process running the caller's packages/application and any additional processes created by that app; packages sharing a common UID will also be able to kill each other's processes.
英語不好,不能準(zhǔn)確翻譯,所以希望大家自己理解,免得對(duì)大家造成誤解。我個(gè)人對(duì)這句話的解釋就是,這個(gè)方法使用是有條件的:
a、將被殺掉的進(jìn)程 和 當(dāng)前進(jìn)程 處于同一個(gè)包或者應(yīng)用程序中;
b、將被殺掉的進(jìn)程 是由當(dāng)前應(yīng)用程序所創(chuàng)建的附加進(jìn)程;
c、將被殺掉的進(jìn)程 和 當(dāng)前進(jìn)程 共享了普通用戶的UID。(這里的普通用戶,是相對(duì)于Root權(quán)限的用戶來說的)
2、System.exit(int code) 例子:
System.exit(0);
該方法只能用于結(jié)束當(dāng)前進(jìn)程自身,個(gè)人覺得在程序遇到異常,無法正常執(zhí)行時(shí),可以通過這個(gè)方法強(qiáng)制退出。
需要注意的是,這兩個(gè)方法,會(huì)導(dǎo)致進(jìn)程非正常退出,就是說,進(jìn)程退出時(shí)不會(huì)去執(zhí)行onPause、onStop和onDestroy方法,那么進(jìn)程很有可能錯(cuò)過了保存數(shù)據(jù)的機(jī)會(huì)。因此,這兩個(gè)方法最好使用在出現(xiàn)異常的時(shí)候!
三、結(jié)束另一個(gè)進(jìn)程
要通過一個(gè)進(jìn)程去結(jié)束另一個(gè)進(jìn)程。在之前的SDK版本中,一直使用方法restartPackage(packageName)方法,但是在Android的開發(fā)文檔中介紹說,這個(gè)函數(shù)會(huì)導(dǎo)致一些問題( the previous behavior here is no longer available to applications because it allows them to break other applications by removing their alarms, stopping their services, etc.),所以建議大家使用一個(gè)新的方法:
void killBackgroundProcesses(String packageName)
由于這個(gè)方法沒有返回值,所以我們也不知道我們的目標(biāo)進(jìn)程是否真的退出了。但是,我目前只發(fā)現(xiàn)了這個(gè)可以結(jié)束另一個(gè)進(jìn)程的方法。
四、退出到主屏幕(記得是對(duì)當(dāng)前進(jìn)程的處理)
這個(gè)方法,也是退出當(dāng)前進(jìn)程的一個(gè)方法。如果我們?cè)谶M(jìn)程中創(chuàng)建了很多的Activity,但是又不想關(guān)閉時(shí)去退出不在任務(wù)棧頂?shù)腁ctivity,那么就可以直接使用這個(gè)方法了。這個(gè)方法是通過查閱網(wǎng)上資料看到的。具體可參考本站文章《Android 按后退鍵退出Android程序的實(shí)現(xiàn)方法》
功能:當(dāng)按下返回鍵時(shí),就返回到主屏幕,并帶有參數(shù)FLAG_ACTIVITY_CLEAR_TOP,會(huì)清理掉當(dāng)前的活動(dòng)。
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { // 按下的如果是BACK,同時(shí)沒有重復(fù) Intent home = new Intent(Intent.ACTION_MAIN); home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); home.addCategory(Intent.CATEGORY_HOME); startActivity(home); } return super.onKeyDown(keyCode, event); }
此方法確實(shí)結(jié)束了當(dāng)前進(jìn)程,但是通過Android平臺(tái)的App Manager工具去查看的話,使用2.3.3的模擬器,會(huì)發(fā)現(xiàn)剛剛被結(jié)束的進(jìn)程會(huì)以Cached background Process的形式存在,并且模擬器給出了解釋,說是為了下一次更快捷的啟動(dòng)這個(gè)進(jìn)程。
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android調(diào)試技巧與常見問題解決方法匯總》、《Android開發(fā)入門與進(jìn)階教程》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android應(yīng)用開發(fā)SharedPreferences存儲(chǔ)數(shù)據(jù)的使用方法
- Android 動(dòng)畫之TranslateAnimation應(yīng)用詳解
- Android 動(dòng)畫之ScaleAnimation應(yīng)用詳解
- Android開發(fā)中多進(jìn)程共享數(shù)據(jù)簡(jiǎn)析
- Android 多進(jìn)程資料總結(jié)
- Android 進(jìn)程間通信實(shí)現(xiàn)原理分析
- Android應(yīng)用程序四大組件之使用AIDL如何實(shí)現(xiàn)跨進(jìn)程調(diào)用Service
- Android編程防止進(jìn)程被第三方軟件殺死的方法
- 解析后臺(tái)進(jìn)程對(duì)Android性能影響的詳解
- Android中應(yīng)用多進(jìn)程的整理總結(jié)
相關(guān)文章
Android開發(fā)實(shí)現(xiàn)抽屜菜單
這篇文章主要為大家詳細(xì)介紹了Android開發(fā)實(shí)現(xiàn)抽屜菜單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11Android開發(fā)教程之獲取系統(tǒng)輸入法高度的正確姿勢(shì)
這篇文章主要給大家介紹了關(guān)于Android開發(fā)教程之獲取系統(tǒng)輸入法高度的正確姿勢(shì),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Android具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10理解Android的手勢(shì)識(shí)別提高APP的用戶體驗(yàn)
對(duì)于觸摸屏,其原生的消息無非按下、抬起、移動(dòng)這幾種,我們只需要簡(jiǎn)單重載onTouch或者設(shè)置觸摸偵聽器setOnTouchListener即可進(jìn)行處理2013-06-06Android倒計(jì)時(shí)的開始與停止 剩余時(shí)分秒的展示
這篇文章主要為大家詳細(xì)介紹了Android倒計(jì)時(shí)的開始與停止,剩余時(shí)分秒的展示,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09Android自定義控件實(shí)現(xiàn)下拉刷新效果
這篇文章主要為大家詳細(xì)介紹了Android自定義控件實(shí)現(xiàn)下拉刷新效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Android中系統(tǒng)自帶鎖WalkLock與KeyguardLock用法實(shí)例詳解
這篇文章主要介紹了Android中系統(tǒng)自帶鎖WalkLock與KeyguardLock用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了WalkLock與KeyguardLock的功能、作用、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-01-01實(shí)現(xiàn)一個(gè)Android鎖屏App功能的難點(diǎn)總結(jié)
這篇文章主要介紹了實(shí)現(xiàn)一個(gè)Android鎖屏App功能的難點(diǎn)總結(jié),可以有效的解決鎖屏開發(fā)的問題,有需要的可以參考一下。2016-11-11