ActivityManager(五)--判断Service是否已经启动

MainActivity如下:

package cn.testservice1;

import java.util.ArrayList;
import java.util.Iterator;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
/**
 * Demo描述:
 * 判断服务(Service)是否已经启动
 *
 * 判断步骤:
 * 1 利用ActivityManager得到所有正在运行的Service的集合.
 * 2 判断该集合是否包含某一服务
 *
 * 注意事项:
 * 1 不需要什么权限
 * 2 在调用getRunningServices(int maxNum)方法时将maxNum的值设大一些.
 *   有这么一种可能maxNum=30时返回的集合不包括需要判断的服务,
 *   但设置maxNum=100时所获取到的集合里包括了需要判断的服务
 * 3 ActivityManager还有一方法getRecentTasks(maxNum, flags)可判断最近的任务
 * 4 ActivityManager可以获取运行中的BroadcastReceiver和ContentProvider么?
 *   不可以.
 *
 */
public class MainActivity extends Activity {
	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.main);
		init();
	}

	private void init() {
		mContext = this;
		intent = new Intent();
		intent.setAction("cc.test.com");

		// 开启服务
		mStartButton = (Button) findViewById(R.id.startButton);
		mStartButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View view) {
				startService(intent);
			}
		});

		// 终止服务
		mStopButton = (Button) findViewById(R.id.stopButton);
		mStopButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View view) {
				stopService(intent);
			}
		});

		// 检测服务是否在运行
		mCheckServiceButton = (Button) findViewById(R.id.checkServiceButton);
		mCheckServiceButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View view) {
				boolean isRunning = isServiceRunning(mContext,"cn.testservice1.ServiceSubclass");
				if (isRunning) {
					System.out.println("服务在运行中");
				} else {
					System.out.println("服务未启动");
				}
			}
		});
	}

	/**
	 * 判断服务是否在运行中
	 * @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<RunningServiceInfo> runningServiceInfoList
			= (ArrayList<RunningServiceInfo>) activityManager.getRunningServices(100);
			for (Iterator<RunningServiceInfo> iterator=runningServiceInfoList.iterator();iterator.hasNext();) {
				RunningServiceInfo runningServiceInfo = (RunningServiceInfo) iterator.next();
				if (serviceName.equals(runningServiceInfo.service.getClassName().toString())) {
					return true;
				}
			}
		} else {
			return false;
		}
		return false;
	}

}

ServiceSubclass如下:

package cn.testservice1;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

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()");
	}

}

main.xml如下:

<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:gravity="center_horizontal"
   >

    <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>
时间: 2024-08-01 05:23:33

ActivityManager(五)--判断Service是否已经启动的相关文章

oracle init.cssd startcheck—HP Service Guard未启动导致CRS无法正常启动解决办法

早上到客户现场,客户告知有一套环境替换OCR和VOTEDISK之后,crs无法启动,让我看看.环境:HP RAC(只用一个节点)+10.2.0.5 Oracle 数据库 start crs显示正常,但是无法启动 # /app/oracle/product/10.2.0/crs/bin/crsctl start crs Attempting to start CRS stack The CRS stack will be started shortly   # ps -ef|grep crs   

lamp-mysql service mysql restart 启动失败

问题描述 mysql service mysql restart 启动失败 kali linux 64位,通过一键安装包安装了LAMP mysql安装的位置在/web/server/mysql ,系统启动后,所有服务运行正常 但是通过service mysql restart 启动失败 提示:/etc/init.d/mysql:WARING:/etc/mysql/my.cnf cannot be read See README.warnn.gz... 而/etc/ 下根本没有mysql文件夹,只

android中android中 1.StartService()启动Service 2.BindService()启动Service 有何区别

问题描述 android中android中 1.StartService()启动Service 2.BindService()启动Service 有何区别 android中 1.StartService()启动Service 2.BindService()启动Service 有何区别和联系 解决方案 http://www.cnblogs.com/yejiurui/p/3429451.htmlhttp://blog.csdn.net/zhuangyalei/article/details/4708

Android判断程序是否第一次启动

本文实例为大家分享了Android判断程序是否第一次启动的具体代码,供大家参考,具体内容如下 public class Welcome extends Activity { private final long SPLASH_LENGTH = 2000; Handler handler = new Handler(); public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); set

五招解决Windows xp启动后迟延问题

 症状:启动刚进入系统界面时,点什么都打不开,要等一分钟左右才能打开. 解决办法: 一.首先,请升级杀毒软件的病毒库,全面杀毒,以排除病毒原因. 二.开始→运行,输入msconfig→确定.在打开的系统系统配置程序里,将一些不重要的服务以及启动程序关闭,重启电脑. 三.进入"我的电脑"--工具--文件夹选项--查看--取消"自动搜索网络文件夹和打印机"的勾眩 四.开始→设置→网络连接→右击"本地连接"→属性→双击"Internet 协议

服务(Service)全解析(五)--前台Service

MainActivity如下: package cc.testservice2; import android.app.Activity; import android.content.ComponentName; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.v

ActivityManager(三)--判断应用程序从后台回到前台

MainActivity如下: package cc.testbackgroundtofront; import java.util.List; import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityManager.RunningTaskInfo; import android.content.ComponentName; import android.content

ActivityManager(四)--判断应用是否在前台运行

MainActivity如下: package cn.testforeground; import java.util.List; import android.os.Bundle; import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityManager.RunningTaskInfo; import android.content.ComponentName; imp

Window Service 服务中启动有界面进程

问题描述 window服务账户为LocalSystem,在服务中启动新进程,在进程中报错//子进程代码System.Threading.Thread.Sleep(30*1000);log4net.Config.XmlConfigurator.Configure();varloger=log4net.LogManager.GetLogger("TEST");loger.Info("Start");try{for(inti=0;i<100;i++){Labella