当前位置:首页 » 安卓系统 » 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);
热点内容
linux485 发布:2025-07-05 14:38:28 浏览:293
php用的软件 发布:2025-07-05 14:06:22 浏览:745
没有权限访问计算机 发布:2025-07-05 13:29:11 浏览:418
javaweb开发教程视频教程 发布:2025-07-05 13:24:41 浏览:666
康师傅控流脚本破解 发布:2025-07-05 13:17:27 浏览:226
java的开发流程 发布:2025-07-05 12:45:11 浏览:669
怎么看内存卡配置 发布:2025-07-05 12:29:19 浏览:271
访问学者英文个人简历 发布:2025-07-05 12:29:17 浏览:821
1970linux 发布:2025-07-05 12:12:43 浏览:109
解压挑刺 发布:2025-07-05 12:12:12 浏览:537