مدیریت وضعیت WebView

WebView یک کامپوننت رایج است که سیستم پیشرفته‌ای برای مدیریت وضعیت (state management) ارائه می‌دهد. یک WebView باید وضعیت (state) و موقعیت اسکرول (scroll position) خود را در طول تغییرات پیکربندی حفظ کند. یک WebView می‌تواند موقعیت اسکرول خود را هنگامی که کاربر دستگاه را می‌چرخاند یا یک تلفن تاشو را باز می‌کند، از دست بدهد، که این امر کاربر را مجبور می‌کند دوباره از بالای WebView به موقعیت اسکرول قبلی اسکرول کند.

WebView در مدیریت وضعیت خود خوب عمل می‌کند. شما می‌توانید با مدیریت هرچه بیشتر تغییرات پیکربندی، از این ویژگی بهره ببرید تا تعداد دفعات بازسازی یک WebView به حداقل برسد. برنامه شما باید تغییرات پیکربندی را مدیریت کند زیرا بازسازی فعالیت (روش سیستم برای مدیریت تغییرات پیکربندی) WebView دوباره ایجاد می‌کند که باعث می‌شود WebView وضعیت خود را از دست بدهد.

نتایج

اجزای WebView برنامه شما، وضعیت و موقعیت اسکرول خود را در طول تغییرات پیکربندی متعدد، از تغییر اندازه گرفته تا تغییر جهت و تا شدن و باز شدن دستگاه، حفظ می‌کنند.

مدیریت حالت

تا حد امکان از بازآفرینی فعالیت‌ها در حین تغییرات پیکربندی خودداری کنید و اجازه دهید WebView نامعتبر شود تا بتواند ضمن حفظ وضعیت خود، تغییر اندازه دهد.

برای مدیریت وضعیت WebView :

  • تغییرات پیکربندی که توسط برنامه شما مدیریت می‌شوند را اعلام کنید
  • وضعیت WebView را نامعتبر کنید

۱. تغییرات پیکربندی را به فایل AndroidManifest.xml برنامه خود اضافه کنید

با مشخص کردن تغییرات پیکربندی که توسط برنامه شما (و نه توسط سیستم) انجام می‌شود، از بازآفرینی فعالیت‌ها جلوگیری کنید:

<activity
  android:name=".MyActivity"
  android:configChanges="screenLayout|orientation|screenSize
      |keyboard|keyboardHidden|smallestScreenSize" />

۲. هر زمان که برنامه شما تغییر پیکربندی دریافت می‌کند، WebView نامعتبر کنید

کاتلین

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    webView.invalidate()
}

جاوا

@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    webview.invalidate();
}

این مرحله فقط برای سیستم نمایش اعمال می‌شود، زیرا Jetpack Compose برای تغییر اندازه صحیح عناصر Composable نیازی به نامعتبر کردن چیزی ندارد. با این حال، Compose اغلب یک WebView دوباره ایجاد می‌کند، اگر به درستی مدیریت نشود.

نکات کلیدی

  • android:configChanges : ویژگی عنصر <activity> در manifest. تغییرات پیکربندی مدیریت‌شده توسط activity را فهرست می‌کند.
  • View#invalidate() : متدی که باعث می‌شود یک نما (view) دوباره ترسیم شود. این متد توسط WebView به ارث رسیده است.

مجموعه‌هایی که حاوی این راهنما هستند

این راهنما بخشی از این مجموعه‌های راهنمای سریعِ برگزیده است که اهداف گسترده‌تر توسعه اندروید را پوشش می‌دهد:

برنامه خود را فعال کنید تا از یک تجربه کاربری بهینه در تبلت‌ها، دستگاه‌های تاشو و دستگاه‌های ChromeOS پشتیبانی کند.

سوالی یا بازخوردی دارید؟

به صفحه سوالات متداول ما بروید و درباره راهنماهای سریع اطلاعات کسب کنید یا با ما تماس بگیرید و نظرات خود را با ما در میان بگذارید.
،

