کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

|آموزش xamarin|آموزش چرخه عمر يك برنامه در زامارين|

دوره آموزش زامارین

آموزش گريد Grid در Xamarin


قبل از شروع، باید با موفقیت بخش های زیر را به پایان رسانده باشید

در این بخش شما می آموزید چگونه:

  • به start، sleep و یا resume یک اپلیکیشن پاسخ دهید.
  • داده ها را در حالات مختلف lifecycle نگهداری کنید.

شما میتوانید از Visual Studio 2019 ویا Visual Studio for Mac برای تولید یک اپلیکیشن ساده که یک را نمایش دهد چگونه دیتا را در حالات مختلف lifecycle نگهداری کنیم ، استفاده کنید. اپلیکیشن نهایی به شکل زیر خواهد بود:

تصویر صفحه از ورودی که ویژگی متن آن در عبور تغییرات حالت lifecycle در iOS و Android اصرار دارد

گام اول


در Visual Studio


برای کامل کردن این بخش شما باید Visual Studio 2019 (آخرین ورژن ) و Mobile development with .NET را بر سیستم خود نصب کرده باشید. علاوه بر آن آما نیاز به یک سیستم مک متصل شدن به سیستم خود دارید تا بتوانید اپلیکیشن را برای iOS بسازید. برای اطلاعات بیشتر Installing Xamarin را ببینید و برای اطلاعات بیشتر درباره اتصال Visual Studio به Mac، Pair to Mac for Xamarin.iOS development را ببینید.

1. Visual Studio را باز کنید و یک new black Xamarin.Forms app بسازید و آن را AppLifecycleTutorial نام گذاری کنید. مطمئن شوید که اپ شما از مکانیزم .NET Standard برای shared code استفاده میکند.

توجه !

برای استفاده از کد ها C# و XAML موجود در این بخش شما باید solution خود را AppLifecycleTutorial بنامید. استفاده از نام متفاوت باعث میشود شما با کپی کردن کد های موجود در این بخش به error برخورد کنید.

2. در Solution Explorer، در پروژه AppLifecycleTutorial، App.xaml را باز کنید و بر App.xaml.cs دابل کلیک کنید تا باز شود و سپس override های OnStart، OnSleep و OnResume را به شکل زیر آپدیت کنید:

    protected override void OnStart()
    {
        Console.WriteLine("OnStart");
    }
    
    protected override void OnSleep()
    {
        Console.WriteLine("OnSleep");
    }
    
    protected override void OnResume()
    {
        Console.WriteLine("OnResume");
    }

این کد متد های override در application lifecycle را باstatement Console.WriteLine آپدیت میکند که زمان invoke برای هر متد را مشخص میکند:

  • متد OnStart زمانی که اپلیکیشن آغاز شودinvoke میشود.
  • متد OnSleep زمانی که اپلیکیشن به background میرود، invoke میشود.
  • متد OnResume زمانی که اپلیکیشن از background از سر گرفته شود، invoke میشود.
توجه !

هیچ متدی برای پایان اپلیکیشن وجود ندارد. در شرایط معمولی، پایان اپلیکیشن از متد OnSleep انجام میشود.

3. در Visual Studio toolbar، دکمه start را ( که علامت مثلثی شبیه علامت play دارد) بزنید تا اپلیکیشن در شبیه ساز انتخابی شما اجرا شود. زمانی که اپلیکیشن آغاز میشو، متد OnStart، invoke میشود و خروجی در پنجره Visual Studio Output نمایش داده میشود:

    [Mono] Found as 'java_interop_jnienv_get_object_array_element'.
    OnStart
    [OpenGLRenderer] HWUI GL Pipeline

زمانی که اپلیکیشن در background است ( با ضربه زدن بر دکمه home در اندروید ویا iOS) متد OnSleep ، invoke میشود:

    [EGL_emulation] eglMakeCurrent: 0x83ee2920: ver 3 0 (tinfo 0x8357eff0)
    OnSleep
    [Mono] Image addref System.Runtime.Serialization[0x83ee19c0] -> System.Runtime.Serialization.dll[0x83f57b00]: 2

زمانی که اپلیکیشن ازbackground از سر گرفته میشود( با انتخاب ایکون اپلیکیشن در iOS و یا دکمه Overview در اندروید و انتخاب اپلیکیشن AppLifeCycleTutorial ) متد OnResume، invoke میشود:

    Thread finished:  #5
        OnResume
        [EGL_emulation] eglMakeCurrent: 0x83ee2920: ver 3 0 (tinfo 0x8357eff0)

توجه !

این تکه های کد، مثالی از خروجی زمانی که اپلیکیشن در اندروید اجرا میشود، نشان میدهد.

