ক্লায়েন্ট অ্যাপের অংশ হিসেবে ওয়েব অ্যাপ্লিকেশন বা ওয়েব পেজ ডেলিভার করতে WebView ব্যবহার করুন। WebView ক্লাস হল Android-এর View ক্লাসের এক্সটেনশন যা আপনার অ্যাক্টিভিটি লেআউটের অংশ হিসেবে ওয়েব পেজ দেখাতে দেয়। এতে
নেভিগেশন কন্ট্রোল বা অ্যাড্রেস বারের মতো সম্পূর্ণভাবে ডেভেলপ করা ওয়েব ব্রাউজারের
ফিচার অন্তর্ভুক্ত থাকে না। ডিফল্ট হিসেবে WebView যা করে তা হল, একটি ওয়েবপেজ
দেখানো।
WebView আপনাকে অ্যাপে এমন তথ্য প্রদান করতে সাহায্য করতে পারে যা আপনাকে আপডেট করতে হতে পারে, যেমন ব্যবহারকারীর চুক্তি বা ব্যবহারকারীর নির্দেশিকা। আপনার Android অ্যাপের মধ্যে,
আপনি একটি Activity তৈরি করতে পারেন যাতে একটি
WebView থাকে, তারপর অনলাইনে হোস্ট করা আপনার ডকুমেন্ট দেখানোর জন্য এটি ব্যবহার করুন।
এছাড়াও, আপনার অ্যাপ ব্যবহারকারীকে এমন ডেটা প্রদান করলে যা ইন্টারনেট কানেকশন ছাড়া পাওয়া যায় না, যেমন ইমেল, সেক্ষেত্রেও WebView সাহায্য করতে পারে। এই ক্ষেত্রে, আপনি হয়ত
দেখবেন যে আপনার Android অ্যাপে WebView তৈরি করা অনেক সহজ যা নেটওয়ার্ক অনুরোধ পারফর্ম করার পরিবর্তে
ব্যবহারকারীর সব ডেটা সহ ওয়েব পেজ দেখায়, তারপর
ডেটা পার্স করে এবং Android লেআউটে এটি রেন্ডার করে। পরিবর্তে, আপনি Android-পরিচালিত ডিভাইসের জন্য উপযুক্ত
একটি ওয়েব পেজ ডিজাইন করতে পারেন এবং তারপরে আপনার Android অ্যাপে
WebView প্রয়োগ করতে পারেন যা ওয়েব পেজ লোড করে।
এই ডকুমেন্ট থেকে আপনি জানতে পারবেন কীভাবে WebView ব্যবহার শুরু করবেন, কীভাবে আপনার ওয়েব পেজ থেকে
JavaScript-কে আপনার Android অ্যাপের ক্লায়েন্ট-সাইড কোডের সাথে বাইন্ড করবেন, কীভাবে
পেজ নেভিগেশন ম্যানেজ করবেন এবং WebView ব্যবহার করার সময় কীভাবে উইন্ডো ম্যানেজ করবেন।
Android-এর আগের ভার্সনে WebView-এর সাথে কাজ করা
আপনার অ্যাপ যে ডিভাইসে চলছে সেখানে আরও সাম্প্রতিক WebView ক্ষমতা নিরাপদে ব্যবহার করতে, Jetpack Webkit লাইব্রেরি যোগ করুন। এটি একটি স্ট্যাটিক লাইব্রেরি যা আপনি
আপনার অ্যাপ্লিকেশনে যোগ করতে পারেন যাতে android.webkit API ব্যবহার করা যায় যা
আগের প্ল্যাটফর্ম ভার্সনের জন্য উপলভ্য নয়।
আপনার build.gradle ফাইলে এটি এইভাবে যোগ করুন:
Kotlin
dependencies { implementation("androidx.webkit:webkit:1.8.0") }
গ্ৰুভি
dependencies { implementation ("androidx.webkit:webkit:1.8.0") }
আরও বিবরণের জন্য GitHub-এ WebView উদাহরণ এক্সপ্লোর করুন।
আপনার অ্যাপে WebView যোগ করা
আপনার অ্যাপে WebView যোগ করতে, আপনার অ্যাক্টিভিটি লেআউটে <WebView> এলিমেন্ট যোগ করতে পারেন অথবা
onCreate-এ WebView হিসেবে সম্পূর্ণ Activity উইন্ডো সেট করতে পারেন।
অ্যাক্টিভিটি লেআউটে WebView যোগ করা
লেআউটে আপনার অ্যাপে WebView যোগ করতে, আপনার অ্যাক্টিভিটির লেআউট XML ফাইলে নিম্নলিখিত কোড যোগ করুন:
<WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent" />
WebView-এ ওয়েব পেজ লোড করতে, loadUrl ব্যবহার করুন, যেমনটি নিম্নলিখিত উদাহরণে
দেখানো হয়েছে:
Kotlin
val myWebView: WebView = findViewById(R.id.webview) myWebView.loadUrl("http://www.example.com")
জাভা
WebView myWebView = (WebView) findViewById(R.id.webview); myWebView.loadUrl("http://www.example.com");
onCreate()-এ WebView যোগ করুন
পরিবর্তে, কোনও অ্যাক্টিভিটির onCreate() পদ্ধতিতে আপনার অ্যাপে WebView যোগ করতে,
নিম্নলিখিত লজিক ব্যবহার করুন:
Kotlin
val myWebView = WebView(activityContext) setContentView(myWebView)
জাভা
WebView myWebView = new WebView(activityContext); setContentView(myWebView);
তারপর পৃষ্ঠাটি লোড করুন:
Kotlin
myWebView.loadUrl("http://www.example.com")
জাভা
myWebView.loadUrl("https://www.example.com");
অথবা HTML স্ট্রিং থেকে URL লোড করুন:
Kotlin
// Create an unencoded HTML string, then convert the unencoded HTML string into // bytes. Encode it with base64 and load the data. val unencodedHtml = "<html><body>'%23' is the percent code for ‘#‘ </body></html>"; val encodedHtml = Base64.encodeToString(unencodedHtml.toByteArray(), Base64.NO_PADDING) myWebView.loadData(encodedHtml, "text/html", "base64")
জাভা
// Create an unencoded HTML string, then convert the unencoded HTML string into // bytes. Encode it with base64 and load the data. String unencodedHtml = "<html><body>'%23' is the percent code for ‘#‘ </body></html>"; String encodedHtml = Base64.encodeToString(unencodedHtml.getBytes(), Base64.NO_PADDING); myWebView.loadData(encodedHtml, "text/html", "base64");
আপনার অ্যাপে অবশ্যই ইন্টারনেট অ্যাক্সেস থাকতে হবে। ইন্টারনেট অ্যাক্সেস পেতে, আপনার ম্যানিফেস্ট ফাইলে
INTERNET অনুমতির জন্য অনুরোধ করুন, যেমনটি নিম্নলিখিত
উদাহরণে দেখানো হয়েছে:
<manifest ... > <uses-permission android:name="android.permission.INTERNET" /> ... </manifest>
আপনি নিম্নলিখিত যেকোনও একটি কাজ করে আপনার WebView কাস্টমাইজ করতে পারবেন:
WebChromeClientব্যবহার করে ফুলস্ক্রিন সাপোর্ট চালু করা হচ্ছে। এছাড়াও, হোস্ট অ্যাপের UI পরিবর্তন করার জন্যWebView-এর অনুমতি প্রয়োজন হলে, এই ক্লাস কল করা হয়, যেমন, উইন্ডো তৈরি করা বা বন্ধ করা অথবা ব্যবহারকারীকে JavaScript ডায়ালগ পাঠানো। এই প্রসঙ্গে ডিবাগিং সম্পর্কে আরও জানতে, ওয়েব অ্যাপ ডিবাগ করুন নিবন্ধটি পড়ুন।- কন্টেন্ট রেন্ডারিংয়ের উপর প্রভাব ফেলে এমন ইভেন্ট ম্যানেজ করা, যেমন ফর্ম জমা দেওয়ার সময় হওয়া সমস্যা বা
WebViewClientব্যবহার করে নেভিগেশন। URL লোডিং ইন্টারসেপ্ট করতে আপনি এই সাবক্লাস ব্যবহার করতে পারেন। WebSettingsপরিবর্তন করে জাভাস্ক্রিপ্ট চালু করা।- জাভাস্ক্রিপ্ট ব্যবহার করে Android ফ্রেমওয়ার্ক অবজেক্ট অ্যাক্সেস করা যা আপনি
WebView-এ ইনজেক্ট করেছেন।
WebView-তে জাভাস্ক্রিপ্ট ব্যবহার করা
আপনি যে ওয়েব পেজটি আপনার WebView-এ লোড করতে চান সেটি যদি জাভাস্ক্রিপ্ট ব্যবহার করে, তাহলে আপনাকে অবশ্যই
আপনার WebView-এর জন্য জাভাস্ক্রিপ্ট চালু করতে হবে। জাভাস্ক্রিপ্ট চালু করার পরে, আপনি
আপনার অ্যাপ কোড এবং জাভাস্ক্রিপ্ট কোডের মধ্যে ইন্টারফেস তৈরি করতে পারবেন।
জাভাস্ক্রিপ্ট চালু করুন
ডিফল্ট হিসেবে WebView-এ জাভাস্ক্রিপ্ট বন্ধ করা থাকে। আপনার WebView-এর সাথে অ্যাটাচ করা
WebSettings-এর মাধ্যমে আপনি এটি চালু করতে পারবেন। getSettings-এর মাধ্যমে WebSettings ফিরিয়ে আনুন, তারপর
setJavaScriptEnabled-এর মাধ্যমে জাভাস্ক্রিপ্ট চালু করুন।
নিচের উদাহরণটি দেখুন:
Kotlin
val myWebView: WebView = findViewById(R.id.webview) myWebView.settings.javaScriptEnabled = true
জাভা
WebView myWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true);
WebSettings-এ আপনি অন্যান্য বিভিন্ন সেটিংস অ্যাক্সেস করতে পারবেন যা আপনার কাজে লাগতে
পারে। যেমন, আপনি যদি এমন কোনও ওয়েব অ্যাপ্লিকেশন ডেভেলপ করেন যা বিশেষভাবে আপনার Android অ্যাপের WebView-এর জন্য ডিজাইন করা হয়েছে, তাহলে আপনি setUserAgentString-এর মাধ্যমে কাস্টম ইউজার এজেন্ট স্ট্রিং নির্ধারণ করতে পারবেন, তারপর আপনার ওয়েব পেজে কাস্টম ইউজার এজেন্ট কোয়েরি করে যাচাই করতে পারবেন যে আপনার ওয়েব পেজের জন্য অনুরোধ করা ক্লায়েন্টটি আপনার Android অ্যাপ কিনা।
Android কোডের সাথে JavaScript কোড বাইন্ড করা
আপনার Android অ্যাপে WebView-এর জন্য বিশেষভাবে ডিজাইন করা ওয়েব অ্যাপ্লিকেশন ডেভেলপ করার সময়, আপনি জাভাস্ক্রিপ্ট কোড ও ক্লায়েন্ট-সাইড Android কোডের মধ্যে ইন্টারফেস তৈরি করতে পারবেন। যেমন, জাভাস্ক্রিপ্টের alert() ফাংশন ব্যবহার করার পরিবর্তে, আপনার জাভাস্ক্রিপ্ট কোড,
Android কোডে একটি পদ্ধতি কল করে Dialog দেখাতে পারে।
আপনার জাভাস্ক্রিপ্ট এবং Android কোডের মধ্যে একটি নতুন ইন্টারফেস বাইন্ড করতে, addJavascriptInterface কল করুন, আপনার জাভাস্ক্রিপ্টে বাইন্ড করার জন্য একটি ক্লাস ইনস্ট্যান্স এবং একটি ইন্টারফেসের নাম পাস করুন যা আপনার জাভাস্ক্রিপ্ট ক্লাস অ্যাক্সেস করার জন্য কল করতে পারে।
আরও আধুনিক ও সুরক্ষিত API সহ জাভাস্ক্রিপ্ট ও নেটিভ কোডের মধ্যে যোগাযোগ সম্পর্কে আরও জানতে, JSBridge-এর মাধ্যমে নেটিভ API অ্যাক্সেস করুন দেখুন।
যেমন, আপনার Android অ্যাপে নিম্নলিখিত ক্লাস অন্তর্ভুক্ত করতে পারেন:
Kotlin
/** Instantiate the interface and set the context. */ class WebAppInterface(private val mContext: Context) { /** Show a toast from the web page. */ @JavascriptInterface fun showToast(toast: String) { Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show() } }
জাভা
public class WebAppInterface { Context mContext; /** Instantiate the interface and set the context. */ WebAppInterface(Context c) { mContext = c; } /** Show a toast from the web page. */ @JavascriptInterface public void showToast(String toast) { Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); } }
এই উদাহরণে, WebAppInterface ক্লাস, ওয়েব পেজকে showToast() পদ্ধতি ব্যবহার করে
Toast মেসেজ তৈরি করতে দেয়।
আপনি এই ক্লাসকে জাভাস্ক্রিপ্টের সাথে বাইন্ড করতে পারবেন যা আপনার WebView-এ
addJavascriptInterface()-এর সাথে রান করে, যেমন নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
Kotlin
val webView: WebView = findViewById(R.id.webview) webView.addJavascriptInterface(WebAppInterface(this), "Android")
জাভা
WebView webView = (WebView) findViewById(R.id.webview); webView.addJavascriptInterface(new WebAppInterface(this), "Android");
এটি WebView-এ চলা জাভাস্ক্রিপ্টের জন্য Android নামের একটি ইন্টারফেস তৈরি করে। এই মুহূর্তে, আপনার ওয়েব অ্যাপ্লিকেশনের কাছে
WebAppInterface ক্লাসের অ্যাক্সেস আছে। যেমন, এখানে কিছু HTML এবং JavaScript দেওয়া হল যা
ব্যবহারকারী কোনও বোতামে ট্যাপ করলে নতুন ইন্টারফেস ব্যবহার করে একটি টোস্ট মেসেজ তৈরি করে:
<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" /> <script type="text/javascript"> function showAndroidToast(toast) { Android.showToast(toast); } </script>
জাভাস্ক্রিপ্ট থেকে Android ইন্টারফেস শুরু করার কোনও প্রয়োজন নেই। WebView
অটোমেটিক আপনার ওয়েব পেজে এটি উপলভ্য করে দেয়। তাই, কোনও ব্যবহারকারী
বোতামে ট্যাপ করলে, showAndroidToast() ফাংশন Android ইন্টারফেস ব্যবহার করে
WebAppInterface.showToast() পদ্ধতি কল করে।
পৃষ্ঠা নেভিগেশন ম্যানেজ করা
ব্যবহারকারী আপনার WebView-এর কোনও ওয়েব পেজের লিঙ্কে ট্যাপ করলে, ডিফল্ট হিসেবে, Android
URL ম্যানেজ করে এমন অ্যাপ লঞ্চ করে। সাধারণত, ডিফল্ট ওয়েব ব্রাউজার খুলে যায় এবং
গন্তব্য URL লোড করে। তবে, আপনার WebView-এর জন্য আপনি এই আচরণ ওভাররাইড করতে পারেন
যাতে আপনার WebView-এর মধ্যে লিঙ্ক খোলে। এরপর আপনি ব্যবহারকারীকে
আপনার WebView-এর মাধ্যমে ম্যানেজ করা ওয়েব পেজ ইতিহাস থেকে
আগে ও পরে নেভিগেট করার অনুমতি দিতে পারবেন।
ব্যবহারকারীর ট্যাপ করা লিঙ্ক খুলতে, setWebViewClient ব্যবহার করে আপনার WebView-এর জন্য
WebViewClient প্রদান করুন। ব্যবহারকারী যেসব লিঙ্কে ট্যাপ করেন, সেগুলি আপনার
WebView-এ লোড হয়। ক্লিক করা লিঙ্ক কোথায় লোড হবে তার উপর আরও নিয়ন্ত্রণ চাইলে, আপনার
নিজস্ব WebViewClient তৈরি করুন যা shouldOverrideUrlLoading
পদ্ধতিকে ওভাররাইড করে। নিম্নলিখিত উদাহরণে ধরে নেওয়া হয়েছে যে MyWebViewClient হল Activity-এর
ইনার ক্লাস।
Kotlin
private class MyWebViewClient : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean { if (Uri.parse(url).host == "www.example.com") { // This is your website, so don't override. Let your WebView load // the page. return false } // Otherwise, the link isn't for a page on your site, so launch another // Activity that handles URLs. Intent(Intent.ACTION_VIEW, Uri.parse(url)).apply { startActivity(this) } return true } }
জাভা
private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { if ("www.example.com".equals(request.getUrl().getHost())) { // This is your website, so don't override. Let your WebView load the // page. return false; } // Otherwise, the link isn't for a page on your site, so launch another // Activity that handles URLs. Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl()); startActivity(intent); return true; } }
তারপর WebView-এর জন্য এই নতুন WebViewClient-এর একটি ইনস্ট্যান্স তৈরি করুন:
Kotlin
val myWebView: WebView = findViewById(R.id.webview) myWebView.webViewClient = MyWebViewClient()
জাভা
WebView myWebView = (WebView) findViewById(R.id.webview); myWebView.setWebViewClient(new MyWebViewClient());
এখন ব্যবহারকারী কোনও লিঙ্কে ট্যাপ করলে, সিস্টেম shouldOverrideUrlLoading
মেথড কল করে, যা URL হোস্ট নির্দিষ্ট ডোমেনের সাথে মিলছে কিনা তা চেক করে, যেমনটি আগের উদাহরণে
বলা হয়েছে। যদি এটি মেলে, তাহলে পদ্ধতিটি মিথ্যা রিটার্ন করে এবং
URL লোডিং ওভাররাইড করে না। এটি WebView-কে স্বাভাবিকভাবে URL লোড করতে দেয়।
URL হোস্ট ম্যাচ না করলে, URL ম্যানেজ করার জন্য ডিফল্ট Activity চালু করতে একটি Intent তৈরি করা হয়, যা ব্যবহারকারীর ডিফল্ট ওয়েব ব্রাউজারে সমাধান করা হয়।
কাস্টম URL ম্যানেজ করা
রিসোর্সের জন্য অনুরোধ করার সময় এবং কাস্টম URL স্কিম ব্যবহার করে এমন লিঙ্ক
সমাধান করার সময় WebView বিধিনিষেধ প্রয়োগ করে। যেমন, আপনি যদি shouldOverrideUrlLoading বা shouldInterceptRequest-এর মতো কলব্যাক প্রয়োগ করেন, তাহলে
WebView শুধুমাত্র সঠিক URL-এর জন্য সেগুলি চালু করে।
যেমন, WebView হয়ত এই ধরনের লিঙ্কের জন্য আপনার shouldOverrideUrlLoading মেথড কল করবে না:
<a href="showProfile">Show Profile</a>
আগের উদাহরণে দেখানো URL-এর মতো ভুল URL, WebView-এ
অসামঞ্জস্যপূর্ণভাবে ম্যানেজ করা হয়, তাই আমরা এর পরিবর্তে সঠিক ফর্ম্যাটে লেখা URL ব্যবহার করার সাজেশন দিই।
আপনার সংস্থার নিয়ন্ত্রণাধীন ডোমেনের জন্য আপনি কাস্টম স্কিম বা HTTPS URL ব্যবহার করতে পারেন।
আগের উদাহরণের মতো লিঙ্কে সাধারণ স্ট্রিং ব্যবহার করার পরিবর্তে, আপনি নিচের মতো কাস্টম স্কিম ব্যবহার করতে পারেন:
<a href="example-app:showProfile">Show Profile</a>
তারপর আপনি এই URL আপনার shouldOverrideUrlLoading পদ্ধতিতে এইভাবে
ম্যানেজ করতে পারবেন:
Kotlin
// The URL scheme must be non-hierarchical, meaning no trailing slashes. const val APP_SCHEME = "example-app:" override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean { return if (url?.startsWith(APP_SCHEME) == true) { urlData = URLDecoder.decode(url.substring(APP_SCHEME.length), "UTF-8") respondToData(urlData) true } else { false } }
জাভা
// The URL scheme must be non-hierarchical, meaning no trailing slashes. private static final String APP_SCHEME = "example-app:"; @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith(APP_SCHEME)) { urlData = URLDecoder.decode(url.substring(APP_SCHEME.length()), "UTF-8"); respondToData(urlData); return true; } return false; }
shouldOverrideUrlLoading API মূলত নির্দিষ্ট URL-এর জন্য ইনটেন্ট লঞ্চ করার উদ্দেশ্যে তৈরি করা হয়েছে।
এটি প্রয়োগ করার সময়, WebView হ্যান্ডেল করে এমন URL-এর জন্য false রিটার্ন করতে ভুলবেন না। তবে, আপনি শুধু ইনটেন্ট লঞ্চ করার মধ্যেই সীমাবদ্ধ নন। আপনি
পূর্ববর্তী কোড স্যাম্পেলে যেকোনও কাস্টম আচরণের সাথে লঞ্চিং ইনটেন্ট পরিবর্তন করতে পারবেন।
ওয়েব পেজের ইতিহাস নেভিগেট করা
আপনার WebView URL লোডিং ওভাররাইড করলে, এটি অটোমেটিক ভিজিট করা ওয়েব পেজের
ইতিহাস সংগ্রহ করে। আপনি goBack এবং goForward ব্যবহার করে
ইতিহাসের মাধ্যমে পিছনে এবং সামনে নেভিগেট করতে পারবেন।
যেমন, আপনার Activity কীভাবে ডিভাইসের 'ফিরে যান' বোতাম ব্যবহার করে
পিছনে নেভিগেট করতে পারে তা নিচে দেখানো হয়েছে:
Kotlin
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { // Check whether the key event is the Back button and if there's history. if (keyCode == KeyEvent.KEYCODE_BACK && myWebView.canGoBack()) { myWebView.goBack() return true } // If it isn't the Back button or there isn't web page history, bubble up to // the default system behavior. Probably exit the activity. return super.onKeyDown(keyCode, event) }
জাভা
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { // Check whether the key event is the Back button and if there's history. if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) { myWebView.goBack(); return true; } // If it isn't the Back button or there's no web page history, bubble up to // the default system behavior. Probably exit the activity. return super.onKeyDown(keyCode, event); }
আপনার অ্যাপ Jetpack AppCompat 1.6.0+ ব্যবহার করলে, আপনি আগের স্নিপেট আরও সহজ করতে পারবেন:
Kotlin
onBackPressedDispatcher.addCallback { // Check whether there's history. if (myWebView.canGoBack()) { myWebView.goBack() } }
জাভা
onBackPressedDispatcher.addCallback { // Check whether there's history. if (myWebView.canGoBack()) { myWebView.goBack(); } }
ব্যবহারকারীর দেখার জন্য ওয়েব পেজ ইতিহাস থাকলে, canGoBack পদ্ধতি true রিটার্ন করে। একইভাবে, আপনি canGoForward ব্যবহার করে চেক করতে পারবেন যে
ফরওয়ার্ড ইতিহাস আছে কিনা। আপনি এই চেক না করলে, ব্যবহারকারী ইতিহাসের শেষে পৌঁছে যাওয়ার পরে, goBack এবং goForward কিছুই করে না।
অ্যাক্টিভিটি রিক্রিয়েশন বা ব্যাকগ্রাউন্ড প্রসেস রিক্লেমেশন জুড়ে নেভিগেশন ইতিহাস সংরক্ষণ করতে,
WebView-এর নেভিগেশন ইতিহাসকে Bundle-এ সিরিয়ালাইজ করতে saveState এবং এটি রিস্টোর করতে restoreState ব্যবহার করুন।
সেভ করা স্টেট সাইজের সীমা নিরাপদে ম্যানেজ করা এবং
TransactionTooLargeException এড়িয়ে যাওয়ার ব্যাপারে নির্দেশিকা পেতে, WebView স্টেট দক্ষতার সাথে ম্যানেজ করুন দেখুন।
ডিভাইস কনফিগারেশনে পরিবর্তন ম্যানেজ করা
রানটাইমের সময়, ডিভাইসের কনফিগারেশন পরিবর্তন হলে অ্যাক্টিভিটি স্টেট পরিবর্তন হয়,
যেমন, ব্যবহারকারী ডিভাইস ঘোরালে বা ইনপুট মেথড এডিটর (IME)
বাতিল করলে। এইসব পরিবর্তনের ফলে WebView অবজেক্টের অ্যাক্টিভিটি নষ্ট হয়ে যায় এবং
নতুন অ্যাক্টিভিটি তৈরি হয়, যা নতুন WebView অবজেক্টও তৈরি করে এবং
নষ্ট হয়ে যাওয়া অবজেক্টের URL লোড করে। ব্যবহারকারীর নেভিগেশন কনটেক্সট ফিরিয়ে আনতে,
আপনি onSaveInstanceState()-এর মধ্যে saveState এবং
আবার তৈরি করার সময় restoreState ব্যবহার করতে পারবেন। স্টেট সাইজ নিরাপদে ম্যানেজ করার কৌশল জানতে,
WebView স্টেট দক্ষতার সাথে ম্যানেজ করুন দেখুন।
আপনার অ্যাক্টিভিটির ডিফল্ট অ্যাকশন পরিবর্তন করতে, আপনার ম্যানিফেস্টে orientation পরিবর্তন এটি কীভাবে ম্যানেজ করে তা আপনি পরিবর্তন করতে পারবেন। রানটাইমে কনফিগারেশন পরিবর্তন ম্যানেজ করা সম্পর্কে আরও জানতে, কনফিগারেশন পরিবর্তন ম্যানেজ করুন নিবন্ধটি পড়ুন।
উইন্ডো ম্যানেজ করুন
ডিফল্ট হিসেবে, নতুন উইন্ডো খোলার অনুরোধ উপেক্ষা করা হয়। জাভাস্ক্রিপ্ট বা লিঙ্কের টার্গেট অ্যাট্রিবিউট, যেটির মাধ্যমেই
পপ-আপ খোলা হোক না কেন, এটি প্রযোজ্য হবে। একাধিক উইন্ডো খোলার জন্য
আপনার নিজস্ব আচরণ প্রদান করতে আপনি WebChromeClient
কাস্টমাইজ করতে পারেন।
আপনার অ্যাপ আরও সুরক্ষিত রাখতে, পপ-আপ ও নতুন উইন্ডো খোলা বন্ধ রাখাই
সবচেয়ে ভালো। এই আচরণ প্রয়োগ করার সবচেয়ে নিরাপদ উপায় হল "true"-কে
setSupportMultipleWindows-এ পাস করা, তবে
onCreateWindow পদ্ধতি ওভাররাইড না করা, যার উপর setSupportMultipleWindows() নির্ভর করে।
এই লজিক, লিঙ্কে target="_blank" ব্যবহার করে এমন যেকোনও পৃষ্ঠাকে লোড হতে
বাধা দেয়।
মেমরি ও পারফর্ম্যান্স ম্যানেজ করা
কারণ WebView আলাদা প্রসেস ও নেটিভ কোড সহ Chromium-ভিত্তিক ইঞ্জিনে চলে, এর বেসলাইন মেমরির ব্যবহার স্ট্যান্ডার্ড Android ভিউয়ের চেয়ে বেশি।
অ্যাপের স্থিতিশীলতা বজায় রাখার জন্য WebView ইনস্ট্যান্স আবার ব্যবহার করা এবং সেগুলি সঠিকভাবে নষ্ট করে দেওয়া
অপরিহার্য।
ওয়েব কন্টেন্ট ব্যবহার করার সময় আপনার অ্যাপের মেমরি ফুটপ্রিন্ট কীভাবে ডায়াগনসিস ও অপ্টিমাইজ করবেন সেই সম্পর্কে আরও তথ্য পেতে, WebView মেমরি ম্যানেজ ও ডায়াগনসিস করুন নিবন্ধটি দেখুন।