国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

如何判斷Android應(yīng)用置于前后臺

這篇具有很好參考價值的文章主要介紹了如何判斷Android應(yīng)用置于前后臺。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

? ? ? ? 項目開發(fā)過程中總會遇到判斷應(yīng)用程序是否置于后臺或者從后臺切換到前臺。往往在切換的時候應(yīng)用會通過請求接口更新頁面展示數(shù)據(jù)或者提示廣告信息等相關(guān)操作。因此對于開發(fā)者來說判斷應(yīng)用程序前后臺狀態(tài)還是比較重要的。下面記錄兩種判斷應(yīng)用前后臺狀態(tài)的方法。

????????第一種通過使用ActivityManager管理器獲取運(yùn)行中的進(jìn)程集合,通過循環(huán)進(jìn)程集合找到應(yīng)用程序進(jìn)程信息類(RunningAppProcessInfo)。通過RunningAppProcessInfo中的importance屬性數(shù)據(jù)判斷是否等于100,如果等于代表當(dāng)前進(jìn)程處于前臺狀態(tài),反之后臺狀態(tài)。代碼如下:

    public static boolean isBackground(Context context) {
        ActivityManager activityManager = (ActivityManager)context.getSystemService("activity");
        List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
        Iterator var3 = appProcesses.iterator();

        RunningAppProcessInfo appProcess;
        do {
            if (!var3.hasNext()) {
                return false;
            }

            appProcess = (RunningAppProcessInfo)var3.next();
        } while(!appProcess.processName.equals(context.getPackageName()));

        if (appProcess.importance == 100) {
            TTLog.i("前臺", new Object[]{appProcess.processName});
            return false;
        } else {
            TTLog.i("后臺", new Object[]{appProcess.processName});
            return true;
        }
    }

????????第二種方法比較復(fù)雜是通過監(jiān)聽?wèi)?yīng)用程序中Activity生命周期狀態(tài)判斷是否置于前后臺。監(jiān)聽Activity生命狀態(tài)并不是要把所有的Activity都記錄下在。而是通過Application中提供的registerActivityLifecycleCallbacks方法監(jiān)聽Activity生命周期,該方法需要傳遞ActivityLifecycleCallbacks接口實現(xiàn)類的對象。該接口中有對應(yīng)Activity生命周期的回調(diào)方法。例如onCreate->onActivityCreated;onStart-->onActivityStarted等。通過這些回調(diào)方法就可以判斷當(dāng)前是否有Activity頁面處于運(yùn)行中的狀態(tài),如果是運(yùn)行中就代表當(dāng)前應(yīng)用處于前臺狀態(tài),反之如果沒有Activity處于運(yùn)行中就代表處于后臺狀態(tài)??梢酝ㄟ^單例的形式實現(xiàn)實現(xiàn)ActivityLifecycleCallbacks。代碼如下:

object ActivityLifecycleCallbacker : Application.ActivityLifecycleCallbacks {
    //運(yùn)行的Activity個數(shù)
    private var liveActivityCount = 0

    //是否處于壓后臺狀態(tài)
    private var mIsOnBackground = false

    //壓后臺的回調(diào)
    private var mOnBackgroundCallback: OnBackgroundCallback? = null
    /**
     * 是否處在壓后臺
     */
    fun isOnBackground(): Boolean {
        return mIsOnBackground
    }

    /**
     * 壓后臺的回調(diào)處理
     */
    interface OnBackgroundCallback {
        //壓后臺時觸發(fā)
        fun handleOnBackground(activity: Activity?)
        //從后臺回到前臺時觸發(fā)
        fun handleOnForeground(activity: Activity?)
    }

    /**
     * 設(shè)置壓后臺的回調(diào)處理
     * @param aCallback 回調(diào)
     */
    fun setOnBackgroundCallback(aCallback: OnBackgroundCallback?) {
        mOnBackgroundCallback = aCallback
    }

