2016-04-25 37 views
0

我發現瞭如何在應用程序轉到後臺跟蹤,像這樣的一些問題/回答: Run code when Android app is closed/sent to backgroundAndroid與Xamarin - 如何在用戶關閉應用程序時運行代碼?

但我需要運行僅當用戶實際關閉應用程序的代碼。

爲了舉例說明:

  1. 用戶點擊在概述按鈕;
  2. Android將打開最近應用程序的縮略圖圖像列表;
  3. 用戶滑動我的應用程序的縮略圖以將其刪除(這裏是我需要運行代碼的位置)。

我試圖給OnDestroy()方法添加一些代碼,但是當我執行上述步驟時似乎沒有調用它。我知道代碼的工作原理,因爲我已經完成了一個測試,在OnCreate()開始時我打電話給Finish(),然後OnDestroy()被調用,所以我的代碼。

我使用Xamarin和MvvmCross,但也歡迎Java代碼。

回答

0

本機android開發人員在這裏,我不確定Xamarin是否以某種方式擴展了本機框架,使其成爲可能,但在本機上它目前不受支持。

當應用程序被殺死時,操作系統不一定會調用活動'onDestroy方法,但當活動被終止時。這是非常不同的,因爲應用程序可以被殺死,而不需要調用活動'onDestroyonDestroy可以被調用而不會中止應用程序。

我建議查找服務和報警管理器,以實際跟蹤何時發生這種情況,結合onDestroy和方法。在這種情況下,精度將會達到您想要的水平。您可以每分鐘調用一次警報來檢查它,或者在自己的進程中運行後臺服務,該服務在應用程序被終止後保持活動狀態。

有一個comprehensive discussion about this in another question。這是關於本機代碼的,但是對問題的解釋對於理解框架的限制非常有用。

1

實現並註冊的Android.Content.IComponentCallbacks2實例和監聽TrimMemory.UiHidden事件:

LifecycleCallbacks

public class LifecycleCallbacks : Java.Lang.Object, Android.Content.IComponentCallbacks2 
{ 
    public void OnTrimMemory(TrimMemory level) 
    { 
     if (level == TrimMemory.UiHidden) 
     { 
      Console.WriteLine("Backgrounded..."); 
     } 

    } 

    public void OnConfigurationChanged(Configuration newConfig) 
    { 
    } 

    public void OnLowMemory() 
    { 
    } 
} 

註冊的LifecycleCallbacks一個實例:

[Activity (Label = "MyApp", MainLauncher = true)] 
public class MainActivity : Activity 
{ 
    protected override void OnCreate (Bundle savedInstanceState) 
    { 
     base.OnCreate (savedInstanceState); 

     // ... 

     Application.RegisterComponentCallbacks(new LifecycleCallbacks()); 

     // ... 
    } 
} 
相關問題