亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何檢測Android應用程序何時到達后臺并返回到前臺

如何檢測Android應用程序何時到達后臺并返回到前臺

慕標琳琳 2019-06-19 15:31:01
如何檢測Android應用程序何時到達后臺并返回到前臺我正在嘗試編寫一個應用程序,當它在經過一段時間后返回到前臺時,它會做一些特定的事情。是否有一種方法可以檢測應用程序何時被發送到后臺或被帶到前臺?
查看完整描述

3 回答

?
四季花海

TA貢獻1811條經驗 獲得超5個贊

這個onPause()onResume()當應用程序被帶到后臺并再次進入前臺時,將調用方法。但是,當應用程序第一次啟動時,以及在其被殺死之前,它們也會被調用。你可以讀到更多活動.

在后臺或前臺沒有直接獲取應用程序狀態的方法,但即使是我也面臨過這個問題,并找到了解決方案onWindowFocusChangedonStop.

欲知更多詳情,請到此查詢。Android:用于檢測Android應用程序何時進入后臺并返回到前臺的解決方案,而不需要getRunningTask或getRunningAppProcess.


查看完整回答
反對 回復 2019-06-19
?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

我就是這樣解決這個問題的。它的工作前提是,在活動轉換之間使用時間引用最有可能提供充分的證據,證明應用程序已經“背景”或沒有。

首先,我使用了一個android.app.Application實例(讓我們稱它為MyApplication),它有一個計時器、一個TimerTask、一個常量來表示從一個活動到另一個活動的轉換所需要的最大毫秒數(我使用的值是2s),以及一個布爾值來表示應用程序是否“在后臺”:

public class MyApplication extends Application {

    private Timer mActivityTransitionTimer;
    private TimerTask mActivityTransitionTimerTask;
    public boolean wasInBackground;
    private final long MAX_ACTIVITY_TRANSITION_TIME_MS = 2000;
    ...

應用程序還提供了啟動和停止計時器/任務的兩種方法:

public void startActivityTransitionTimer() {
    this.mActivityTransitionTimer = new Timer();
    this.mActivityTransitionTimerTask = new TimerTask() {
        public void run() {
            MyApplication.this.wasInBackground = true;
        }
    };

    this.mActivityTransitionTimer.schedule(mActivityTransitionTimerTask,
                                           MAX_ACTIVITY_TRANSITION_TIME_MS);}public void stopActivityTransitionTimer() {
    if (this.mActivityTransitionTimerTask != null) {
        this.mActivityTransitionTimerTask.cancel();
    }

    if (this.mActivityTransitionTimer != null) {
        this.mActivityTransitionTimer.cancel();
    }

    this.wasInBackground = false;}

該解決方案的最后一部分是從所有活動的onResume()和onPace()事件中添加對這些方法的每個調用,或者最好在所有具體活動繼承的基本活動中添加一個調用:

@Overridepublic void onResume(){
    super.onResume();

    MyApplication myApp = (MyApplication)this.getApplication();
    if (myApp.wasInBackground)
    {
        //Do specific came-here-from-background code
    }

    myApp.stopActivityTransitionTimer();}@Overridepublic void onPause(){
    super.onPause();
    ((MyApplication)this.getApplication()).startActivityTransitionTimer();}

因此,在用戶只是在應用程序的活動之間導航的情況下,離開活動的onPace()啟動計時器,但是幾乎立即被輸入的新活動在達到最大轉換時間之前取消了計時器。所以黃蜂地會是假的.

另一方面,當活動從發射器、設備喚醒、電話結束等到達前臺時,很可能是在此事件之前執行的計時器任務,因此黃蜂地被設置為千真萬確.


查看完整回答
反對 回復 2019-06-19
  • 3 回答
  • 0 關注
  • 1603 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號