    /**
     * 運(yùn)行Activity個數(shù)
     */
    fun getLiveActivityCount(): Int {
        return liveActivityCount
    }

    override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
    }

    override fun onActivityStarted(activity: Activity?) {
        liveActivityCount++
        if (mIsOnBackground) { //從壓后臺回來
            mOnBackgroundCallback?.handleOnForeground(activity)
            //重置后臺標(biāo)識
            mIsOnBackground = false
        }
    }

    override fun onActivityResumed(activity: Activity) {
    }

    override fun onActivityPaused(activity: Activity?) {}

    override fun onActivityStopped(activity: Activity?) {
        liveActivityCount--
        if (liveActivityCount == 0) {//處于后臺
            mOnBackgroundCallback?.handleOnBackground(activity)
            mIsOnBackground = true
        }
    }

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

    override fun onActivityDestroyed(activity: Activity) {
        mIsOnBackground = false
    }
}

需要注意的是上述代碼中需要注冊onBackgroundCallback接口實現(xiàn)類對象。通過該接口回調(diào)方法獲得放置后臺狀態(tài)mIsOnBackground。如果mIsOnBackground為true代表置于后臺,如果為false代表置于前臺。置于后臺的回調(diào)方法需要判斷l(xiāng)iveActivityCount的個數(shù)是否為0,如果為0代表沒有活躍的Activity頁面說明應(yīng)用置于后臺。通過上述方式獲取到的前后臺狀態(tài)更為準(zhǔn)確。文章來源地址http://www.zghlxwxcb.cn/news/detail-520019.html

