最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android開發(fā)實現(xiàn)根據(jù)包名判斷App運行狀態(tài)的方法

 更新時間:2017年11月16日 11:30:54   作者:cafeting  
這篇文章主要介紹了Android開發(fā)實現(xiàn)根據(jù)包名判斷App運行狀態(tài)的方法,結合實例形式分析了Android結合包名判斷app運行狀態(tài)的方法,需要的朋友可以參考下

本文實例講述了Android開發(fā)實現(xiàn)根據(jù)包名判斷App運行狀態(tài)的方法。分享給大家供大家參考,具體如下:

前面講過Android開發(fā)判斷一個app應用是否在運行的方法,這里實現(xiàn)獲取指定包名的 APP 是否還在后臺運行,判斷 APP 是否存活。

背景

可以根據(jù) App 是否有 Service 分兩類情況處理:

① 沒有 Service

② 有 Service

對于沒有 Service 的 App,程序一旦切換到后臺,可能很快就被回收了,這里使用 ActivityManager.getRunningTasks(int maxNum) 方法來獲取當前正在運行的任務,注意:此方法并不被系統(tǒng)推薦,且是一個 Deprecated 的方法。

對于有 Service 的 App,大多會有多個 Service ,且有可能都是 :remote 類型的,這樣在判斷上需要進行一定的處理,這里根據(jù) App 的 uid 來判斷,避免在一些特殊的情況下判斷存活不準確的問題。我們使用 ActivityManager.getRunningServices(int maxNum) 方法獲取當前運行中的 Service 列表。

注意:App 的 uid 對于系統(tǒng)內(nèi)置 App 而言不是唯一的,Android 內(nèi)置的應用會有共用 uid 的情況。如果你是開發(fā)系統(tǒng)內(nèi)置應用或者類似的東西,務必要自行進行特殊方式檢查。

實現(xiàn)

下面是幾個工具類,在正式使用的時候需要配合使用,才能覆蓋全部情況:

/**
* 方法描述:判斷某一應用是否正在運行
* Created by cafeting on 2017/2/4.
* @param context   上下文
* @param packageName 應用的包名
* @return true 表示正在運行,false 表示沒有運行
*/
public static boolean isAppRunning(Context context, String packageName) {
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(100);
    if (list.size() <= 0) {
      return false;
    }
    for (ActivityManager.RunningTaskInfo info : list) {
      if (info.baseActivity.getPackageName().equals(packageName)) {
        return true;
      }
    }
    return false;
}
//獲取已安裝應用的 uid,-1 表示未安裝此應用或程序異常
public static int getPackageUid(Context context, String packageName) {
    try {
      ApplicationInfo applicationInfo = context.getPackageManager().getApplicationInfo(packageName, 0);
      if (applicationInfo != null) {
        Logger.d(applicationInfo.uid);
        return applicationInfo.uid;
      }
    } catch (Exception e) {
      return -1;
    }
    return -1;
}
/**
* 判斷某一 uid 的程序是否有正在運行的進程,即是否存活
* Created by cafeting on 2017/2/4.
*
* @param context   上下文
* @param uid 已安裝應用的 uid
* @return true 表示正在運行,false 表示沒有運行
*/
public static boolean isProcessRunning(Context context, int uid) {
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningServiceInfo> runningServiceInfos = am.getRunningServices(200);
    if (runningServiceInfos.size() > 0) {
      for (ActivityManager.RunningServiceInfo appProcess : runningServiceInfos){
        if (uid == appProcess.uid) {
          return true;
        }
      }
    }
    return false;
}

在正式使用的時候結合兩者即可:

String pName = "xxx";
int uid = getPackageUid(context, pName);
if(uid > 0){
  boolean rstA = isAppRunning(context, pName);
  boolean rstB = isProcessRunning(context, uid);
  if(rstA||rstB){
    //指定包名的程序正在運行中
  }else{
    //指定包名的程序未在運行中
  }
}else{
  //應用未安裝
}

總結

在探索驗證程序存活的過程中,發(fā)現(xiàn) ActivityManager.RunningServiceInfo 包含很多信息,一開始我是使用其 process started 屬性來判斷,其中 process 對應包名,但是對于只有 :remote 類型 service 時,則判定不了。

更多關于Android相關內(nèi)容感興趣的讀者可查看本站專題:《Android開發(fā)入門與進階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android基本組件用法總結》、《Android視圖View技巧總結》、《Android布局layout技巧總結》及《Android控件用法總結