WebView یک کامپوننت رایج است که سیستم پیشرفته‌ای برای مدیریت وضعیت (state management) ارائه می‌دهد. یک WebView باید وضعیت (state) و موقعیت اسکرول (scroll position) خود را در طول تغییرات پیکربندی حفظ کند. یک WebView می‌تواند موقعیت اسکرول خود را هنگامی که کاربر دستگاه را می‌چرخاند یا یک تلفن تاشو را باز می‌کند، از دست بدهد، که این امر کاربر را مجبور می‌کند دوباره از بالای WebView به موقعیت اسکرول قبلی اسکرول کند.

WebView در مدیریت وضعیت خود خوب عمل می‌کند. شما می‌توانید با مدیریت هرچه بیشتر تغییرات پیکربندی، از این ویژگی بهره ببرید تا تعداد دفعات بازسازی یک WebView به حداقل برسد. برنامه شما باید تغییرات پیکربندی را مدیریت کند زیرا بازسازی فعالیت (روش سیستم برای مدیریت تغییرات پیکربندی) WebView دوباره ایجاد می‌کند که باعث می‌شود WebView وضعیت خود را از دست بدهد.

نتایج

اجزای WebView برنامه شما، وضعیت و موقعیت اسکرول خود را در طول تغییرات پیکربندی متعدد، از تغییر اندازه گرفته تا تغییر جهت و تا شدن و باز شدن دستگاه، حفظ می‌کنند.

مدیریت حالت

تا حد امکان از بازآفرینی فعالیت‌ها در حین تغییرات پیکربندی خودداری کنید و اجازه دهید WebView نامعتبر شود تا بتواند ضمن حفظ وضعیت خود، تغییر اندازه دهد.

برای مدیریت وضعیت WebView :

  • تغییرات پیکربندی که توسط برنامه شما مدیریت می‌شوند را اعلام کنید
  • وضعیت WebView را نامعتبر کنید

۱. تغییرات پیکربندی را به فایل AndroidManifest.xml برنامه خود اضافه کنید

با مشخص کردن تغییرات پیکربندی که توسط برنامه شما (و نه توسط سیستم) انجام می‌شود، از بازآفرینی فعالیت‌ها جلوگیری کنید:

<activity
  android:name=".MyActivity"
  android:configChanges="screenLayout|orientation|screenSize
      |keyboard|keyboardHidden|smallestScreenSize" />

۲. هر زمان که برنامه شما تغییر پیکربندی دریافت می‌کند، WebView نامعتبر کنید

کاتلین

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    webView.invalidate()
}

جاوا

@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    webview.invalidate();
}

این مرحله فقط برای سیستم نمایش اعمال می‌شود، زیرا Jetpack Compose برای تغییر اندازه صحیح عناصر Composable نیازی به نامعتبر کردن چیزی ندارد. با این حال، Compose اغلب یک WebView دوباره ایجاد می‌کند، اگر به درستی مدیریت نشود.

نکات کلیدی

  • android:configChanges : ویژگی عنصر <activity> در manifest. تغییرات پیکربندی مدیریت‌شده توسط activity را فهرست می‌کند.
  • View#invalidate() : متدی که باعث می‌شود یک نما (view) دوباره ترسیم شود. این متد توسط WebView به ارث رسیده است.

مجموعه‌هایی که حاوی این راهنما هستند

این راهنما بخشی از این مجموعه‌های راهنمای سریعِ برگزیده است که اهداف گسترده‌تر توسعه اندروید را پوشش می‌دهد:

برنامه خود را فعال کنید تا از یک تجربه کاربری بهینه در تبلت‌ها، دستگاه‌های تاشو و دستگاه‌های ChromeOS پشتیبانی کند.

سوالی یا بازخوردی دارید؟

به صفحه سوالات متداول ما بروید و درباره راهنماهای سریع اطلاعات کسب کنید یا با ما تماس بگیرید و نظرات خود را با ما در میان بگذارید.