當前位置:首頁 » 安卓系統 » android獲取pid

android獲取pid

發布時間: 2023-04-18 14:20:28

❶ Android 怎麼退出整個應用程式

Android 怎麼退出整個應用程式

在Android中,Activity有個棧,一個Activity結信談束掉,會回到上一個Activity,並不是退出應用程式。
Android中,退出應用程式的方式:
通過pid
int pid = android.os.Process.myPid(); 獲取當前應用程式的PID
android.os.Process.killProcess(pid); 殺死當前程序
這種方法退出應用,是會保留某些後進程,例如:Service,Notifications等。
2.通過ActivityManager
ActivityManager manager = (ActivityManager)context.getSystemService(ACTIVITY_SERVICE); 獲取應用程式管理器
manager.killBackgroundProcesses(getPackageName()); 強制結束當前應用程式
這種方式退出應用,會結束本應用程式的一切活動,因為本方法會根據應用程式的包名殺死所有程序包括Activity,Service,Notifications等。

呼叫System.exit(0);
其實還有一種方法也不錯,把MainActivity設定為singleTop,先跳轉到MainActivity然後finish就行,不過要注意停掉相應的Service

大家都知道 Android 的 Activity 是存著歷史棧的,比如從 A -> B -> C,C 完成 finish 後喊森回到 B,把所有的Activity 都 finish了,程式就自然退出了。 當然在 finish 的同時也需要是否自己程式的其他資源。所以需要想個辦法把 Activity 給存起來。然後在程式退出的地方呼叫它們的 finish()鄭坦畝方法。

使用全域性變數。對了,第一個想到的就是繼承 Application,程式碼入下。
public class AgentApplication extends Application { private List<Activity> activities = new ArrayList<Activity>(); public void addActivity(Activity activity) {activities.add(activity);} @Overridepublic void onTerminate() {super.onTerminate();for (Activity activity : activities) {activity.finish();}onDestroy();System.exit(0);}}
然後在 Activity onCreate 的時候來呼叫 addActivity (),有人可能想到這個Application需要在所有的 Activity onCreate的時候都使用,需要做一個單例例項。其實根本不需要。在 Activity 中使用 this.getApplication() 就可以了。

最後在你需要推出程式的地方呼叫 application.onTerminate() 就可以了。記住:super.onTerminate() 必須呼叫,程式碼中的 onDestroy()是我自己的釋放其他資源的方法,不是系統的。

執行以上程式碼後,在LogCat 中會出現一行提示:
Process 包名 (pid xxxxx) has died. 證明你的程式退出了。現在你可以測試了。

有幾種方法,一種是:程式退出時,下方有寫 在按一次退出程式
第二種,進 設定-應用程式-正在執行 這一欄自己關

有時跳轉的activity較多時,還需要多次按返回鍵,這樣感覺一點都不爽。 後面添加了一個選單返回功能鍵,這個方法也只能用system.exit(0)來關閉當前活動的Activity,附程式碼: public boolean onCreateOptionsMenu(Menu menu){super.onCreateOptionsMenu(menu); MenuItem item = menu.add(Menu.NONE, Menu.NONE, Menu.NONE, "Exit"); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener(){public boolean onMenuItemClick(MenuItem item){System.exit(0); return true;}});return true;}想到這樣太不方便了,每次退出介面之後應用程式還在執行,今天查了下資料終於把這個問題給解決了, 網上提供了幾種方法,我吸收了下面這個自認為簡單易懂的方法,將下面SysApplication這個類復制到工程裡面,然後在每個Acitivity的oncreate方法裡面通過SysApplication.getInstance().addActivity(this);添加當前Acitivity到ancivitylist裡面去,最後在想退出的時候呼叫SysApplication.getInstance().exit();可直接關閉所有的Acitivity並退出應用程式。 附程式碼:import java.util.LinkedList; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.app.Application; import android.content.DialogInterface; import android.content.Intent; public class SysApplication extends Application { private List mList = new LinkedList(); private static SysApplication instance; private SysApplication() { } public synchronized static SysApplication getInstance() { if (null == instance) { instance = new SysApplication(); } return instance; } add Activity public void addActivity(Activity activity) { mList.add(activity); } public void exit() { try { for (Activity activity : mList) { if (activity != null) activity.finish(); } } catch (Exception e) { e.printStackTrace(); } finally { System.exit(0); } } public void onLowMemory() { super.onLowMemory(); System.gc(); } } 在應用程式裡面 的activity的oncreate裡面新增SysApplication.getInstance().addActivity(this)如:public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);

