列出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设备所有启动的服务 判断某个服务是不是开启的主要内容,如果未能解决你的问题,请参考以下文章