1.获取栈顶Activity以及其所在进程
public static String getTopActivityNameAndProcessName(Context context){
String processName=null;
String topActivityName=null;
ActivityManager activityManager =
(ActivityManager)(context.getSystemService(android.content.Context.ACTIVITY_SERVICE )) ;
List<ActivityManager.RunningTaskInfo> runningTaskInfos = activityManager.getRunningTasks(1) ;
if(runningTaskInfos != null){
ComponentName f=runningTaskInfos.get(0).topActivity;
String topActivityClassName=f.getClassName();
String temp[]=topActivityClassName.split("\\.");
//栈顶Activity的名称
topActivityName=temp[temp.length-1];
int index=topActivityClassName.lastIndexOf(".");
//栈顶Activity所属进程的名称
processName=topActivityClassName.substring(0, index);
System.out.println("---->topActivityName="+topActivityName+",processName="+processName);
}
return topActivityName+","+processName;
}
在MainActivity中调用此方法,可以得到:
09-19 04:03:58.278 8104-8104/com.ebeijia.handlerexplain I/System.out: —->topActivityName=MainActivity,processName=com.ebeijia.handlerexplain
2.获取应用所占空间大小
public class MainActivity extends AppCompatActivity {
private Button button;
private TextView textView;
StringBuffer sb=new StringBuffer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button)findViewById(R.id.btn);
textView=(TextView)findViewById(R.id.tvShow);
getRunningAppProcessInfo();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getRunningAppProcessInfo();
textView.setText(sb.toString());
}
});
}
private void getRunningAppProcessInfo() {
ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
//获得系统里正在运行的所有进程
List<ActivityManager.RunningAppProcessInfo> runningAppProcessesList = mActivityManager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo runningAppProcessInfo : runningAppProcessesList) {
// 进程ID号
int pid = runningAppProcessInfo.pid;
// 用户ID
int uid = runningAppProcessInfo.uid;
// 进程名
String processName = runningAppProcessInfo.processName;
// 占用的内存
int[] pids = new int[] {pid};
Debug.MemoryInfo[] memoryInfo = mActivityManager.getProcessMemoryInfo(pids);
int memorySize = memoryInfo[0].dalvikPrivateDirty;
//System.out.println("processName="+processName+",pid="+pid+",uid="+uid+",memorySize="+memorySize+"kb");
sb.append("processName="+processName+",pid="+pid+",uid="+uid+",memorySize="+memorySize+"kb"+"\r\n");
}
}
}
运行效果如下:
3.判断应用程序从后台返回到前台或者应用是否运行在前台
即按下home键后,再次按下home键进入应用的时候显示相关信息
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onRestart() {
super.onRestart();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
boolean isCurrentRunningForeground = prefs.getBoolean("isCurrentRunningForeground", false);
if (!isCurrentRunningForeground) {
Toast.makeText(MainActivity.this, "从后台回来", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onStop() {
super.onStop();
try {
Thread.sleep(1000);
new Thread(){
public void run() {
boolean isCurrentRunningForeground=isRunningForeground();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor=prefs.edit();
editor.putBoolean("isCurrentRunningForeground", isCurrentRunningForeground);
editor.commit();
};
}.start();
} catch (Exception e) {
}
}
public boolean isRunningForeground(){
String packageName=getPackageName(this);
String topActivityClassName=getTopActivityName(this);
System.out.println("packageName="+packageName+",topActivityClassName="+topActivityClassName);
if (packageName!=null&&topActivityClassName!=null&&topActivityClassName.startsWith(packageName)) {
System.out.println("---> isRunningForeGround");
return true;
} else {
System.out.println("---> isRunningBackGround");
return false;
}
}
public String getTopActivityName(Context context){
String topActivityClassName=null;
ActivityManager activityManager =
(ActivityManager)(context.getSystemService(android.content.Context.ACTIVITY_SERVICE )) ;
//android.app.ActivityManager.getRunningTasks(int maxNum)
//int maxNum--->The maximum number of entries to return in the list
//即最多取得的运行中的任务信息(RunningTaskInfo)数量
List<ActivityManager.RunningTaskInfo> runningTaskInfos = activityManager.getRunningTasks(1) ;
if(runningTaskInfos != null){
ComponentName f=runningTaskInfos.get(0).topActivity;
topActivityClassName=f.getClassName();
}
//按下Home键盘后 topActivityClassName=com.android.launcher2.Launcher
return topActivityClassName;
}
public String getPackageName(Context context){
String packageName = context.getPackageName();
return packageName;
}
}
运行效果如下:
4.判断Service是否正在运行
(1) ServiceSubclass
public class ServiceSubclass extends Service {
@Override
public IBinder onBind(Intent arg0) {
return null;
}
public void onCreate() {
System.out.println("---> Service onCreate()");
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
System.out.println("---> Service onStart()");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
System.out.println("---> Service onStartCommand()");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
System.out.println("---> Service onDestroy()");
}
}
(2)注册Service
<service
android:name="com.ebeijia.handlerexplain.ServiceSubclass"
android:enabled="true" >
<intent-filter>
<action android:name="cc.test.com" />
</intent-filter>
</service>
(3)activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_margin="10dp"
tools:context="com.ebeijia.handlerexplain.MainActivity">
<Button
android:id="@+id/startButton"
android:layout_width="200dip"
android:layout_height="150dip"
android:text="启动Service"
/>
<Button
android:id="@+id/stopButton"
android:layout_width="200dip"
android:layout_height="150dip"
android:text="停止Service"
/>
<Button
android:id="@+id/checkServiceButton"
android:layout_width="200dip"
android:layout_height="150dip"
android:text="检测Service是否已经在运行"
/>
</LinearLayout>
(4)实现
public class MainActivity extends AppCompatActivity {
private Button mStartButton;
private Button mStopButton;
private Button mCheckServiceButton;
private Intent intent;
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
mContext = this;
intent = new Intent();
intent.setAction("cc.test.com");
// 开启服务
mStartButton = (Button) findViewById(R.id.startButton);
mStartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startService(intent);
mStartButton.setEnabled(false);
mStopButton.setEnabled(true);
}
});
// 终止服务
mStopButton = (Button) findViewById(R.id.stopButton);
mStopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
stopService(intent);
mStopButton.setEnabled(false);
mStartButton.setEnabled(true);
}
});
//初始的时候
mStartButton.setEnabled(true);
mStopButton.setEnabled(false);
// 检测服务是否在运行
mCheckServiceButton = (Button) findViewById(R.id.checkServiceButton);
mCheckServiceButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
boolean isRunning = isServiceRunning(mContext,"com.ebeijia.handlerexplain.ServiceSubclass");
if (isRunning) {
//System.out.println("服务在运行中");
Toast.makeText(MainActivity.this,"服务在运行中",Toast.LENGTH_SHORT).show();
} else {
//System.out.println("服务未启动");
Toast.makeText(MainActivity.this,"服务未启动",Toast.LENGTH_SHORT).show();
}
}
});
}
/**
* 判断服务是否在运行中
* @param context 即为Context对象
* @param serviceName 即为Service的全名
* @return 是否在运行中
*/
private boolean isServiceRunning(Context context, String serviceName) {
if (!TextUtils.isEmpty(serviceName) && context != null) {
ActivityManager activityManager
= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
ArrayList<ActivityManager.RunningServiceInfo> runningServiceInfoList
= (ArrayList<ActivityManager.RunningServiceInfo>) activityManager.getRunningServices(30);
for (Iterator<ActivityManager.RunningServiceInfo> iterator = runningServiceInfoList.iterator(); iterator.hasNext();) {
ActivityManager.RunningServiceInfo runningServiceInfo = (ActivityManager.RunningServiceInfo) iterator.next();
if (serviceName.equals(runningServiceInfo.service.getClassName().toString())) {
return true;
}
}
} else {
return false;
}
return false;
}
}
(5)运行结果
以上的Demo都需要加上权限
<uses-permission android:name="android.permission.GET_TASKS" />