در Visual Studio for Mac


برای کامل کردن این tutorial شما باید Visual Studio for Mac(آخرین ورژن) به همراه support platform برای Android و iOS را نصب کرده باشید. علاوه بر آن، شما نیاز باید Xcode(آخرین ورژن) را نیز نصب کنید. برای اطلاعات بیشتر درباره نصب پلتفرم Xamarin، Installing Xamarin را ببینید.

1. Visual Studio for Mac را باز کنید و یک new black Xamarin.Forms app بسازید و آن را AppLifecycleTutorial نام گذاری کنید. مطمئن شوید که اپ شما از مکانیزم .NET Standard برای shared code استفاده میکند.

توجه !

برای استفاده از کد ها C# و XAML موجود در این بخش شما باید solution خود را AppLifecycleTutorial بنامید. استفاده از نام متفاوت باعث میشود شما با کپی کردن کد های موجود در این بخش به error برخورد کنید.

2. در Solution Pad، در پروژه AppLifecycleTutorial، App.xaml را باز کنید و بر App.xaml.cs دابل کلیک کنید تا باز شود و سپس override های OnStart، OnSleep و OnResume را به شکل زیر آپدیت کنید:

    protected override void OnStart()
    {
        Console.WriteLine("OnStart");
    }
    
    protected override void OnSleep()
    {
        Console.WriteLine("OnSleep");
    }
    
    protected override void OnResume()
    {
        Console.WriteLine("OnResume");
    }

این کد متد های override در application lifecycle را باstatement Console.WriteLine آپدیت میکند که زمان invoke برای هر متد را مشخص میکند:

  • متد OnStart زمانی که اپلیکیشن آغاز شودinvoke میشود.
  • متد OnSleep زمانی که اپلیکیشن به background میرود، invoke میشود.
  • متد OnResume زمانی که اپلیکیشن از background از سر گرفته شود، invoke میشود.
توجه !

هیچ متدی برای پایان اپلیکیشن وجود ندارد. در شرایط معمولی، پایان اپلیکیشن از متد OnSleep انجام میشود.

3. در Visual Studio for Mac toolbar، دکمه start را ( که علامت مثلثی شبیه علامت play دارد) بزنید تا اپلیکیشن در شبیه ساز انتخابی شما اجرا شود. زمانی که اپلیکیشن آغاز میشو، متد OnStart، invoke میشود و خروجی در پنجره Visual Studio Output نمایش داده میشود:

    2019-02-11 12:05:23.164761+0000 AppLifecycleTutorial.iOS[4089:361037] SecTaskLoadEntitlements failed error=22 cs_flags=200, pid=4089
    2019-02-11 12:05:23.165297+0000 AppLifecycleTutorial.iOS[4089:361037] SecTaskCopyDebugDescription: AppLifecycleTuto[4089]/0#-1 LF=0
    2019-02-11 12:05:23.685430+0000 AppLifecycleTutorial.iOS[4089:361037] OnStart

زمانی که اپلیکیشن در background است ( با ضربه زدن بر دکمه home در اندروید ویا iOS) متد OnSleep ، invoke میشود:

    2019-02-11 12:06:12.394301+0000 AppLifecycleTutorial.iOS[4089:361037] OnSleep
    Thread started:  #3
    Thread started:  #4
    Thread started:  #5
    Thread started:  #6
    2019-02-11 12:06:13.056968+0000 AppLifecycleTutorial.iOS[4089:361037] SecTaskLoadEntitlements failed error=22 cs_flags=200, pid=4089
    2019-02-11 12:06:13.057264+0000 AppLifecycleTutorial.iOS[4089:361037] SecTaskCopyDebugDescription: AppLifecycleTuto[4089]/0#-1 LF=0

زمانی که اپلیکیشن ازbackground از سر گرفته میشود( با انتخاب ایکون اپلیکیشن در iOS و یا دکمه Overview در اندروید و انتخاب اپلیکیشن AppLifeCycleTutorial ) متد OnResume، invoke میشود:

    2019-02-11 12:07:10.321905+0000 AppLifecycleTutorial.iOS[4130:365695] SecTaskLoadEntitlements failed error=22 cs_flags=200, pid=4130
    2019-02-11 12:07:10.322557+0000 AppLifecycleTutorial.iOS[4130:365695] SecTaskCopyDebugDescription: AppLifecycleTuto[4130]/0#-1 LF=0
    2019-02-11 12:07:17.110938+0000 AppLifecycleTutorial.iOS[4130:365695] OnResume

توجه !

این تکه های کد، مثالی از خروجی زمانی که اپلیکیشن در iOS اجرا میشود، نشان میدهد.

