Ⅰ 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 判斷某個應用是否正在運行
在手機安全中心或者手機管理中心可以看見後台管理,點擊進去就會看見;還有一種方法就是在手機設置中,應用程序中就可以看見。
查看正在運行軟體的方法:
打開手機設置。
在設置中找到應用選項,點擊應用。
應用里會看見應用程序,點擊進去。
看到個人應用、系統應用、正在運行三欄。
點擊正在運行就會看到所有正在運行的軟體了。
Ⅳ 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是否運行
Ⅷ 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,但是它們的使用場合有所不同。
使用startService()方法啟用服務,調用者與服務之間沒有關連,即使調用者退出了,服務仍然運行。如果打算採用Context.startService()方法啟動服務,在服務未被創建時,系統會先調用服務的onCreate()方法,接著調用onStart()方法。如果調用startService()方法前服務已經被創建,多次調用startService()方法並不會導致多次創建服務,但會導致多次調用onStart()方法。採用startService()方法啟動的服務,只能調用Context.stopService()方法結束服務,服務結束時會調用onDestroy()方法。
使用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。