导航:首页 > 操作系统 > android判断service是否运行

android判断service是否运行

发布时间:2023-05-05 16:46:02

android判断某服务是否正在运行

Android系统中,判断应用塌昌腔服务是否启动有两种方式:
1.根据包名判断,以下团衫为判断代码:
public boolean checkApkExist(Context context, String packageName) {
if (packageName == null || “”.equals(packageName))
return false;
try {
ApplicationInfo info = context.getPackageManager()
.getApplicationInfo(packageName,
PackageManager.GET_UNINSTALLED_PACKAGES);
return true;
} catch (NameNotFoundException e) {
return false;
}
}

2. 根据Intent判断,以下为判迅轮断代码:
public boolean checkApkExist(Context context, Intent intent) {
List<ResolveInfo> list = context.getPackageManager().queryIntentActivities(intent, 0);
if(list.size() > 0){
return true;
}
return false;
}
public boolean checkApkExist(Context context, String packageName) {
if (packageName == null || “”.equals(packageName)) return false;
try {
ApplicationInfo info = context.getPackageManager() .getApplicationInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES); return true;
} catch (NameNotFoundException e) { return false; }
}
public boolean checkApkExist(Context context, Intent intent) {
List<ResolveInfo> list = context.getPackageManager()
.queryIntentActivities(intent, 0);
if (list.size() > 0) {
return true;
}
return false;
}

Ⅱ Android 判断当前app是否是在后台运行

/**

* 判断程序是否在后樱闹台运行

*

* @param activity

* @return true 表示在后台运行

*/