到了這里,關(guān)于如何判斷Android應(yīng)用置于前后臺的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 關(guān)于單片機(jī)的前后臺系統(tǒng)

    關(guān)于單片機(jī)的前后臺系統(tǒng)

    單片機(jī)裸機(jī)系統(tǒng),通常又被稱為前后臺系統(tǒng)。 百度百科中,對前后臺系統(tǒng)有一段解釋: ?前后臺系統(tǒng),即計算機(jī)前后臺系統(tǒng),早期的嵌入式系統(tǒng)中沒有操作系統(tǒng)的概念,程序員編寫嵌入式程序通常直接面對裸機(jī)及裸設(shè)備,在這種情況下,通常把嵌入式程序分成兩部分,即前

    2024年02月12日
    瀏覽(22)
  • 一個面向MCU的小型前后臺系統(tǒng)

    一個面向MCU的小型前后臺系統(tǒng)

    JxOS面向MCU的小型前后臺系統(tǒng),提供消息、事件等服務(wù),以及軟件定時器,低功耗管理,按鍵,led等常用功能模塊。 gitee倉庫地址為(復(fù)制到瀏覽器打開): 在此基礎(chǔ)上實現(xiàn)了基于433的簡單無線網(wǎng)絡(luò)功能。 此項目的 設(shè)計思想 是:功能模塊與硬件高度解耦,提高代碼模塊的可

    2024年02月09日
    瀏覽(19)
  • 【jenkins部署】一文弄懂自動打包部署(前后臺)

    【jenkins部署】一文弄懂自動打包部署(前后臺)

    軟件開發(fā)中,會分多個環(huán)境,開發(fā)環(huán)境、測試環(huán)境、預(yù)發(fā)布環(huán)境、生產(chǎn)環(huán)境,軟件部署如果是純?nèi)斯ひ粋€個通過jar的方式, 會有如下問題: 服務(wù)器過多,容易出錯 修改配置,可能會存在未修改到位的情況 服務(wù)器部署權(quán)限一般只有開發(fā)服務(wù)器人才有權(quán)限,涉及到服務(wù)器的安全

    2024年02月08日
    瀏覽(23)
  • 大文件分片上傳的實現(xiàn)【前后臺完整版】

    在一般的產(chǎn)品開發(fā)過程中,大家多少會遇到上傳視頻功能的需求,往往我們采用的都是對視頻大小進(jìn)行限制等方法,來防止上傳請求超時,導(dǎo)致上傳失敗。這時候可能將視頻分片上傳可以對你的項目有一個小小的體驗優(yōu)化。 本片文章前端是vue,后臺基于PHP進(jìn)行的分片上傳,需

    2024年02月10日
    瀏覽(22)
  • centos配置nginx+node前后臺+mongodb

    centos 環(huán)境下安裝

    2024年02月11日
    瀏覽(23)
  • 前后臺傳遞參數(shù)中出現(xiàn)+、-、=、%、&、#、空格等字符的解決思路

    一、描述問題 前后臺傳輸數(shù)據(jù)多樣化,可能會出現(xiàn)特殊字符的情況,比如傳遞的參數(shù)中含有+、空格、=、%等字符,遇到這樣的情況我們該如何解決呢? 二、問題分析 前后臺特殊字符對其編碼,原因可能是這些特殊字符對于前后臺傳遞參數(shù)的時候,有其特殊的用途,比如url中

    2024年01月17日
    瀏覽(20)
  • 【SpringMVC】統(tǒng)一異常處理 前后臺協(xié)議聯(lián)調(diào) 攔截器

    【SpringMVC】統(tǒng)一異常處理 前后臺協(xié)議聯(lián)調(diào) 攔截器

    1. 問題描述 在講解這一部分知識點之前,我們先來演示個效果,修改BookController類的 getById 方法 重新啟動運(yùn)行項目,使用PostMan發(fā)送請求,當(dāng)傳入的id為1,則會出現(xiàn)如下效果: 前端接收到這個信息后和之前我們約定的格式不一致,這個問題該如何解決? 在解決問題之前,我們

    2024年02月11日
    瀏覽(23)
  • 一套前后臺全部開源的H5商城送給大家

    博主給大家推薦一套全部開源的H5電商項目 waynboot-mall 。由博主在2020年開發(fā)至今,已有三年之久。那時候網(wǎng)上很多的H5商城項目都是半開源版本,要么沒有H5前端代碼,要么需要加群咨詢,屬實惡心。于是博主決定自己開發(fā)一套完整的移動端H5商城,包含一個管理后臺、一個前

    2024年02月02日
    瀏覽(23)
  • 【SpringMVC】統(tǒng)一異常處理 前后臺協(xié)議聯(lián)調(diào) 攔截器(文末贈書)

    【SpringMVC】統(tǒng)一異常處理 前后臺協(xié)議聯(lián)調(diào) 攔截器(文末贈書)

    1. 問題描述 在講解這一部分知識點之前,我們先來演示個效果,修改BookController類的 getById 方法 重新啟動運(yùn)行項目,使用PostMan發(fā)送請求,當(dāng)傳入的id為1,則會出現(xiàn)如下效果: 前端接收到這個信息后和之前我們約定的格式不一致,這個問題該如何解決? 在解決問題之前,我們

    2024年02月09日
    瀏覽(26)
  • 基于springBoot + Vue電影售票系統(tǒng)分前后臺【完整源碼+數(shù)據(jù)庫】

    基于springBoot + Vue電影售票系統(tǒng)分前后臺【完整源碼+數(shù)據(jù)庫】

    本項目是一套基于springBoot + Vue的電影售票系統(tǒng),主要針對計算機(jī)相關(guān)專業(yè)的正在做bishe的學(xué)生和需要項目實戰(zhàn)練習(xí)的Java學(xué)習(xí)者。 包含:項目源碼、數(shù)據(jù)庫腳本等,該項目可以直接作為bishe使用。 項目都經(jīng)過嚴(yán)格調(diào)試,確??梢赃\(yùn)行! 后端:SpringBoot+Mysql+MyBatis+maven 前端:Vu

    2024年02月03日
    瀏覽(37)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包