你可以長按主屏鍵後,在其中關閉應用程式。但並不能完全退出執行記憶體

❷ Android應用查看CPU與內存佔用說明

命令中的"應用包名"應該替換為你需要查詢的包名.
執行命令後, 在輸出的內容中, 第二項即應用的進消昌程仿橋大名, 例如:

那麼 22411 即為該應用當前的pid.

其中的"應用的pid"為上一步獲取到的pid
執行命令後, 命令行工具即會列印應用運行信息

命令中的"應用包名"應該替換為你需要查詢的包名.
命令備豎執行後過段時間即會列印內存佔用大小.

❸ 如何獲取android 進程信息

如何獲取android 進程信息,有需要的朋友可以參考下。

有時候為了完成某些功能比如監測某些程序的運行情況,我們可以通過動態的獲取android 進程信息:
1)首先我們定義下進程信息的model:

public class ProcessInfo {
private int pid; // 進程id
private int uid; // 進程所在的用戶id
private int memSize; //進程佔用的內存,kb
private String processName; // 進程名
public String pkgnameList[] ;//運行在進程里的對應的所有程序的包名
public int getPid() {
return this.pid;
}

public void setPid(int pid) {
this.pid = pid;
}

public int getUid() {
return this.uid;
}

public void setUid(int uid) {
this.uid = uid;
}

public int getMemSize() {
return this.memSize;
}

public void setMemSize(int memSize) {
this.memSize = memSize;
}

public String getProcessName() {
return this.processName;
}

public void setPocessName(String processName) {
this.processName = processName;
}
}

其次,我們通過android API 獲取進程信息:
// 獲得系統進程信息

private ArrayList<ProcessInfo> getRunningAppProcessInfo(){
ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
ArrayList<ProcessInfo> processInfoList = new ArrayList<ProcessInfo>();
List<ActivityManager.RunningAppProcessInfo> appProcessList = mActivityManager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo appProcessInfo : appProcessList) {
int pid = appProcessInfo.pid;
int uid = appProcessInfo.uid;
String processName = appProcessInfo.processName;
int[] myMempid = new int[] { pid };
Debug.MemoryInfo[] memoryInfo = mActivityManager.gegetProcessMemoryInfo(myMempid);
//kb
int memSize = memoryInfo[0].dalvikPrivateDirty;
ProcessInfo processInfo = new ProcessInfo();
processInfo.setPid(pid);
processInfo.setUid(uid);
processInfo.setMemSize(memSize);
processInfo.setPocessName(processName);
processInfo.pkgnameList = appProcessInfo.pkgList ;
processInfoList.add(processInfo);
return processInfoList;
}

//判斷某進程是否存在

private boolean isProcessExisting(String packageName){
ArrayList<ProcessInfo> processInfoList = getRunningAppProcessInfo();
for(ProcessInfo process : processInfoList){
String[] packageList = process.pkgnameList;
for (String pkg : packageList) {
if(pkg.equals(packageName)){
return true;
}
}
}
return false;
}

❹ 在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

❺ 終端中查看某個app的logcat輸出,支持關鍵字篩選,支持輸出到文件

在只安裝了adb環境的情況下,如何查看某個app的日誌,同時篩選關鍵字?

如何配置adb環境,請移步 mac下安裝adb環境的三種方式


Logcat命令行工具

Logcat 是一個命令行工具,用於轉儲系統消息日誌,包括設備拋出錯誤時的堆棧軌跡,以及從您的應用使用 Log 類寫入的消息。

在 Android Studio 中,您也可以從 Logcat 窗伏中口查看日誌消息。這里我們通過 Logcat命令行工具 來查看app輸出的log。

