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; } }
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>