列出Android设备所有启动的服务 判断某个服务是不是开启

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了列出Android设备所有启动的服务 判断某个服务是不是开启相关的知识,希望对你有一定的参考价值。

今天给大家的小例子是列出android设备中所有启动的服务,及判断某个服务是否开启,具体步骤如下了:
第一步:新建一个Android工程,命名为RunningService。
第二步:修改RunningService.java代码如下:
package com.tutor.runningservice;
import java.util.List;
import android.app.Activity;
import android.app.ActivityManager;
import android.os.Bundle;
import android.widget.TextView;
public class RunningService extends Activity
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
TextView mTextView = new TextView(this);
ActivityManager mActivityManager =
(ActivityManager)getSystemService(ACTIVITY_SERVICE);

List<ActivityManager.RunningServiceInfo> mServiceList = mActivityManager.getRunningServices(30);
//我要判断的服务名字,我在launcher2里加了一个音乐服务
final String musicClassName = "com.android.launcher2.MusicService";

boolean b = MusicServiceIsStart(mServiceList, musicClassName);

mTextView.setText("你要判断的服务状态为: " +b+"/n" + getServiceClassName(mServiceList));
setContentView(mTextView);

//通过Service的类名来判断是否启动某个服务
private boolean MusicServiceIsStart(List<ActivityManager.RunningServiceInfo> mServiceList,String className)

for(int i = 0; i < mServiceList.size(); i ++)
if(className.equals(mServiceList.get(i).service.getClassName()))
return true;


return false;

//获取所有启动的服务的类名
private String getServiceClassName(List<ActivityManager.RunningServiceInfo> mServiceList)
String res = "";
for(int i = 0; i < mServiceList.size(); i ++)
res+=mServiceList.get(i).service.getClassName()+ " /n";


return res;


第三步:运行上述工程,查看效果!
参考技术A 列出Android设备所有启动的服务,判断某个服务是否开启,主要是通过ActivityManager 这个类来获取所有已经启动的任务,如下代码:
  public void listActivity()
  List<RunningTaskInfo> tasks= activityManager.getRunningTasks(30);//获取正在启动的服务
  Iterator<RunningTaskInfo> itInfo=tasks.iterator();//获得一个遍历的对象
  while(itInfo.hasNext())
  RunningTaskInfo info=itInfo.next();
  all.add("【id="+info.id+"】,"+info.baseActivity.getClassName());//服务进行查找和遍历
  
  
  adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,this.all);
  
  tasklist.setAdapter(adapter);
  
  
  ActivityManager 类:
  常用的静态内部类如下(下面具体介绍):
  ActivityManager.MemoryInfo: 系统可用内存信息
  ActivityManager.RecentTaskInfo: 最近的任务信息
  ActivityManager.RunningAppProcessInfo: 正在运行的进程信息
  ActivityManager.RunningServiceInfo: 正在运行的服务信息
  ActivityManager.RunningTaskInfo: 正在运行的任务信息

Android dump使用

简介

dumpsys是Android提供的系统工具,可以用来查看所有系统服务的信息。
在命令行输入如下命令,就可以罗列出当前所有的系统服务名:

dumpsys -l

dumpsys 后面加上列出的系统服务名即可只输出特定服务的信息。如下面指令会输出Activity任务栈的信息。

dumpsys activity

直接dumpsys 某个service打出的信息量很大,可以有选择性的添加一些参数进行过滤。具体参数可以通过执行-h参数命令来查看帮助信息。如下

# dumpsys activity -h                                                   
Activity manager dump options:
  [-a] [-c] [-p PACKAGE] [-h] [WHAT] ...
  WHAT may be one of:
    a[ctivities]: activity stack state
    r[recents]: recent activities state
    b[roadcasts] [PACKAGE_NAME] [history [-s]]: broadcast state
    broadcast-stats [PACKAGE_NAME]: aggregated broadcast statistics
    i[ntents] [PACKAGE_NAME]: pending intent state
    p[rocesses] [PACKAGE_NAME]: process state
    o[om]: out of memory management
    perm[issions]: URI permission grant state
    prov[iders] [COMP_SPEC ...]: content provider state
    provider [COMP_SPEC]: provider client-side state
    s[ervices] [COMP_SPEC ...]: service state
    as[sociations]: tracked app associations
    settings: currently applied config settings
    service [COMP_SPEC]: service client-side state
    package [PACKAGE_NAME]: all state related to given package
    all: dump all activities
    top: dump the top activity
  WHAT may also be a COMP_SPEC to dump activities.
  COMP_SPEC may be a component name (com.foo/.myApp),
    a partial substring in a component name, a
    hex object identifier.
  -a: include all available server state.
  -c: include client state.
  -p: limit output to given package.
  --checkin: output checkin format, resetting data.
  --C: output checkin format, not resetting data.

使用

上面介绍的都是系统服务的用法,那我们自己写的应用如何使用呢?
App只需要继承Service后重写dump方法就可以进行dumpsys打印了。

public class TestService extends Service 
    @Override
    public IBinder onBind(Intent intent) 
        return null;
    
    @Override
    protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) 
        writer.println("Test dump");
    

service启动之后就可以dumpsys activity service指令在命令行打印dump方法内容了。

# dumpsys activity service TestService                          
SERVICE android.examples.com/.TestService 864e7ea pid=2781
  Client:
    Test dump

谷歌文档
好文推荐

以上是关于列出Android设备所有启动的服务 判断某个服务是不是开启的主要内容,如果未能解决你的问题,请参考以下文章

CentOS7 服务检查命令

Android dump使用

Android dump使用

在开机或重启设备时启动Android服务[重复]

Android 在特定时间使用 AlarmManager 启动服务并且设备启动完成

ubuntu如何判断某个端口是不是被隐藏