Sometimes the Bitmap is released before the canvas... Fixes #292

- this is fairly scary since my view has a strong reference to it
 - so we first check to make sure that the bitmap's handle is not nullptr
This commit is contained in:
Matthew Leibowitz 2017-06-30 21:39:41 +02:00
Родитель fb0eee9f6e
Коммит 1ee8d2bcc9
2 изменённых файлов: 12 добавлений и 5 удалений

Просмотреть файл

@ -74,7 +74,7 @@ namespace SkiaSharp.Views.Android
return;
// create the bitmap data if we need it
if (bitmap == null || bitmap.Width != info.Width || bitmap.Height != info.Height)
if (bitmap == null || bitmap.Handle == IntPtr.Zero || bitmap.Width != info.Width || bitmap.Height != info.Height)
{
FreeBitmap();
bitmap = Bitmap.CreateBitmap(info.Width, info.Height, Bitmap.Config.Argb8888);
@ -141,7 +141,10 @@ namespace SkiaSharp.Views.Android
if (bitmap != null)
{
// free and recycle the bitmap data
bitmap.Recycle();
if (bitmap.Handle != IntPtr.Zero && !bitmap.IsRecycled)
{
bitmap.Recycle();
}
bitmap.Dispose();
bitmap = null;
}

Просмотреть файл

@ -1,4 +1,5 @@
using Android.Content;
using System;
using Android.Content;
using Android.Graphics;
using Android.Runtime;
using Android.Util;
@ -77,7 +78,7 @@ namespace SkiaSharp.Views.Android
private void CreateBitmap(int width, int height)
{
// create the bitmap data
if (bitmap == null || bitmap.Width != width || bitmap.Height != height)
if (bitmap == null || bitmap.Handle == IntPtr.Zero || bitmap.Width != width || bitmap.Height != height)
{
FreeBitmap();
bitmap = Bitmap.CreateBitmap(width, height, Bitmap.Config.Argb8888);
@ -89,7 +90,10 @@ namespace SkiaSharp.Views.Android
if (bitmap != null)
{
// free and recycle the bitmap data
bitmap.Recycle();
if (bitmap.Handle != IntPtr.Zero && !bitmap.IsRecycled)
{
bitmap.Recycle();
}
bitmap.Dispose();
bitmap = null;
}