先將設備通過usb數據線連接到電腦,通過 adb devices 命令查看是否連接成功:

可以看到我的手機已經連接到adb了。

在終端中輸入 adb logcat ,即可以看到設備的所有logcat輸出:

不過這明胡廳好顯不是我們想要的,我們需要的是某個app下的logcat輸出, Logcat命令行工具 中提供了相應的方式:

這里的 xxx 表示我們目標app對應的 pid 。

如何獲取某個app對應的 pid 呢?

可以通過 adb shell mpsys 包名 獲取pid,不過需要我們在手機上 先打開這個app ,因為pid是分配給進程的,進程啟動以後才會分配pid。

在最上面的輸出中,我們也可以很方便的看到pid:

需要注意的是, pid是分配給進程的,如果app關閉了再重新打開,就會分配一個新的進程,同一個包名對應的pid就會變 。

除了上面的方式,我們還有另一種方式,也需要app處於打開狀態:

可以清晰的看到我們目標包名com.tinytongtong.androidstudy的 pid為7948 。

接著使用我們獲取到的pid,就可以輸出目標app下的log了:

這里輸出的logcat是app下所有的log,如果我們要定位具體問題還是遠遠不夠的,還需要支持關鍵字篩選。

接著我們藉助 grep 命令進行篩選,比如說我要搜索的關鍵字是"Lifecycle":

可以看到這里只輸出了符合我關鍵字的log,任務基本完成。褲鉛

當然了,如果想把輸出結果保存到文件中,也是很方便的,在之前的命令後面添加 > logcat.txt ,之前命令的輸出結果就會被重定向到 logcat.txt 文件中。

我們查看通過 cat logcat.txt 即可快速查看 logcat.txt 中的內容。

這里的 > 表示覆蓋文件內容,如果要追加文件末尾,可以換成 >> 。

❻ 如何在Android中取得當前進程名

在Android中取得當前進程名

說明:上面代碼關鍵的兩個地方解釋,也就是取得當前進程名

  1. android.os.Process.myPid())//獲取PID,目前獲取自己的也只有該API

  2. ActivityManager.RunningAppProcessInfo類

說明: 封裝了正在運行的進程信息

常用欄位:

int pid 進程ID

int uid 進程所在的用戶ID

String processName 進程名,默認是包名或者由Android:process=」」屬性指定

String [ ] pkgList運行在該進程下的所有應用程序包名

❼ Android怎麼獲取進程Id

通過linux命令來獲取進程ID範例代碼:

ProcesspsProcess=Runtime.getRuntime().exec("sh");
DataOutputStreamout=newDataOutputStream(psProcess.getOutputStream());
InputStreamis=psProcess.getInputStream();
out.writeBytes("ps|grep'vpnloader'|cut-c10-14 ");
out.writeBytes("ps ");
out.flush();
try{
psProcess.waitFor();
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();}

if(is.read()!=0)
{
bytefirstByte=(byte)is.read();
intavailable=is.available();
byte[]characters=newbyte[available+1];
characters[0]=firstByte;
is.read(characters,1,available);
Stringre=newString(characters);
熱點內容
手機點菜app怎麼連接電腦伺服器 發布:2025-07-05 11:13:05 瀏覽:942
配置控制台干什麼用的 發布:2025-07-05 10:54:51 瀏覽:961
連信從哪裡改登錄密碼 發布:2025-07-05 10:54:12 瀏覽:398
怎麼修改查詢密碼 發布:2025-07-05 10:49:48 瀏覽:966
matlab文件存儲 發布:2025-07-05 10:40:46 瀏覽:85
梅州市用工實名制管理平台雲存儲 發布:2025-07-05 10:28:59 瀏覽:77
安卓origin怎麼設置 發布:2025-07-05 10:20:10 瀏覽:542
安卓為什麼跳水 發布:2025-07-05 09:55:08 瀏覽:88
達內學校php 發布:2025-07-05 09:52:05 瀏覽:399
獲取資料庫所有表 發布:2025-07-05 09:39:12 瀏覽:655