گام دوم


Subclassهای اپلیکیشن دارای یک dictionary properties static هستند که میتواند دیتا را در حالات مختلف lifecycle نگهداری کند. این dictionary از یک کلید string برای ذخیره مقدار یک شی استفاده میکند. Dictionary به شکل اتوماتیک در دستگاه ذخیره میشود و زمانی که اپلیکیشن آغاز شود Repopulate میشود.

توجه !

Properties dictionary تنها میتواند نوع های اولیه (primitive types) را برای ذخیره ، مرتب کند.


در Visual Studio


1. در Solution Exlplorer ، در پروژه AppLifecycleTutorial، App.xaml را باز کنید و بر App.xaml.cs دابل کلیک کنید تا باز شود و سپس تمام کد های موجود در آن را حذف کرده و کد زیر را جایگزین کنید:

    using System;
    using Xamarin.Forms;
    
    namespace AppLifecycleTutorial
    {
        public partial class App : Application
        {
            const string displayText = "displayText";
    
            public string DisplayText { get; set; }
    
            public App()
            {
                InitializeComponent();
    
                MainPage = new MainPage();
            }
    
            protected override void OnStart()
            {
                Console.WriteLine("OnStart");
    
                if (Properties.ContainsKey(displayText))
                {
                    DisplayText = (string)Properties[displayText];
                }
            }
    
            protected override void OnSleep()
            {
                Console.WriteLine("OnSleep");
                Properties[displayText] = DisplayText;
            }
    
            protected override void OnResume()
            {
                Console.WriteLine("OnResume");
            }
        }
    }


این کد صفت DisplayText و یک displayText ثابت را تعریف میکند. زمانی که اپلیکیشن در background است و یا بسته شده است، override متد OnSleep ، مقدار صفت DisplayText را به Properties dictionary، در مقابل کلیدواژه Properties، اضافه میکند. زمانی که اپلیکیشن آغاز میشود، Propertise Dictionary حاوی کلید های displayText میباشد، مقدار کلید در صفت DisplayText ذخیره شده است.

توجه !

همواره پیش از دسترسی به Dictionary Properties از وجود کلید مطمئن شوید تا به error های غیر منتظره برخورد نکنید.

نیازی به ذخیره دیتا از Dictionary Properties درOverload متد OnResume ، نیست. زیرا زمانی که اپلیکیشن در background است، اپلیکیشن و حالت آن هنوز در حافظه است.

2. در Solution Explorer، پروژه AppLiecycleTutorial، بر MainPage.xaml دابل کلیک کنید تا باز شود و سپس کد های موجود در آن را حذف کنید و کد زیر را جایگزین کنید:

    
    
        
            
        
    

این کد UI صفحه را تعریف میکند که شامل یک Entry در یک StackLayout میباشد. صفت Entry.Placeholder، place holder متن را زمانی که Entry برای اولین با نمایش داده میشود و event handler به نام OnEntryCompleted با event Completed ثبت شده است. علاوه بر این، Entry دارای یک name است که با صفت x:Name مشخص میشود. این به فایل های Code-behind اجازه میدهد به شی Entry، با استفاده از نام آن ، دسترسی پیدا کنند.

3. در Solution Explorer، در پروژه AppLifecycleTutorial، MainPage.xaml را باز کنید و بر MainPage.xaml.cs دابل کلیک کنید تا باز شود و سپس override زیر را برای متد OnAppearing و OnEntryCompleted event handler به کلاس اضافه کنید:

    protected override void OnAppearing()
    {
        base.OnAppearing();
    
        entry.Text = (Application.Current as App).DisplayText;
    }
    
    void OnEntryCompleted(object sender, EventArgs e)
    {
        (Application.Current as App).DisplayText = entry.Text;
    }

متد OnAppearig مقدار صفت App.DisplayText را بازیابی میکند و آن مقدار را در صفت Text از Entry میگذارد.

توجه !

OnAppearing method override پس از ظاهر شدن ContentPage، دقیقا پیش از اینکه دیده شود، اجرا میشود. درنتیجه، مکان مناسبی برای قرار دادن محتوای Xamarin.Forms views میباشد.

زمانی که متن در Entry نهایی میشود، متد OnEntryCompleted ، با return key، اجرا میشود و متن Entry در صفت App.DisplayText ذخیره میشود.

4. در Visual Studio toolbar دکمه start را ( که علامتی مثلثی شبیه به علامت play دارد) بزنید تا اپلیکیشن در دستگاه شبیه ساز انتخابی شما اجرا شود.

متنی در Entry وارد کنید و return key را بزنید، سپس اپلیکیشن را بهbackground ببرید( با زدن دکمه Home) تا متد OnSleep ، invoke شود.

