2017-03-03 52 views
0

嘿,我有一個應用程序,現在當APP進入onPause或onDestroy,因爲我想在這種情況發生時調用某個函數。 我試圖覆蓋活動中的onPause並在所有項目中擴展該活動,但onPause在活動之間的每次遷移(這是邏輯上的)上都被調用,但這不是我想要的。 我想如果用戶退出應用程序的onDestroy()回調將被調用來知道當用戶退出應用程序或暫停它(按home鍵) 問候,如何檢測應用程序何時最小化或退出

+0

你想要聽'onStop()'而不是'onPause()'。 –

+1

定義「用戶退出應用程序」..在android中沒有這樣的概念。 **編輯:**你可以在'onPause'中檢查'isFinishing()'也許這就是你想要的 – Selvin

+0

我的意思是退出應用程序是推壓主頁按鈕(從任何活動),或退出正常的方式使用返回鍵。在後退按鈕的情況下,很容易我可以覆蓋主活動中的onstop,但是從任何活動中按下主頁 –

回答

-1

,如果用戶按下主頁按鈕onStop()回調將被調用。

+0

如果我是另外一個活動,那麼這兩個實現的東西 –

+0

你可以創建一個基本活動,所有活動將會從那一個繼承,那樣你就可以檢測到來自任何活動的回調。 –

-3

它很簡單。

您可以通過採取字符串變量如下簡單的檢查:

static String active = "false"; 
**Thing to do :** 



if (active.equals("pause")) { 
         //do your pause task 
        } 

    @Override 
    public void onPause() { 
     super.onStart(); 
     active = "pause"; 
} 


    @Override 
    public void onStart() { 
     super.onStart(); 
     active = "start"; 
} 


    @Override 
    public void onDestroy() { 
     super.onStart(); 
     active = "destroy"; 
} 

通過檢查字符串變量,可以使之成爲可能。

在所有的活動中
+0

當整個應用程序暫停時,他正在詢問狀態。 但是,如果您正在檢查靜態字符串到活動中,這將無法正常工作,因爲onPause也會在您打開新活動時被調用 – Radon8472

0

@Override 
protected void onUserLeaveHint() { 
    super.onUserLeaveHint(); 
    Log.e("TAG", "Activity Minimized"); 
} 

在您的主要活動:

@Override 
public void onBackPressed() { 
    Log.e("TAG", "App Exit"); 
    super.onBackPressed(); 
} 

:沒有辦法,當應用程序被系統殺死(例如與任務退出檢測經理)

+0

活動A =>啓動活動B ...不會調用這些活動......但活動A會被「最小化」 – Selvin

+0

@Selvin仔細閱讀問題, –

+0

是的,我讀了......但似乎你不知道活動/應用程序生命週期......應用程序可能在第二個活動中被殺死,然後「App Exit」是從來沒有調用和應用程序是死的......唯一的答案是「沒有應用程序退出android的概念」 – Selvin

-1

所以你想知道整個應用程序什麼時候進入到Bacground,從Activity.onPause的方法告訴你何時作爲單身活動進入背景。

爲了你的需求,你可以添加

到您的Android清單。這將稱這樣的類爲「YourApplication」

public class YourApplication extends Application { 
    @Override 
    public void onCreate() {} 
    public public void onTerminate() { 
    super.onTerminate(); 
    } 
} 

例如,爲整個應用程序的「onCreate」或「onTerminate」(而不是每個單獨的活動)。 但是java文檔說你不應該相信onTerminate會在每個應用程序銷燬時被調用(請參閱:android.app.Application subclass, onTerminate is not being called)。

我認爲最好的辦法是,如果你

  • 在所有的活動中添加自己的了Methode「的onPause」和「的onResume」你的應用程序類
  • 您存儲到應用類時的onPause或的onResume被稱爲
  • 並且當您將所有活動都放在「onPause」
  • 並且您打電話給您的應用程序時,您會給您打電話給您自己的Application.onPause。的onResume當第一個活動是早在 「的onResume」
+0

'onTerminate'從來沒有調用 –

+0

比嘗試我的解決方案的第二部分。 – Radon8472

0

我用這個方法來檢測,如果應用程序切換到後臺或者被殺害

第1步: 作出這樣

public class OnClearFromRecentService extends Service { 

@Override 
public IBinder onBind(Intent intent) { 
return null; 
服務

}

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
Log.d("ClearFromRecentService", "Service Started"); 
return START_NOT_STICKY; 

}

@Override 
public void onDestroy() { 
super.onDestroy(); 
Log.d("ClearFromRecentService", "Service Destroyed"); 

}

@Override 
public void onTaskRemoved(Intent rootIntent) { 
Log.e("ClearFromRecentService", "END"); 
//Code here 
stopSelf(); 

}}

步驟2)登記的manifest.xml此服務

<service android:name="com.example.OnClearFromRecentService" android:stopWithTask="false" /> 

步驟3)然後在您的飛濺活動啓動此服務

startService(new Intent(getBaseContext(), OnClearFromRecentService.class)); 

所以,現在當你的應用程序被手動殺死,onDestroy方法將被稱爲

試試這個在你的代碼,讓我知道它的工作。 快樂編碼:)

-1

在你的應用類中實現

Application.ActivityLifecycleCallbacks

。這將實現以下ActivityLifeCycle方法:

isActivityVisible() 
onActivityCreated() 
onActivityStarted() 
onActivityResumed() 
onActivityPaused() 
onActivityStopped() 
onActivitySaveInstanceState() 
onActivityDestroyed() 

和寄存器中的OnCreate()應用類等的回調監聽:

registerActivityLifecycleCallbacks(this); 

定義應用程序類的全局變量。

私有靜態布爾isActive;

現在更改活動生命週期的覆蓋的方法是這樣的:

public static boolean isActivityVisible() { 
     return isActive; 
    } 

    @Override 
    public void onActivityCreated(Activity activity, Bundle bundle) { 

    } 

    @Override 
    public void onActivityStarted(Activity activity) { 

    } 

    @Override 
    public void onActivityResumed(Activity activity) { 
     isActive = true; 
    } 

    @Override 
    public void onActivityPaused(Activity activity) { 
     isActive = false; 
    } 

    @Override 
    public void onActivityStopped(Activity activity) { 

    } 

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

    } 

    @Override 
    public void onActivityDestroyed(Activity activity) { 
      isActive = false; 

    } 

,你可以在isActive變量的值執行所需的操作。

相關問題