精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何判斷APP在前臺還是后臺?

開發 前端
當我們不管是點擊Back鍵還是Home鍵都會回調到onStop方法,我們在onStart和onStop中分別對mCount值做了加減,這樣我們可以通過該數值來判斷當前App是前臺還是后臺。

如何判斷一個APP在前臺還是后臺?可以通過RunningTasks,RunningProcess 以及ActivityLifecycleCallback判定。

RunningTasks方式

注意:getRunningTask方法在5.0以上已經被廢棄,只能返回自己和系統的一些不敏感的task,不再返回其他應用的task,用此方法來判斷自身App是否處于后臺是有效的,但是無法判斷其他應用是否處于前臺。

private fun getTopApplication() {

    //首先獲取到ActivityManager
    val activityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager

    if (activityManager.getRunningTasks(1) == null){
        Log.e(TAG, "getForegroundActivity: ")
        return
    }

    var runningTaskInfo = activityManager.getRunningTasks(1)[0]
    if (runningTaskInfo == null) {
        Log.e(TAG, "runningTaskInfo is null")
        return
    }

    runningTaskInfo.topActivity?.let {
        Log.e(TAG, "top application is ${it.packageName}")
    }
}

RunningProcess方式

注意:RunningProcess方法在5.0以上已經被廢棄,例如,在聊天類型的App中,大部分時間需要常駐后臺來不間斷地獲取服務器的消息,就必須把Service設置成START_STICKY,kill后會被重啟(等待5s左右)來保證Service常駐后臺。如果Service設置了這個屬性,這個App的進程就可以判斷為前臺。

appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND
private fun isAppForeground(): Boolean {
    val activityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
    var runningAppProcesses = activityManager.runningAppProcesses

    if (runningAppProcesses == null) {
        Log.e(TAG, "runningAppProcesses is null")
        return false
    }

    runningAppProcesses.forEach {
        if (it.processName == packageName && (it.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND)) {
            return true
        }
    }
    return false
}

ActivityLifecycleCallbacks方式

class MyActivityLifecycleCallbacks(
    var onActivityCreatedAction: ((Activity, Bundle?) -> Unit)? = null,
    var onActivityStartedAction: ((Activity) -> Unit)? = null,
    var onActivityResumedAction: ((Activity) -> Unit)? = null,
    var onActivityPausedAction: ((Activity) -> Unit)? = null,
    var onActivityStoppedAction: ((Activity) -> Unit)? = null,
    var onActivitySaveInstanceStateAction: ((Activity, Bundle) -> Unit)? = null,
    var onActivityDestroyedAction: ((Activity) -> Unit)? = null

) : Application.ActivityLifecycleCallbacks {

    private var mCount=0
    override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
        onActivityCreatedAction?.invoke(activity, savedInstanceState)
    }

    override fun onActivityStarted(activity: Activity) {
        mCount++
        onActivityStartedAction?.invoke(activity)
    }

    override fun onActivityResumed(activity: Activity) {
        onActivityResumedAction?.invoke(activity)
    }

    override fun onActivityPaused(activity: Activity) {
        onActivityPausedAction?.invoke(activity)
    }

    override fun onActivityStopped(activity: Activity) {
        mCount--
        onActivityStoppedAction?.invoke(activity)
    }

    override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
        onActivitySaveInstanceStateAction?.invoke(activity, outState)
    }

    override fun onActivityDestroyed(activity: Activity) {
        onActivityDestroyedAction?.invoke(activity)
    }

    /**
     * 這里我們把mCount的實際數值返回回去
     */
    fun getCount():Int = mCount
}

這里我們對ActivityLifecycleCallbacks的實現類做了一層封裝,利用Kotlin的高階函數,當我們需要去實現那個聲明周期的回調的時候,就通過高階函數來提供回調處理,否則默認不做任何處理。然后我們在Application的onCreate中進行注冊:

class LifeApplication : Application() {

    private val TAG = "LifeApplication"

    private val mActivityLifecycleCallbacks by lazy {
        MyActivityLifecycleCallbacks(
            onActivityCreatedAction = { activit, bundle ->
            Log.e(TAG, "onCreate: ")
        },
        onActivityStoppedAction = { activity ->
            Log.e(TAG, "onStop ")
        },
        onActivityDestroyedAction = { activity ->
            Log.e(TAG, "onDestroy")
        })
    }

    override fun onCreate() {
        super.onCreate()
        instance = this
        //注冊生命周期回調事件
        registerActivityLifecycleCallbacks(mActivityLifecycleCallbacks)
    }