希望本文所述對大家Android程序設計有所幫助。

相關文章

  • Flutter將整個App變?yōu)榛疑暮唵螌崿F(xiàn)方法

    Flutter將整個App變?yōu)榛疑暮唵螌崿F(xiàn)方法

    Flutter?是?Google?開源的?UI?工具包,幫助開發(fā)者通過一套代碼庫高效構建多平臺精美應用,這篇文章主要給大家介紹了關于Flutter將整個App變?yōu)榛疑膶崿F(xiàn)方法,在Flutter中實現(xiàn)整個App變?yōu)榛疑欠浅:唵蔚?需要的朋友可以參考下
    2021-12-12
  • Android Handler工作原理解析

    Android Handler工作原理解析

    這篇文章主要為大家詳細介紹了Android Handler的原理,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android多套環(huán)境的維護思路詳解

    Android多套環(huán)境的維護思路詳解

    這篇文章主要為大家介紹了Android多套環(huán)境的維護思路詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Android讀取串口數(shù)據(jù)的操作指南

    Android讀取串口數(shù)據(jù)的操作指南

    在Android系統(tǒng)上讀取串口數(shù)據(jù)是一個常見的需求,特別是當我們需要與硬件設備進行通信時,本文給大家介紹了Android讀取串口數(shù)據(jù)的操作指南,文中有詳細的步驟和代碼示例,幫助你更好地理解和實現(xiàn)串口通信,需要的朋友可以參考下
    2024-05-05
  • Android編程之藍牙測試實例

    Android編程之藍牙測試實例

    這篇文章主要介紹了Android編程之藍牙測試,較為詳細的分析了Android藍牙測試的相關運行環(huán)境與調(diào)試技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • Android實現(xiàn)日歷控件示例代碼

    Android實現(xiàn)日歷控件示例代碼

    本篇文章主要介紹了Android實現(xiàn)日歷控件示例代碼,實例講解了Android日期與時間相關控件的相關使用技巧,具有一定參考價值,需要的朋友可以參考下
    2017-03-03
  • Android中AutoCompleteTextView與TextWatcher結合小實例

    Android中AutoCompleteTextView與TextWatcher結合小實例

    這篇文章主要為大家詳細介紹了Android中AutoCompleteTextView與TextWatcher結合的小實例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Android燒錄指令fastboot簡介

    Android燒錄指令fastboot簡介

    fastboot 是作為 Android 系統(tǒng)編譯器的客戶端,編譯后位于 ./out/host/?Linux?-x86/bin/fastboot 目錄下,這篇文章主要介紹了Android燒錄指令fastboot簡介,需要的朋友可以參考下
    2024-01-01
  • Android14原生PackageInstaller安裝某些apk報錯問題

    Android14原生PackageInstaller安裝某些apk報錯問題

    本文主要介紹了在Android 14上安裝大型應用時遇到的java.lang.RuntimeException: Could not copy bitmap to parcel blob錯誤,下面就一起來介紹一下解決方法,感興趣的可以了解一下
    2025-03-03
  • Listview加載的性能優(yōu)化是如何實現(xiàn)的

    Listview加載的性能優(yōu)化是如何實現(xiàn)的

    在android開發(fā)中Listview是一個很重要的組件,它以列表的形式根據(jù)數(shù)據(jù)的長自適應展示具體內(nèi)容,用戶可以自由的定義listview每一列的布局,接下來通過本文給大家介紹Listview加載的性能優(yōu)化是如何實現(xiàn)的,對listview性能優(yōu)化相關知識感興趣的朋友一起學習吧
    2016-01-01

最新評論

启东市| 越西县| 辉南县| 雅江县| 灵台县| 三台县| 仁布县| 建平县| 淄博市| 乐至县| 石嘴山市| 喀什市| 乐东| 阳新县| 佛冈县| 班玛县| 奉贤区| 郯城县| 阳朔县| 墨玉县| 光山县| 静乐县| 旬邑县| 西华县| 缙云县| 乌拉特中旗| 香格里拉县| 安宁市| 安徽省| 丹凤县| 白山市| 慈利县| 治多县| 慈溪市| 连云港市| 宁武县| 荥阳市| 新巴尔虎右旗| 修武县| 绥阳县| 尉犁县|