در نهایت اپلیکیشن را دوباره در Visual Studio آغاز کنید و مشاهده کنید متنی که قبلا در Entry بود، دوباره در Entry قرار میگیرد:

تصویر صفحه از ورودی که ویژگی متن آن در عبور تغییرات حالت lifecycle در iOS و Android اصرار دارد

در Visual Studio for Mac


1. در Solution Pad ، در پروژه AppLifecycleTutorial، App.xaml را باز کنید و بر App.xaml.cs دابل کلیک کنید تا باز شود و سپس تمام کد های موجود در آن را حذف کرده و کد زیر را جایگزین کنید:

    
    using System;
    using Xamarin.Forms;
    
    namespace AppLifecycleTutorial
    {
        public partial class App : Application
        {
            const string displayText = "displayText";
    
            public string DisplayText { get; set; }
    
            public App()
            {
                InitializeComponent();
    
                MainPage = new MainPage();
            }
    
            protected override void OnStart()
            {
                Console.WriteLine("OnStart");
    
                if (Properties.ContainsKey(displayText))
                {
                    DisplayText = (string)Properties[displayText];
                }
            }
    
            protected override void OnSleep()
            {
                Console.WriteLine("OnSleep");
                Properties[displayText] = DisplayText;
            }
    
            protected override void OnResume()
            {
                Console.WriteLine("OnResume");
            }
        }
    }



این کد صفت DisplayText و یک displayText ثابت را تعریف میکند. زمانی که اپلیکیشن در background است و یا بسته شده است، override متد OnSleep ، مقدار صفت DisplayText را به Properties dictionary، در مقابل کلیدواژه Properties، اضافه میکند. زمانی که اپلیکیشن آغاز میشود، Propertise Dictionary حاوی کلید های displayText میباشد، مقدار کلید در صفت DisplayText ذخیره شده است.

توجه !

همواره پیش از دسترسی به Dictionary Properties از وجود کلید مطمئن شوید تا به error های غیر منتظره برخورد نکنید.

نیازی به ذخیره دیتا از Dictionary Properties درOverload متد OnResume ، نیست. زیرا زمانی که اپلیکیشن در background است، اپلیکیشن و حالت آن هنوز در حافظه است.

2. در Solution Pad، پروژه AppLiecycleTutorial، بر MainPage.xaml دابل کلیک کنید تا باز شود و سپس کد های موجود در آن را حذف کنید و کد زیر را جایگزین کنید:

    
    
        
            
        
    

3. در Solution Pad، در پروژه AppLifecycleTutorial، MainPage.xaml را باز کنید و بر MainPage.xaml.cs دابل کلیک کنید تا باز شود و سپس override زیر را برای متد OnAppearing و OnEntryCompleted event handler به کلاس اضافه کنید:

    protected override void OnAppearing()
    {
        base.OnAppearing();
    
        entry.Text = (Application.Current as App).DisplayText;
    }
    
    void OnEntryCompleted(object sender, EventArgs e)
    {
        (Application.Current as App).DisplayText = entry.Text;
    }

متد OnAppearig مقدار صفت App.DisplayText را بازیابی میکند و آن مقدار را در صفت Text از Entry میگذارد.

توجه !

OnAppearing method override پس از ظاهر شدن ContentPage، دقیقا پیش از اینکه دیده شود، اجرا میشود. درنتیجه، مکان مناسبی برای قرار دادن محتوای Xamarin.Forms views میباشد.

زمانی که متن در Entry نهایی میشود، متد OnEntryCompleted ، با return key، اجرا میشود و متن Entry در صفت App.DisplayText ذخیره میشود.

4. در Visual Studio for Mac toolbar دکمه start را ( که علامتی مثلثی شبیه به علامت play دارد) بزنید تا اپلیکیشن در دستگاه شبیه ساز انتخابی شما اجرا شود.

متنی در Entry وارد کنید و return key را بزنید، سپس اپلیکیشن را بهbackground ببرید( با زدن دکمه Home) تا متد OnSleep ، invoke شود.

در نهایت اپلیکیشن را دوباره در Visual Studio آغاز کنید و مشاهده کنید متنی که قبلا در Entry بود، دوباره در Entry قرار میگیرد:

تصویر صفحه از ورودی که ویژگی متن آن در عبور تغییرات حالت lifecycle در iOS و Android اصرار دارد

گام سوم


تبريك

شما با موفقیت این بخش را به اتمام رساندید و آموختید:

  • به start، sleep و یا resume یک اپلیکیشن پاسخ دهید.
  • داده ها را در حالات مختلف lifecycle نگهداری کنید.
1399/02/01 1858 520
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...