2017-09-11 18 views
1

我在Xamarin Forms中使用Plugin.CrossMedia,有時在照相機拍攝照片後,應用程序會轉回主頁面,並且所有工作都會丟失頁面,包括圖像。這發生在Android(5和6)上。CrossMedia.Camera在拍攝照片後備份到主頁

我這樣做:

if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported) 
{ 
    return; 
} 

var photoName= "photo.png"; 
var sizeImg= Plugin.Media.Abstractions.PhotoSize.Small; 
var mediaOptions = new Plugin.Media.Abstractions.StoreCameraMediaOptions 
{ 
    SaveToAlbum = false, 
    AllowCropping = true, 
    DefaultCamera = Plugin.Media.Abstractions.CameraDevice.Rear, 
    Name = photoName, 
    PhotoSize = sizeImg 
}; 

using (var file = await CrossMedia.Current.TakePhotoAsync(mediaOptions)) 
{ 
    if (file == null) 
     return; 

    var filePath = file.Path; 

     ... move image 

} 
+0

操作系統被殺害的過程來釋放相機的使用,其中操作系統的內存? Android的? – SushiHangover

+0

在Android上關閉它 –

回答

3

當操作系統需要內存使用相機來執行你的應用程序的要求,在這種情況下,有一個活動得到重新啓動是在低端設備屢見不鮮;有限的內存,Android One和新的基於奧利奧的Android Go設備。

Xamarin.Forms內運行的單個Activity(通常爲模板創建MainActivity)及其應用&頁生命週期事件內的活動生命週期事件映射

Xamarin.Forms'終止:

注意這裏是應用程序終止的方法。在正常情況下(即不是崩潰),應用程序終止將從OnSleep狀態發生,而沒有任何額外的通知給您的代碼。

回覆:Forms' Lifecycle Methods

一些做法如下:

  • 簡介您的應用程序的內存使用情況

  • 確保您釋放那些不再需要的資源,圖像通常是應用內最大的內存消費者

  • 通過創建虛擬Service並從Android OS請求ImportanceReason.ServiceInUse來啓動外部應用程序時,請求爲您的應用程序提供更高的重要性。

    Note: This does not prevent the OS from terminating your process, 
         it provides another hint to the OS... 
    
  • 當打開外部應用程序,如攝像頭,通過自定義選項卡瀏覽器(Xamarin.Auth),等等,並且用戶期待返回到相同的狀態,確保你已經堅持你的應用程序的狀態,你可以恢復它。

  • 閱讀上的Android's Activity Lifecycle所以當活動的OnCreate被調用,您知道您的應用程序正在重新啓動,你可以檢索並通過一些應用程序特定的狀態信息到你的表單應用程序子類,確定什麼形式的導航堆棧Bundle重建並重新打開的頁面,即:

    if (bundle is null) 
        LoadApplication(new App()); 
    else 
    { 
        var restoreAppState = GetPriorAppState(); 
        LoadApplication(new App(restoreAppState.Restore2Page)); 
    } 
    
+0

感謝您的回答,這個問題只發生在較低的設備上。我會盡力提高性能。 –