Android 監(jiān)聽?wèi)?yīng)用前/后臺切換

前言

這周接到一個(gè)需求,需要在應(yīng)用從后臺切換到前臺時(shí),展示我們的廣告。展示頁面其實(shí)可以復(fù)用以前的開屏廣告頁,唯一的問題就是如何監(jiān)聽?wèi)?yīng)用從后臺切到了前臺。

正文

在眾多方法中,我采用了以下這種方式。廢話不多說,咱們直接看代碼:

//自定義Application類
public class MyApplication extends Application 

在清單文件中聲明

 <application
        android:name=".MyApplication"   
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

在MyApplication里重寫onTrimMemory方法:

    @Override
    public void onTrimMemory(int level) {
        super.onTrimMemory(level);
        if (level == TRIM_MEMORY_UI_HIDDEN) {
            isBackGround = true;
            Log.i("bo", "APP遁入后臺");
        }
    }

onTrimMemory方法為開發(fā)者提供了一個(gè)合適的時(shí)機(jī),用來釋放掉一些不用的資源,從而讓我們的應(yīng)用在后臺存活更長時(shí)間。其中l(wèi)evel參數(shù)就代表我們的應(yīng)用當(dāng)前在內(nèi)存中的狀態(tài),TRIM_MEMORY_UI_HIDDEN代表應(yīng)用從前臺切到了后臺。這個(gè)時(shí)候我們便可以標(biāo)記應(yīng)用切換到了后臺。

接下來需要監(jiān)聽?wèi)?yīng)用在什么時(shí)候回到了前臺:

registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
            }

            @Override
            public void onActivityStarted(Activity activity) {
            }

            @Override
            public void onActivityResumed(Activity activity) {
                if (isBackGround) {
                    isBackGround = false;
                    Log.i("bo", "APP回到了前臺");
                }
            }

            @Override
            public void onActivityPaused(Activity activity) {
            }

            @Override
            public void onActivityStopped(Activity activity) {
            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
            }

            @Override
            public void onActivityDestroyed(Activity activity) {
            }
        });

我們使用registerActivityLifecycleCallbacks來監(jiān)聽所有Activity的生命周期回調(diào),并在onActivityResumed方法中進(jìn)行判斷:調(diào)用了Activity的onResume方法,并且已經(jīng)標(biāo)記為后臺狀態(tài),那么就可以判斷APP回到了前臺。

以下是log輸出:

Log輸出.png

以上就是我對這個(gè)問題的解決方案。

結(jié)尾

這個(gè)方案要求API大于等于14,因?yàn)閞egisterActivityLifecycleCallbacks方法要求API在14以上。
最后,如有錯(cuò)誤,歡迎大家指正。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,226評論 25 708
  • 本文出自 Eddy Wiki ,轉(zhuǎn)載請注明出處:http://eddy.wiki/interview-androi...
    eddy_wiki閱讀 3,380評論 0 20
  • 我的學(xué)校是人民小學(xué),那里設(shè)施完備、風(fēng)景優(yōu)美、環(huán)境宜人,是學(xué)習(xí)的好地方。 走進(jìn)校門,首先映入眼簾的是一個(gè)大大的體育運(yùn)...
    小木121閱讀 264評論 0 1
  • 老婆又買了一套房子,小房子,學(xué)區(qū)房,只有67平米。因?yàn)檫@件事,我們還吵了一架。這個(gè)房子買的太倉促了,老婆為了買房借...
    Alpha_Omega閱讀 284評論 0 1

友情鏈接更多精彩內(nèi)容