您的位置:首页 > 其它

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

2014-09-21 17:56 253 查看
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: