㈠ android system進程是什麼進程
Android上殺掉進程的方式有兩種,分別是System.exit(0)和Process.killProcess(Process.myPid()),那麼這兩種方式有何區別呢?
相同點
APP進程都會被直接殺掉
我們通過adb shell ps可以查看當前手機所有運行的進程狀態,
在執行完這兩種方式之後,APP進程都會消失。
生命周期都不會被調用
onPause()、onStop()和onDestory(),也包括onSaveInstanceState,這些生命周期方法都不會被調用。
不同點
影響范圍不同
System.exit(0)只會影響當前的程序;
Process.killProcess(Process.myPid())會殺掉所有PID一樣的進程,比如那些擁有相同UID的應用,統統都會被殺掉。
方式不一樣
System.exit(0)是停止程序的虛擬機;
Process.killProcess(Process.myPid()) 是通過PID去殺死進程。
補充
System.exit(0)和System.exit(1)
看官方的方法注釋,如下:
Use 0 to signal success to the calling process and 1 to signal failure.11
0:代表成功的信號;
1:代表失敗的信號,常用於捕獲到異常執行。
使用方式
從上面可以看出,這兩種方式都比較暴力,不推薦使用,尤其是現在的手機配置都很好的情況下。而且進程都被殺掉了,相應的Service也會被幹掉,如果存在推送的話,會出現各種莫名的問題。
真要用的話,也得注意:如果程序有多個Activity,最好在主Activity中的OnBackPressed()中使用,如果在其它Activity中使用的話,APP會直接退出,退出後會重啟應用,這樣對於用戶體驗不是很好。
㈡ Android 是怎樣凍結進程的
凍結進程是內核把進程列表中所有的進程的狀態都設置為停止,並且保存下所有進程的上下文。當這些進程被解凍的時候,他們是不知道自己被凍結過的,只是簡單的繼續執行。如何讓linux進入休眠呢?用戶可以通過讀寫sys文件/sys /power/state 是實現控制系統進入休眠。比如:
# echo standby > /sys/power/state命令系統進入休眠。也可以使用
# cat /sys/power/state來得到內核支持哪幾種休眠方式。
Linux Suspend 的流程。相關的文件的路徑:
linux_soruce/kernel/power/main.c
linux_source/kernel/arch/xxx/mach-xxx/pm.c
linux_source/driver/base/power/main.c
㈢ 如何在Android中取得當前進程名
方法一:調用ActivityManager
代碼如下
java">ActivityManageram=(ActivityManager)this
.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo>list=_am.getRunningAppProcesses();
for(inti=0;i<list.size();i++){
Log.i("tag",list.get(i).pid);
}
方法二:調用Process類獲取
只需要一句代碼即可
intpid=android.os.Process.myPid();
還可以使用android.os.Process.myTid()獲取調用進程的線程ID
和android.os.Process.myUid():獲取該進程的用戶ID
㈣ Android進程與線程區別
所以下來特地去查了以下資料,先說說線程:
(1)在Android APP中,只允許有一個主線程,進行UI的渲染等等,但是不能進行耗時操作(網路交互等等),否則會造成ANR,就是線程阻塞卡死,未響應。
(2)除了主線程之外,耗時操作都應該規范到子線程中,線程之間會有相應的通信方式,但相互獨立。
(3)然後看了一下所查資料:
線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。線程比進程更小,基本上不擁有系統資源,故對它的調度所用資源小,能更高效的提高系統內多個程序間並發執行的。 嗯,從大的說就是這樣。
在平時的Android開發過程中,基本上都會用到線程handler,thread等等,具體的實現方法我就不在這里寫了。
進程:
根據所查資料:是一個具有獨立功能的程序關於某個數據集合的一次運行活動。進程是系統進行資源分配和調度的一個獨立單位。可以申請和擁有系統資源,是一個動態的概念,是一個活動的實體,是一個「執行中的程序」。不只是程序的代碼,還包括當前的活動。
這應該是一個比較大的概念,存在於一個系統中,與線程的區別是:
1、子進程和父進程有不同的代碼和數據空間,而多個線程則共享數據空間,每個線程有自己的執行堆棧和程序計數器為其執行上下文。
2、進程間相互獨立,同一進程的各線程間共享。某進程內的線程在其它進程不可見。
3、進程間通信IPC,線程間可以直接讀寫進程數據段(如全局變數)來進行通信——需要進程同步和互斥手段的輔助,以保證數據的一致性。
4、線程上下文切換比進程上下文切換要快得多。
㈤ 在Android中,是否有獲得當前進程名稱的方法
方法一:調用ActivityManager
代碼如下
ActivityManageram=(ActivityManager)this
.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo>list=_am.getRunningAppProcesses();
for(inti=0;i<list.size();i++){
Log.i("tag",list.get(i).pid);
}
方法二:調用Process類獲取
只需要一句代碼即可
intpid=android.os.Process.myPid();
還可以使用android.os.Process.myTid()獲取調用進程的線程ID
和android.os.Process.myUid():獲取該進程的用戶ID
㈥ 如何獲取android正在運行的進程
ActivityManager.RunningAppProcessInfo類 說明: 封裝了正在運行的進程信息 常用欄位: int pid 進程ID int uid 進程所在的用戶ID String processName 進程名,默認是包名或者由android:process=」」屬性指定 String [ ] pkgList 運行在該進程下的所有應用程序包名 關於ActivityManager.RunningAppProcessInfo更多信息,請查看<Android中應用程序的信息---ActivityManager的使用> PackageManger類 說明: 封裝了對應用程序信息的操作 獲得應用程序信息的的方法如下: public abstract ApplicationInfo getApplicationInfo(String packageName, int flags) 參數:packagename 包名 flags 該ApplicationInfo是此flags標記,通常可以直接賦予常數0即可 功能:返回ApplicationInfo對象
㈦ android服務和進程的區別
他們之間的區別:Service很大程度上充當了應用程序後台線程管理器的角色。(如果Activity中新開啟一個線程,當該Acitivyt關閉後,該線程依然在工作,但是與開啟它的Activity失去聯系。也就是說此時的這個線程處於失去管理的狀態。但是使用Service,則可以對後台運行的線程有效地管理。)
一個服務不是一個單獨的進程。服務對象本身並不意味著它是在自己的進程中運行,除非另有規定,否則它與運行程序是同在一個進程中。
一個服務不是一個單獨的線程。Service和其他組件一樣,默認情況下,Service中的所有代碼都是運行在主線程中。
在android中,為什麼不使用後台線程而使用Service? 有3大要點:
1、Service可以放在獨立的進程中,所以更安全;
2、使用Service可以依賴現有的binder機制,不需要在應用層面上處理線程同步的繁雜工作;
3、系統可以重新啟動異常死去的Service。
說明:進程是由若干線程組成。(線程是進程中的一部分,進程包含多個線程在運行。)
㈧ 安卓中進程和Task有什麼區別
安卓中進程和Task區別:
首先看到的不是進程(process),是任務(Task)。
用終端,輸ps,可以看到真正的運行中的linux process
進程是一個繼承自Linux的概念,一般一個app會有一個uid,需要時會獨立地開一個p
rocess。有些process是作為app的容器的,其它process是底層linux用到的。同時,雖
然很少見,也會有多個app共享一個process或者uid。
task是一個activity的棧,其中"可能"含有來自多個App的activity,也就是來自多個p
rocess,殺task一般是關閉Task的根activity引出的子樹,不一定會連帶kill掉對應的
㈨ android中如何殺死自己的進程
其中的killBackgroundProcesses是android.app.ActivityManager類中的方法,而必須在Manifest.xml文件中加入<uses-permission
android:name="android.permission.KILL_BACKGROUND_PROCESSES"/> 的設置。 restartPackage (String packageName) 也是一種殺死進程的方法。 該方法的原型 public void killBackgroundProcesses (String packageName) 僅有一個參數為package Name,使用方法比較簡單。
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
am.killBackgroundProcesses("cn.com.android123.cwj"); // API Level至少為8才能使用
㈩ 進程android.process.acore是什麼東西
首先,進程android.process.acore是什麼?簡單來說,他就是安卓手機系統中代表通訊錄的進程,如果這個進程關閉掉的話,您的手機電話功能就無法使用了。因此,如果您不是打算拿手機當MP4來用的話,建議您還是保留這個進程吧。
那麼,如果您已經刪除了該進程,導致手機無法打電話了,又該如何解決呢?比較快捷的方法就是重啟手機,系統重啟之後這些進程會重新運行的。如果不行的話,您可以嘗試讓手機恢復出廠設置試試看,一般都可以完美解決的。