public static boolean isRunBackground(Activity activity) {

   罩烂 ActivityManager activityManager = (ActivityManager) activity.getApplicationContext()

            .getSystemService(Context.ACTIVITY_SERVICE);

    String packageName = activity.getApplicationContext().getPackageName();

    //获取Android设备中所有正在运行的App

    List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager

            .getRunningAppProcesses();

    if (appProcesses == null)

        return true;

    for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {

        // The name of the process that this object is associated with.

   脊闷罩     if (appProcess.processName.equals(packageName)

                && appProcess.importance ==

                ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {

            return false;

        }

    }

    return true;

}

记下来  以后好复制

Ⅲ android 判断某个应用是否正在运行

在手机安全中心或者手机管理中心可以看见后台管理,点击进去就会看见;还有一种方法就是在手机设置中,应用程序中就可以看见。

查看正在运行软件的方法:

  1. 打开手机设置。

  2. 在设置中找到应用选项,点击应用。

  3. 应用里会看见应用程序,点击进去。

  4. 看到个人应用、系统应用、正在运行三栏。

  5. 点击正在运行就会看到所有正在运行的软件了。

Ⅳ Android 之 Service(一)启动,绑定服务

Service(服务)一个运行在后台执行长时间运行的操作组件,它不提供任何用户界面,作为与Activity同级的组件,它依旧是运行在主线程中。
其它组件可以启动一个Service,当这个Service启动之后便会在后台执行,这里需要注意,由于是在主线程中,所以我们需要另外开启一个线程来执行我们的耗时操作。
此外,一个组件还可以与一个Service进行绑定来实现组件之间的交互,甚至可以执行IPC(Inter-Process Communication)进程间通信。
Service可以在后台执行很多任务,比如处理网络事务,播放音乐,文件读写或者与一个内容提供者交互,等等。

本地服务(Local)
该服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外本地服务因为是在同一进程因此不需要IPC,也不需要AIDL。相应bindService会方便很多,当主进程被Kill后,服务便会终止。一般使用在音乐播放器播放等不需要常驻的服务。

远程服务(Remote Service)
该服务是独立的进程,对应进程名格式为所在包名加上你指定的android:process字符串。一般定义方式 android:process=":service" 由于是独立的进程,因此在Activity所在进程被Kill的时候,该服务依然在运行,不受其他进程影响,有利于为多个进程提供服务具有较高的灵活性。由于是独立的进程,会占用一定资源,并且使用AIDL进行IPC比较麻烦。一般用于系统的Service,这种Service是常驻的。

startService启动的服务
用于启动一个服务执行后台任务,不与组件进行通信,停止服务使用stopService。 当一个应用组件比如activity通过调用startService()来启动一个服务的时候,服务便处于启动状态。一旦启动,服务可以在后台无限期地运行下去,即使当启动它的组件已经销毁。通常情况下,一个启动的service执行一个单一的操作并且不会返回任何结果给调用者。

bindService启动的服务
用于启动的服务需要进行通信。停止服务使用unbindService。 当一个应用组件通过调用bindService()来与一个服务绑定时,服务便处于绑定状态。一个绑定的服务提供了一个客户端-服务器端接口来允许组件与服务进行交互,发送请求,得到结果甚至通过IPC进程间通信来完成操作。只有当其它组件与服务进行绑定时,服务才会处于绑定状态。多个组件可以同时与服务绑定,但是当他们全部都解除绑定时,服务就会销毁。

2.BindService:
如果一个Service在某个Activity中被调用bindService方法启动,不论bindService被调用几次,Service的 onCreate 方法只会执行一次,同时 onStartCommand 方法始终不会调用。当建立连接后,Service会一直运行,除非调用unbindService来接触绑定、断开连接或调用该Service的Context不存在了(如Activity被Finish——即通过bindService启动的Service的生命周期依附于启动它的Context),系统在这时会自动停止该Service。

3.StartService AND BindService:
当一个Service在被启动(startService 的同时又被绑定(bindService ),该Service将会一直在后台运行,并且不管调用几次, onCreate 方法始终只会调用一次, onStartCommand 的调用次数与startService 调用的次数一致(使用bindService 方法不会调用 onStartCommand )。同时,调用unBindService 将不会停止Service,必须调用stopService 或Service自身的stopSelf 来停止服务。

4.停止Service:
当一个服务被终止(stopService 、stopSelf 、unbindService )时, onDestory 方法将会被调用——所以我们需要在该方法中清除一些工作(依附该Service生命周期上的,比如:停止在Service中创建并运行的线程)。

1.创建服务

如果你才用的是 startService的方式那么 onBind方法可以忽略
2.注册服务

3.开启服务
start:

bind

绑定服务,一般涉及到组件或进程之间的通信,既然需要通信,那么我们肯定需要一个连接,这里ServiceConnection就是我们所需要的连接,通过Ibinder的传递,我们可以获取到Service的Ibinder对象,从而进行相关操作。

关于粘性服务,这里需要提到 Service的onStartCommand返回值

andorid:name

adroid:exported

android:enabled

android:label

android:process

android:icon

android:permission

关于服务,当我们在应用开发中,如果需要长时间的在后台运行,独立完成某一些事情的情况下,请使用Service!

此文综合: http://www.jianshu.com/p/1e49e93c3ec8 以及自己的一些问题看法,用作学习,回顾之用。

Service 前台服务
请参看 紫豪 http://www.jianshu.com/p/5505390503fa

Ⅳ 列出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;
}
}
第三步:运行上述工程,查看效果!

Ⅵ Android开发怎么判断应用或者服务已经启动

1、判断应用已经启动

ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
List<</span>RunningTaskInfo> list = am.getRunningTasks(100);
for (RunningTaskInfo info : list) {

if (info.topActivity.getPackageName().equals(MY_PKG_NAME) &&

info.baseActivity.getPackageName().equals(MY_PKG_NAME)) {

isAppRunning = true;

//find it, break

break;

}
}

100表示取的最大的任务数,info.topActivity表示当前正在运行的Activity,info.baseActivity表系统后台有此
进程举正在运行,具体要做如何判断就看自已的业务需求。这个类还有更多的方法可以取得系统运行的服务、内存使用情况等的方法,请各位自行查找。

有正迟悔一点要注意,如果想正常运行此方法,请在你的 AndroidManifest.xml 中加入:

android:name="android.permission.GET_TASKS" />

否则可能会有exception抛出。

2、判断服务已经启动运行

ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
List<<旦闷/span>RunningServiceInfo> infos = am.getRunningServices(30); //30是最大值
for(RunningServiceInfo info : infos){

if(info.service.getClassName().equals("Service的全名")){

//...

}
}