    /**
     * 用于判斷當前進程是否處于前臺
     */
    fun isForegroundMethod(): Boolean = mActivityLifecycleCallbacks.getCount() > 0

    companion object{
        private var instance :LifeApplication?= null
        fun getInstance () = instance!!
    }

當我們不管是點擊Back鍵還是Home鍵都會回調到onStop方法,我們在onStart和onStop中分別對mCount值做了加減,這樣我們可以通過該數值來判斷當前App是前臺還是后臺。

責任編輯:武曉燕 來源: 沐雨花飛蝶
相關推薦

2009-08-26 18:11:52

前臺與后臺方法互調

2018-01-16 16:32:12

架構前臺后臺

2015-06-24 10:06:09

iOS 9適配后臺

2014-07-31 12:07:15

Linux

2019-06-14 15:48:39

Windows 10硬盤SSD

2025-07-30 03:22:00

2020-11-19 10:03:37

前臺中臺后臺

2014-07-11 11:09:10

App應用程序生命周期

2009-08-21 09:09:05

C#字符串

2025-02-25 10:20:00

2018-09-12 21:25:15

iOSAppcrash

2021-02-04 11:59:10

硬盤SSD數據

2014-06-26 14:10:44

2017-01-15 20:58:04

Linux進程作業管理

2012-12-24 13:25:59

微信App

2022-09-19 13:21:15

Linux進程

2015-10-12 16:37:39

前端編碼雙向編譯

2023-10-30 07:13:56

2011-06-14 09:37:52

AppiCloud蘋果

2010-04-16 18:23:43

Unix操作系統
點贊
收藏

51CTO技術棧公眾號

美女伦理水蜜桃4| 免费试看一区| 国产午夜精品无码| 伊人成综合网yiren22| 色老汉av一区二区三区| 日本免费在线视频观看| 天堂av手机版| 美女在线观看视频一区二区| 欧美国产在线电影| av男人的天堂av| 中文字幕区一区二区三| 色视频成人在线观看免| 91传媒免费视频| 成人资源www网在线最新版| 激情六月婷婷久久| 国产91精品久久久久| a一级免费视频| 天天色综合av| 在线免费观看污| 久久蜜桃av一区二区天堂| 91久久嫩草影院一区二区| 日韩精品无码一区二区| 希岛爱理一区二区三区| 亚洲男人天堂网| 性生活一级大片| 亚洲爱爱视频| 欧美性猛交xxx| 日韩一级片免费视频| 毛片在线看网站| 99精品视频在线观看| 亚洲最大成人免费视频| 国产成人精品一区二区色戒| 国产亚洲一级| 欧美激情一区二区久久久| 99精品中文字幕| 国产精品手机在线播放| 亚洲精品在线三区| 97免费公开视频| 未满十八勿进黄网站一区不卡| 日韩欧美在线网址| 东北少妇不带套对白| 99热国产在线| 亚洲人妖av一区二区| 性欧美精品一区二区三区在线播放 | 亚洲天堂av中文字幕| 欧美日韩一区二区三区在线电影| 欧美日韩高清在线播放| 99免费视频观看| 中文字幕在线视频久| 午夜婷婷国产麻豆精品| www.avtt| 美女高潮视频在线看| 午夜精品久久久久影视| 欧美视频在线观看视频| 中文字字幕码一二三区| 国产原创中文av| 美女视频网站黄色亚洲| 国产精品成人一区| 亚洲天堂视频在线播放| 日韩精品乱码av一区二区| 国产精品 欧美在线| 免费看污视频的网站| 日韩电影在线一区| 国产精品爽爽ⅴa在线观看| 一区二区视频免费| 黑人精品欧美一区二区蜜桃| 91亚洲永久免费精品| 99在线无码精品入口| 国产91丝袜在线播放| 国产一区二区三区四区五区加勒比 | 五月婷中文字幕| 99在线热播精品免费| 国产日韩一区二区| 色视频在线看| 欧美国产一区二区| 中文字幕剧情在线观看一区| www在线视频| 亚洲一卡二卡三卡四卡 | 丁香花五月婷婷| 欧美一级淫片| 久久天天躁日日躁| 国产一级片免费观看| 国产亚洲综合精品| 国产精品在线看| 99热这里只有精品在线| 成人av在线电影| 欧美精品与人动性物交免费看| 成人好色电影| 夜夜亚洲天天久久| 人妻精品无码一区二区三区| 四虎国产精品成人免费影视| 精品sm在线观看| 亚洲精品色午夜无码专区日韩| 欧美日韩中文一区二区| 久久91亚洲精品中文字幕| 久久夜靖品2区| 美女诱惑一区二区| 国内精品二区| 蜜桃视频网站在线观看| 精品免费在线观看| 日韩一区二区三区不卡视频| 狠狠一区二区三区| xvideos亚洲人网站| 男人天堂中文字幕| 麻豆精品一区二区三区| 国产一区国产精品| 日本高清中文字幕在线| 婷婷夜色潮精品综合在线| 超碰超碰在线观看| 日韩美女精品| 久久99国产精品久久久久久久久| 成人免费一级片| www..com久久爱| 这里只有精品66| 欧美xo影院| 精品成人一区二区三区| 182在线观看视频| 美女久久网站| 精品产品国产在线不卡| 成年视频在线观看| 欧美性做爰猛烈叫床潮| 成人手机在线免费视频| 午夜视频一区| 96sao精品视频在线观看| 国产在线电影| 日韩欧美在线中文字幕| av av在线| 欧美三级午夜理伦三级中文幕| 国产日本欧美一区二区三区| 精品视频一二区| 岛国av一区二区三区| 少妇精品无码一区二区| 国产精品二区不卡| 国产精品视频网| 九九九伊在人线综合| 色综合久久久久久久久久久| 可以看的av网址| 自拍日韩欧美| 91亚洲精品一区| 日本成人网址| 911精品产国品一二三产区| 最新中文字幕av| 久久aⅴ国产紧身牛仔裤| 精品国产一区二区三| gogo高清午夜人体在线| 精品国产免费视频| 日韩免费一二三区| 成人黄色一级视频| 国产美女主播在线播放| 粉嫩精品导航导航| 久久久亚洲国产天美传媒修理工| 亚洲国产精品成人久久蜜臀| 一区二区成人在线观看| 老女人性生活视频| 欧美jizzhd精品欧美巨大免费| 亚洲精品日韩av| 亚洲妇熟xxxx妇色黄| 日韩一区二区在线免费观看| 青青草精品在线视频| 国产成人超碰人人澡人人澡| 性一交一乱一伧国产女士spa| eeuss国产一区二区三区四区| 久久久久国产视频| 五月婷婷六月丁香综合| 91久久国产最好的精华液| 蜜桃av乱码一区二区三区| 久久精品国产99久久6| av动漫免费观看| 日韩一区免费| 7777精品久久久久久| 欧美婷婷久久五月精品三区| 色欧美88888久久久久久影院| 中文字幕网站在线观看| 久久国产精品免费| 性生活免费观看视频| 操欧美女人视频| 青草热久免费精品视频 | 亚洲视频分类| 国产精品xxxxx| 巨大荫蒂视频欧美另类大| 日韩精品在线看片z| 日本中文在线播放| 欧美国产成人精品| 激情久久综合网| 亚洲欧洲一区| 亚洲午夜精品一区二区| 亚洲视频国产精品| 日韩美女激情视频| 岛国成人毛片| 国产视频在线一区二区| 亚洲一级黄色大片| 亚洲www啪成人一区二区麻豆| 中文字幕在线1| 国产一区二区三区免费播放| 日韩免费视频播放| 日韩欧美视频在线播放| 国产伦精品一区二区三| 日本h片久久| 久久人人爽人人| 国产福利在线| 亚洲黄色www网站| 国产精品久久久久久免费| 亚洲成av人片在线观看无码| 久久日免费视频| 成人深夜福利app| 91日韩视频在线观看| 伊人天天综合| 99热这里只有精品7| 要久久电视剧全集免费| 91视频最新| 欧美日韩va| 日本精品久久中文字幕佐佐木| 在线观看电影av| 一区二区三区视频在线| 天天干天天摸天天操| 欧美电影在线免费观看| 潘金莲一级淫片aaaaaa播放| 亚洲r级在线视频| 亚洲精品久久久久久国| 久久久99精品久久| 国产熟女高潮一区二区三区| 国产专区欧美精品| 亚洲第一狼人区| 鲁大师成人一区二区三区| 国产一级大片免费看| 97久久视频| 先锋影音网一区| 欧美一二区在线观看| 牛人盗摄一区二区三区视频| 国产精品巨作av| 99九九视频| 国产激情综合| 国产裸体写真av一区二区| 午夜欧美巨大性欧美巨大| 2018日韩中文字幕| xxxx在线视频| 欧美精品久久久久久久| 久久亚洲资源| 欧美精品激情blacked18| а√资源新版在线天堂| 久久综合电影一区| 日韩精品成人av| 亚洲欧美精品suv| 欧美成人片在线| 亚洲精品中文字| 欧美新色视频| 国产亚洲精品91在线| 国产有码在线| 一区二区三区 在线观看视| 国产一区二区影视| 一区二区三区黄色| 在线中文资源天堂| xvideos国产精品| 在线中文字幕视频观看| 色综合天天狠天天透天天伊人| 综合久久2019| 欧美激情视频一区| 超碰在线资源| 欧美一级淫片播放口| 欧美gay视频| 国产精品丝袜视频| 欧美高清xxx| 91亚洲人电影| 久本草在线中文字幕亚洲| 久久手机视频| 日本不卡二三区| 99中文字幕在线观看| 亚洲大黄网站| 欧美成人精品欧美一级乱| 久久久夜夜夜| 欧美国产日韩另类| 国产成人免费视频| 最新在线黄色网址| 久久久www成人免费无遮挡大片| 日韩av片在线免费观看| 亚洲乱码中文字幕| 久久精品久久精品久久| 一本到一区二区三区| 中文字幕无线码一区 | 污污网站免费在线观看| 精品亚洲一区二区三区| av播放在线观看| 色综合色综合久久综合频道88| 中文字幕在线视频网站| 国产欧美日韩高清| 草草视频在线一区二区| 涩涩日韩在线| 激情婷婷久久| 国产又黄又猛又粗又爽的视频| 国产精品自拍一区| 亚洲欧美在线不卡| 中文字幕日韩一区| 日韩久久精品视频| 欧美久久久久久久久久| 天天操天天射天天| 久久久精品久久久| 伊人久久综合一区二区| 91最新在线免费观看| 夜夜春成人影院| 欧美日韩dvd| 日韩精品成人一区二区三区| 天堂va欧美va亚洲va老司机| 国产人久久人人人人爽| 国产真实的和子乱拍在线观看| 欧美在线观看视频一区二区 | 久久蜜桃香蕉精品一区二区三区| 搜索黄色一级片| 在线亚洲免费视频| 欧美自拍偷拍第一页| 日韩中文在线中文网三级| 日本午夜大片a在线观看| 91在线免费观看网站| 欧美人妖在线| 成人免费视频91| 国产一区二区久久| 中字幕一区二区三区乱码| 精品成人av一区| 亚洲福利在线观看视频| 久久精品国产亚洲精品| 欧美大胆成人| 精品国产一区二区三区日日嗨| 欧美国产免费| 日韩欧美理论片| 国产精品久久久久久久久图文区| 久久精品视频7| 亚洲精品xxx| 第四色日韩影片| 亚洲综合自拍一区| 久久久久久美女精品| 亚洲黄色小视频在线观看| 久久综合资源网| www.国产高清| 日韩经典一区二区三区| 18video性欧美19sex高清| www.久久爱.cn| 亚洲欧美在线专区| 911福利视频| 亚洲欧洲三级电影| 中文字幕有码无码人妻av蜜桃| 亚洲一二在线观看| 中文在线最新版地址| 国产一区国产精品| 亚洲精品麻豆| 欲求不满的岳中文字幕| 亚洲成a人v欧美综合天堂下载| 免费观看成年人视频| 欧美极品少妇与黑人| 国产精品毛片久久久| 91动漫在线看| 99亚偷拍自图区亚洲| 日韩精品久久久久久久| 亚洲国产欧美久久| 欧美办公室脚交xxxx| 欧美久久电影| 蜜桃视频一区二区三区在线观看| 亚洲a∨无码无在线观看| 欧美放荡的少妇| 新版中文在线官网| 超碰国产精品久久国产精品99| 极品中文字幕一区| 波多野结衣影院| 91精品91久久久中77777| 国产黄在线看| 成人黄色生活片| 欧美视频四区| 青青草视频成人| 在线亚洲人成电影网站色www| 日本www在线观看| 国产成人免费电影| 一本色道久久精品| 国产成人福利在线| 欧美一区二区三区视频| 青青青草视频在线| 久久久久高清| 蜜臀久久99精品久久久久宅男| 久艹在线观看视频| 精品99一区二区| 国产精品毛片久久久久久久久久99999999| 亚洲免费视频一区| 国产不卡一区视频| 在线能看的av| 日韩最新在线视频| 99久久免费精品国产72精品九九| 黑人糟蹋人妻hd中文字幕| 中文字幕高清一区| 精品久久人妻av中文字幕| 91av国产在线| 国产精品不卡| 国产伦精品一区二区三区妓女| 欧美日韩高清在线播放| www.youjizz.com在线| 视频一区二区在线观看| 国产成人av电影| 中文字幕手机在线视频| 欧美日韩福利视频| 国产aⅴ精品一区二区三区久久| 欧美色图校园春色| 欧美在线观看视频一区二区三区| 美女尤物在线视频| 亚洲一区免费看|