精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产成人aaa| 伊人久久大香线蕉综合网站| 国产亚洲欧美精品久久久www| 666av成人影院在线观看| 国产欧美日韩亚州综合| 成人精品久久久| 久久久全国免费视频| 伊甸园亚洲一区| 这里只有精品99re| 无码播放一区二区三区| 日本在线视频观看| 99视频精品在线| 成人亲热视频网站| 亚洲第一精品在线观看| 色一区二区三区四区| 日韩女优视频免费观看| 国产综合免费视频| 制服丝袜在线播放| 国产欧美一区二区精品性| av成人午夜| 91国内精品久久久| 亚洲影视综合| 欧美成人免费观看| 午夜时刻免费入口| 另类ts人妖一区二区三区| 欧美日韩一区三区四区| 131美女爱做视频| av香蕉成人| 国产精品色在线观看| 久久精彩视频| www香蕉视频| 精品一区二区在线视频| 日韩av不卡电影| 国产成人一区二区三区影院在线| 91精品观看| 最新国产精品亚洲| 性欧美13一14内谢| 久久久久久久久久久久久久久久久久久久| 欧美高清视频在线高清观看mv色露露十八 | 成人午夜电影小说| 91中文字幕一区| 91精品在线视频观看| 日韩av电影天堂| 国产成人久久久精品一区| 精品91久久久| 亚洲中字黄色| 欧美最近摘花xxxx摘花| 国产又黄又爽又色| 国产精品日韩| 欧洲午夜精品久久久| 全部毛片永久免费看| 狠狠干成人综合网| 成年人三级视频| 99视频精品免费视频| 欧洲中文字幕国产精品| 国产又大又黑又粗免费视频| 好看的亚洲午夜视频在线| 欧美大片第1页| 青青草原国产视频| 欧美区亚洲区| 欧美多人爱爱视频网站| 久久精品一级片| 亚洲午夜一级| 91成人性视频| 日本视频免费观看| 免费在线看成人av| 91精品视频免费观看| 99久久久久久久| 国产99久久久国产精品潘金| 国产精品jizz视频| 天堂资源最新在线| 久久久精品2019中文字幕之3| 日韩动漫在线观看| 嫩草在线视频| 亚洲一区二区美女| 久久美女福利视频| 成人在线不卡| 日韩色在线观看| 国产二级一片内射视频播放| 亚洲激情播播| 丝袜情趣国产精品| 欧美性生交大片| 欧美日韩视频一区二区三区| 98精品国产自产在线观看| av片免费观看| 国产一区二区三区免费| 亚洲最大成人免费视频| 午夜视频www| 欧美激情在线一区二区| 51xx午夜影福利| 色一区二区三区| 欧美日韩一级大片网址| 亚洲熟妇一区二区| 国产精品一线天粉嫩av| 久久久精品久久久久| 久久精品性爱视频| 免费黄网站欧美| 国产美女99p| 色综合久久影院| 亚洲国产精品天堂| 99久久国产宗和精品1上映| 99视频有精品高清视频| 日韩国产激情在线| 亚洲激情图片网| 亚洲少妇诱惑| 亚洲最大的网站| 福利片在线看| 精品国产999| 手机看片国产精品| 欧洲激情综合| 欧美国产日韩免费| 亚洲无码精品在线播放| 91免费国产视频网站| 欧洲美女和动交zoz0z| 欧美电影免费观看高清完整| 日韩欧美一区二区免费| 国产三级在线观看完整版| 亚洲免费黄色| 亚洲最大成人免费视频| 欧美激情免费| 在线一区二区三区四区五区| 成年女人免费视频| 在线看片不卡| 国产日本欧美一区| 国产三级在线观看| 日韩欧美国产视频| av无码一区二区三区| 午夜视频精品| 91视频国产高清| 91在线不卡| 在线日韩av片| 美女久久久久久久久久| 亚洲精品乱码| 岛国视频一区免费观看| 巨大荫蒂视频欧美大片| 欧美日韩一区二区三区在线看| 国产伦精品一区二区三区妓女| 欧美日本不卡| 97se亚洲综合| 三级资源在线| 精品国内片67194| 久久午夜鲁丝片午夜精品| 国产一区三区三区| 做爰高潮hd色即是空| 欧美极品在线| 爱福利视频一区| 91禁在线观看| 中文字幕一区二区三区视频| www.com黄色片| 久久视频在线| 成人黄色中文字幕| 日本精品600av| 精品国产3级a| 欧美成人午夜激情在线| 久久久久无码精品国产| 国产伦精一区二区三区| 裸体大乳女做爰69| 久久久91麻豆精品国产一区| 欧美另类暴力丝袜| 免费国产精品视频| 午夜视频在线观看一区二区| 一起草在线视频| 性欧美videos另类喷潮| 亚洲高清久久网| 久久国产精品高清| 不卡av免费观看| 亚洲国产成人av在线| 欧美不卡视频在线观看| 国产午夜精品一区二区三区嫩草| 国产无套粉嫩白浆内谢的出处| 日韩欧美电影| 亚洲影视中文字幕| 国内激情视频在线观看| 国产一区二区三区直播精品电影| 中文字幕久久久久| 亚洲乱码日产精品bd| 东京热av一区| 久久综合导航| 日本一本草久p| 另类尿喷潮videofree| 国产精品91在线| 动漫一区在线| 亚洲女同精品视频| 99热这里只有精品99| 午夜激情一区二区| 99久久99久久精品免费| 成人一级黄色片| 无码内射中文字幕岛国片| 亚洲色图插插| 欧美激情第六页| 国产精品日韩精品在线播放| 午夜精品久久久久久久99热浪潮 | 好吊妞国产欧美日韩免费观看网站| 久久精品国产久精国产一老狼| 亚洲精品.www| 在线亚洲免费视频| 久久亚洲成人av| 欧美国产日韩一二三区| avtt中文字幕| 二区三区在线| 精品日韩99亚洲| 久久精品99北条麻妃| 亚洲在线免费播放| 一级黄色片网址| av在线这里只有精品| 色婷婷激情视频| 老司机精品导航| 免费拍拍拍网站| 91精品秘密在线观看| 欧美国产视频在线观看| 国产又大又黄视频| 国产欧美精品区一区二区三区| 韩国一区二区三区四区| 免费在线观看不卡| 国产肥臀一区二区福利视频| 中文在线播放一区二区 | 四虎成人免费在线| 精品久久久网站| 97在线视频人妻无码| 好吊视频一区二区三区四区| 亚洲网站在线看| 天堂成人在线视频| 日韩一区二区精品在线观看| 久操视频在线免费观看| 午夜精品福利久久久| 久久精品第一页| 亚洲精品中文在线| 国产第一页浮力| 国产精品萝li| 69xxx免费| 国产人妖乱国产精品人妖| 无码人妻精品一区二区三区温州| 国产成人av一区二区三区在线| 57pao国产成永久免费视频| 久久久精品五月天| 欧美激情精品久久久久久小说| 亚洲人成人一区二区三区| wwwjizzjizzcom| 婷婷综合伊人| 国产精选在线观看91| 亚洲国产高清在线观看| 亚洲va男人天堂| 高清久久精品| 亚洲一区久久久| 久久久久久亚洲精品美女| 成人免费视频a| 久久久久久爱| 成人做爰66片免费看网站| 都市激情亚洲| 国产欧美日韩视频一区二区三区| 国产精品videossex| 国产在线精品日韩| 久久影视三级福利片| 精品久久久久久中文字幕动漫 | 亚洲高清123| 日韩情爱电影在线观看| 一区二区视频在线播放| 久久精品亚洲人成影院| 欧美乱做爰xxxⅹ久久久| 亚洲视频福利| 国产最新免费视频| 日韩不卡一二三区| 日本在线观看视频一区| 国产福利一区二区三区视频| 国产精品嫩草69影院| fc2成人免费人成在线观看播放| 国产麻豆天美果冻无码视频| 国产亚洲午夜高清国产拍精品| 性色国产成人久久久精品| 亚洲精品自拍动漫在线| 久草国产精品视频| 欧美性猛片aaaaaaa做受| 国产普通话bbwbbwbbw| 亚洲精品一区二区三区蜜桃下载 | 亚洲AV无码一区二区三区性 | 亚洲一区二区三| 精品久久97| 日韩国产精品一区二区| 香蕉视频官网在线观看日本一区二区| 黄色a级片免费看| 亚洲欧美日韩国产一区| 亚洲免费黄色网| jvid福利写真一区二区三区| 欧美性受xxxx黑人| 亚洲午夜av在线| 男人的天堂av网站| 日韩一级黄色片| 暖暖视频在线免费观看| 久久久国产精品免费| 国产自产自拍视频在线观看| 国产日韩精品在线播放| 欧美激情99| 懂色av一区二区三区四区五区| 亚洲国产午夜| 中文字幕中文在线| www.亚洲在线| 污软件在线观看| 色噜噜夜夜夜综合网| 精品人妻一区二区三区麻豆91 | 国产精品推荐精品| 成人久久久久| 成人免费观看cn| 国产主播一区二区三区| 中文字幕免费视频| 亚洲一区二区三区视频在线 | 亚洲第一中文字幕| 国产网友自拍视频导航网站在线观看| 欧美亚洲午夜视频在线观看| 日韩在线成人| 亚洲欧美日韩国产成人综合一二三区| 亚洲激情一区| 97免费公开视频| 国产精品视频九色porn| 日韩一区二区视频在线| 日韩一区二区免费电影| 午夜在线免费观看视频| 青青草一区二区| 国产成人澳门| 国产女主播av| 精品一区二区三区的国产在线播放| 成年人网站免费在线观看| 亚洲国产aⅴ天堂久久| 国产成人精品白浆久久69| 日韩中文在线中文网三级| 成人美女大片| 久久久影院一区二区三区| 在线播放一区| 极品白嫩少妇无套内谢| 亚洲精品大片www| 精品人妻少妇AV无码专区| 久久久国产在线视频| 91视频亚洲| 超碰成人在线免费观看| 久色婷婷小香蕉久久| 日本综合在线观看| 欧美日韩国产小视频在线观看| 经典三级在线| 国产成人精品久久二区二区91| 丝袜av一区| 青青草原av在线播放| 国产亚洲精品久| 亚洲图片欧美日韩| 伊是香蕉大人久久| 99久久亚洲国产日韩美女 | 香蕉视频网站在线观看| 国产精品最新在线观看| 97精品一区二区| 中文字幕剧情在线观看| 亚洲免费在线视频| 国产精品一品二区三区的使用体验| xvideos亚洲| 国产亚洲久久| 大西瓜av在线| 91视频精品在这里| 国产字幕在线观看| 日日狠狠久久偷偷四色综合免费 | 国产精品一区二区欧美| 影音先锋亚洲精品| 日韩精品卡通动漫网站| 欧洲av一区二区嗯嗯嗯啊| 午夜激情视频在线观看| 91在线精品视频| 伊人影院久久| 亚洲做受高潮无遮挡| 欧美三日本三级三级在线播放| 日本www在线观看| 成人女人免费毛片| 在线视频日韩| 欧美日韩生活片| 欧美一级高清大全免费观看| 国产乱码在线| 欧美日韩视频在线一区二区观看视频| 日韩av在线播放中文字幕| 黑人操日本美女| 亚洲国产日韩欧美在线99| 伊人久久高清| 成人一区二区av| 久久这里都是精品| 91禁在线观看| 欧美专区在线观看| 天天av综合| 国产高清自拍视频| 777色狠狠一区二区三区| 成人女同在线观看| 四虎永久在线精品免费一区二区| 国产在线观看免费一区| 欧美 日韩 精品| 久久精品国产久精国产一老狼| 久久人人爽人人爽人人片av不| 国产免费又粗又猛又爽| 亚洲国产毛片aaaaa无费看| 国产69久久| 国产在线精品一区二区三区》| 麻豆精品一区二区av白丝在线| 久热精品在线观看| 在线观看欧美www| 老牛影视av一区二区在线观看| 亚洲精品免费一区亚洲精品免费精品一区| 亚洲电影在线免费观看| 91精品国产91久久久久游泳池 |