Ⅶ android判断service是否运行

  1. /**
  2. *判断某个服务是否正在运行的方法
  3. *
  4. *@parammContext
  5. *@paramserviceName
  6. *是包名孝蠢+服务的类名(例如:net.loonggg.testbackstage.TestService)
  7. *@returntrue代表正在运行,false代表服务没有正在运行
  8. */
  9. publicbooleanisServiceWork(ContextmContext,StringserviceName){
  10. booleanisWork=false;
  11. ActivityManagermyAM=(ActivityManager)mContext
  12. .getSystemService(Context.ACTIVITY_SERVICE);
  13. List<RunningServiceInfo>myList=myAM.getRunningServices(40);
  14. 盯搜if(myList.size()<=0){
  15. returnfalse;
  16. 巧则陪}
  17. for(inti=0;i<myList.size();i++){
  18. StringmName=myList.get(i).service.getClassName().toString();
  19. if(mName.equals(serviceName)){
  20. isWork=true;
  21. break;
  22. }
  23. }
  24. returnisWork;

Ⅷ android 怎么判断service 被关闭

// 检测服务粗枝是否正在运岩春敏行森孙
private boolean isServiceRunning(Context context, String service_Name) {
ActivityManager manager =
(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE))
{
if (service_Name.equals(service.service.getClassName()))
{
return true;
}
}
return false;
}

Ⅸ android 判断是否有线程运行

线程如果是一直运行的,就铅培银检测service是否已经启动,启动了就不开启线程。中渗每次开启程序就启槐宴动服务,线程也新建,建议看一下service的生命周期。。

Ⅹ android如何判断后台一个Service是否在运行

当你了解Service的生命周期以后,你就会明白,你可以在onStop 或者onDestroy()中记录一下状态,onStop 执行以后,那么service肯定是停止的,Service是在一段不定的时间运行在后台,不和用户交互应用组件。每个Service必须在manifest中 通过<service>来声明。可以通过contect.startservice和contect.bindserverice来启动。


Service生命周期

使用context.startService() 启动Service是会会经历:

context.startService() ->onCreate()- >onStart()->Service running

context.stopService() | ->onDestroy() ->Service stop



在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。

而启动service,根据onStartCommand的返回值不同,有两个附加的模式:

1. START_STICKY 用于显示启动和停止service。

2. START_NOT_STICKY或START_REDELIVER_INTENT用于有命令需要处理时才运行的模式。


Service不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法都可以启动Service,但是它们的使用场合有所不同。

  1. 使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。


  2. 使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。onBind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用Context.bindService()方法并不会导致该方法被多次调用。采用Context.bindService()方法启动服务时只能调用onUnbind()方法解除调用者与服务解除,服务结束时会调用onDestroy()方法。


官方文档告诉我们,Android系统会尽量保持拥有service的进程运行,只要在该service已经被启动(start)或者客户端连接(bindService)到它。当内存不足时,需要保持,拥有service的进程具有较高的优先级。

1. 如果service正在调用onCreate,onStartCommand或者onDestory方法,那么用于当前service的进程则变为前台进程以避免被killed。

2. 如果当前service已经被启动(start),拥有它的进程则比那些用户可见的进程优先级低一些,但是比那些不可见的进程更重要,这就意味着service一般不会被killed.

3. 如果客户端已经连接到service (bindService),那么拥有Service的进程则拥有最高的优先级,可以认为service是可见的。

4. 如果service可以使用startForeground(int, Notification)方法来将service设置为前台状态,那么系统就认为是对用户可见的,并不会在内存不足时killed。

阅读全文

与android判断service是否运行相关的资料

热点内容
文档拖到文件夹就不见了 浏览:814
标致308压缩比是多少 浏览:749
服务器和备用服务器地址 浏览:926
程序员加班跳槽 浏览:706
青年员工在工作中如何化解压力 浏览:602
包子解压神器怎么玩才爽 浏览:733
联想加密电脑怎么做系统 浏览:881
解压最近的压力 浏览:709
如何知道王牌战争新出来的服务器 浏览:591
程序员建的房子 浏览:419
navicatlinux破解版 浏览:454
找个辅警或者程序员 浏览:452
军团td预言命令 浏览:114
营指挥员下达作战命令 浏览:258
exe打开指定文件夹 浏览:264
pdf里面怎么去水印 浏览:845
appleid账号加密码 浏览:220
苹果如何下载微仓app 浏览:918
迅雷解压进度为0 浏览:861
解压解惑近义词 浏览:318