導航:首頁 > 操作系統 > 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是否運行相關的資料

熱點內容
包子解壓神器怎麼玩才爽 瀏覽:733
聯想加密電腦怎麼做系統 瀏覽:881
解壓最近的壓力 瀏覽:709
如何知道王牌戰爭新出來的伺服器 瀏覽:591
程序員建的房子 瀏覽:419
navicatlinux破解版 瀏覽:454
找個輔警或者程序員 瀏覽:452
軍團td預言命令 瀏覽:114
營指揮員下達作戰命令 瀏覽:258
exe打開指定文件夾 瀏覽:264
pdf裡面怎麼去水印 瀏覽:845
appleid賬號加密碼 瀏覽:220
蘋果如何下載微倉app 瀏覽:918
迅雷解壓進度為0 瀏覽:861
解壓解惑近義詞 瀏覽:317
壓縮比不一樣燃燒室不一樣 瀏覽:103
androidbutton左對齊 瀏覽:174
怎麼找到學校的伺服器 瀏覽:370
android狀態欄高度是多少 瀏覽:989
linuxcliphp 瀏覽:517