অ্যান্ড্রয়েড অ্যাপ ফ্রেমওয়ার্ক UI হল একটি View দিয়ে শুরু হওয়া অবজেক্টের একটি শ্রেণিবিন্যাসের উপর ভিত্তি করে তৈরি। সমস্ত UI উপাদান পরিমাপের একটি সিরিজ এবং একটি লেআউট প্রক্রিয়ার মধ্য দিয়ে যায় যা তাদের একটি আয়তক্ষেত্রাকার এলাকায় ফিট করে। তারপর, ফ্রেমওয়ার্কটি সমস্ত দৃশ্যমান ভিউ অবজেক্টকে এমন একটি পৃষ্ঠে রেন্ডার করে যা WindowManager দ্বারা অ্যাপটিকে ফোরগ্রাউন্ডে আনার সময় সেট আপ করা হয়েছিল। অ্যাপের UI থ্রেড প্রতি ফ্রেমে একটি বাফারে লেআউট এবং রেন্ডারিং সম্পাদন করে।
সারফেসভিউ
সারফেসভিউ হলো এমন একটি উপাদান যা আপনার ভিউ হায়ারার্কির মধ্যে একটি অতিরিক্ত কম্পোজিট স্তর এম্বেড করতে ব্যবহার করা যেতে পারে। সারফেসভিউ অন্যান্য ভিউয়ের মতো একই লেআউট প্যারামিটার নেয়, তাই এটি অন্য যেকোনো ভিউয়ের মতোই ম্যানিপুলেট করা যেতে পারে, তবে সারফেসভিউয়ের বিষয়বস্তু স্বচ্ছ।
যখন আপনি কোন বহিরাগত বাফার সোর্স, যেমন GL কনটেক্সট বা মিডিয়া ডিকোডার দিয়ে রেন্ডার করেন, তখন স্ক্রিনে বাফার প্রদর্শনের জন্য আপনাকে বাফার সোর্স থেকে বাফার কপি করতে হবে। SurfaceView ব্যবহার করে আপনি এটি করতে পারবেন।
যখন SurfaceView-এর ভিউ কম্পোনেন্টটি দৃশ্যমান হতে থাকে, তখন ফ্রেমওয়ার্কটি SurfaceControl-কে SurfaceFlinger থেকে একটি নতুন সারফেসের অনুরোধ করতে বলে। সারফেস তৈরি বা ধ্বংস হয়ে গেলে কলব্যাক পেতে, SurfaceHolder ইন্টারফেস ব্যবহার করুন। ডিফল্টরূপে, ফ্রেমওয়ার্কটি নতুন তৈরি সারফেসটিকে অ্যাপ UI সারফেসের পিছনে রাখে। নতুন সারফেসটি উপরে রাখার জন্য আপনি ডিফল্ট Z-অর্ডারিং ওভাররাইড করতে পারেন।
SurfaceView দিয়ে রেন্ডারিং করা সেইসব ক্ষেত্রে উপকারী যেখানে আপনাকে আলাদা সারফেসে রেন্ডার করতে হবে, যেমন যখন আপনি ক্যামেরা API বা OpenGL ES কনটেক্সট ব্যবহার করে রেন্ডার করেন। যখন আপনি SurfaceView দিয়ে রেন্ডার করেন, তখন SurfaceFlinger সরাসরি স্ক্রিনে বাফার কম্পোজ করে। SurfaceView ছাড়া, আপনাকে একটি অফস্ক্রিন সারফেসে বাফার কম্পোজ করতে হবে, যা পরে স্ক্রিনে কম্পোজিট হয়ে যায়, তাই SurfaceView দিয়ে রেন্ডারিং অতিরিক্ত কাজ বন্ধ করে দেয়। SurfaceView দিয়ে রেন্ডার করার পরে, কার্যকলাপের জীবনচক্রের সাথে সমন্বয় করতে UI থ্রেড ব্যবহার করুন এবং প্রয়োজনে ভিউয়ের আকার বা অবস্থানের সাথে সামঞ্জস্য করুন। তারপর, হার্ডওয়্যার কম্পোজার অ্যাপ UI এবং অন্যান্য স্তরগুলিকে মিশ্রিত করে।
নতুন পৃষ্ঠটি হল একটি BufferQueue-এর উৎপাদক দিক, যার গ্রাহক হল একটি SurfaceFlinger স্তর। আপনি যেকোনো প্রক্রিয়া ব্যবহার করে পৃষ্ঠটি আপডেট করতে পারেন যা একটি BufferQueue-কে ফিড করতে পারে, যেমন পৃষ্ঠ-সরবরাহকৃত ক্যানভাস ফাংশন, একটি EGLSurface সংযুক্ত করা এবং GLES দিয়ে পৃষ্ঠের উপর অঙ্কন করা, অথবা পৃষ্ঠটি লেখার জন্য একটি মিডিয়া ডিকোডার কনফিগার করা।
সারফেসভিউ এবং কার্যকলাপের জীবনচক্র
সারফেসভিউ ব্যবহার করার সময়, মূল UI থ্রেড ছাড়া অন্য কোনও থ্রেড থেকে সারফেসটি রেন্ডার করুন।
সারফেসভিউ সহ একটি কার্যকলাপের জন্য, দুটি পৃথক কিন্তু পরস্পর নির্ভরশীল স্টেট মেশিন রয়েছে:
- অ্যাপ
onCreate
/onResume
/onPause
- পৃষ্ঠ তৈরি/পরিবর্তিত/ধ্বংস
যখন কার্যকলাপ শুরু হবে, আপনি এই ক্রমে কলব্যাক পাবেন:
-
onCreate()
-
onResume()
-
surfaceCreated()
-
surfaceChanged()
যদি আপনি পিছনে ক্লিক করেন, তাহলে আপনি পাবেন:
-
onPause()
-
surfaceDestroyed()
(পৃষ্ঠটি চলে যাওয়ার ঠিক আগে কল করা হয়)
যদি আপনি স্ক্রিনটি ঘোরান, তাহলে অ্যাক্টিভিটিটি ভেঙে পুনরায় তৈরি করা হবে এবং আপনি সম্পূর্ণ চক্রটি পাবেন। isFinishing()
চেক করে আপনি এটি দ্রুত পুনঃসূচনা করতে পারবেন। কোনও অ্যাক্টিভিটি এত দ্রুত শুরু/বন্ধ করা সম্ভব যে onPause surfaceCreated()
onPause()
ঘটে।
যদি আপনি স্ক্রিনটি খালি করার জন্য পাওয়ার বোতামটি ট্যাপ করেন, তাহলে আপনি surfaceDestroyed()
ছাড়াই শুধুমাত্র onPause()
পাবেন। সারফেসটি সক্রিয় থাকে এবং রেন্ডারিং চালিয়ে যেতে পারে। আপনি যদি কোরিওগ্রাফার ইভেন্টগুলি অনুরোধ করতে থাকেন তবে আপনি তাদের পেতে পারেন। যদি আপনার এমন একটি লক স্ক্রিন থাকে যা একটি ভিন্ন ওরিয়েন্টেশনকে বাধ্য করে, তাহলে ডিভাইসটি আনব্ল্যাঙ্ক করা হলে আপনার কার্যকলাপ পুনরায় চালু হতে পারে। অন্যথায়, আপনি আগের মতো একই সারফেস নিয়ে স্ক্রিন-ব্ল্যাঙ্ক থেকে বেরিয়ে আসতে পারেন।
থ্রেডের জীবনকাল পৃষ্ঠের সাথে বা কার্যকলাপের সাথে সংযুক্ত করা যেতে পারে, পর্দা ফাঁকা হয়ে গেলে আপনি কী করতে চান তার উপর নির্ভর করে। থ্রেডটি অ্যাক্টিভিটি স্টার্ট/স্টপ অথবা সারফেস তৈরি/ধ্বংসে শুরু/বন্ধ করতে পারে।
থ্রেডটি Activity start/stop-এ start/stop থাকা অ্যাপের জীবনচক্রের সাথে ভালোভাবে কাজ করে। আপনি onResume()
এ রেন্ডারার থ্রেড শুরু করেন এবং onStop()
এ এটি বন্ধ করেন। থ্রেড তৈরি এবং কনফিগার করার সময়, কখনও কখনও সারফেসটি ইতিমধ্যেই বিদ্যমান থাকে, অন্য সময় এটি থাকে না (উদাহরণস্বরূপ, পাওয়ার বোতাম দিয়ে স্ক্রিন টগল করার পরেও এটি সক্রিয় থাকে)। থ্রেডে ইনিশিয়ালাইজ করার আগে আপনাকে সারফেস তৈরি হওয়ার জন্য অপেক্ষা করতে হবে। আপনি surfaceCreate()
কলব্যাকে ইনিশিয়ালাইজ করতে পারবেন না কারণ সারফেসটি পুনরায় তৈরি না করা হলে এটি আবার চালু হবে না। পরিবর্তে, সারফেস অবস্থাটি জিজ্ঞাসা করুন বা ক্যাশে করুন এবং এটি রেন্ডারার থ্রেডে ফরোয়ার্ড করুন।
সারফেস create/destroy-তে থ্রেড স্টার্ট/স্টপ থাকা ভালো কাজ করে কারণ সারফেস এবং রেন্ডারার যৌক্তিকভাবে একে অপরের সাথে জড়িত। সারফেস তৈরি হওয়ার পরে আপনি থ্রেডটি শুরু করেন, যা কিছু ইন্টারথ্রেড যোগাযোগের সমস্যা এড়ায়; এবং সারফেস তৈরি/পরিবর্তিত বার্তাগুলি ফরোয়ার্ড করা হয়। স্ক্রিন ফাঁকা হয়ে গেলে রেন্ডারিং বন্ধ হয়ে যায় এবং খালি না হলে পুনরায় শুরু হয় তা যাচাই করার জন্য, কোরিওগ্রাফারকে ফ্রেম ড্র কলব্যাক আহ্বান করা বন্ধ করতে বলুন। রেন্ডারার থ্রেড চলমান থাকলে onResume()
কলব্যাকগুলি পুনরায় শুরু করে। তবে, আপনি যদি ফ্রেমের মধ্যে অতিবাহিত সময়ের উপর ভিত্তি করে অ্যানিমেট করেন, তাহলে পরবর্তী ইভেন্ট আসার আগে একটি বড় ব্যবধান থাকতে পারে; একটি স্পষ্ট বিরতি/রিজিউম বার্তা ব্যবহার করলে এই সমস্যাটি সমাধান হতে পারে।
থ্রেডের লাইফকাল অ্যাক্টিভিটির সাথে সংযুক্ত হোক বা সারফেসের সাথে, উভয় বিকল্পই রেন্ডারার থ্রেড কীভাবে কনফিগার করা হয়েছে এবং এটি কার্যকর হচ্ছে কিনা তার উপর ফোকাস করে। একটি সম্পর্কিত উদ্বেগ হল অ্যাক্টিভিটি বন্ধ হয়ে গেলে থ্রেড থেকে অবস্থা বের করা ( onStop()
অথবা onSaveInstanceState()
); এই ধরনের ক্ষেত্রে, থ্রেডের লাইফকাল অ্যাক্টিভিটির সাথে সংযুক্ত করা সবচেয়ে ভালো কাজ করে কারণ রেন্ডারার থ্রেড যুক্ত হওয়ার পরে, রেন্ডার করা থ্রেডের অবস্থা সিঙ্ক্রোনাইজেশন প্রিমিটিভ ছাড়াই অ্যাক্সেস করা যেতে পারে।
GLSurfaceView সম্পর্কে
GLSurfaceView ক্লাসটি EGL প্রসঙ্গ পরিচালনা, ইন্টারথ্রেড যোগাযোগ এবং কার্যকলাপের জীবনচক্রের সাথে মিথস্ক্রিয়ার জন্য সহায়ক ক্লাস প্রদান করে। GLES ব্যবহার করার জন্য আপনাকে GLSurfaceView ব্যবহার করার প্রয়োজন নেই।
উদাহরণস্বরূপ, GLSurfaceView রেন্ডারিংয়ের জন্য একটি থ্রেড তৈরি করে এবং সেখানে একটি EGL প্রসঙ্গ কনফিগার করে। কার্যকলাপ বিরতি দিলে অবস্থা স্বয়ংক্রিয়ভাবে পরিষ্কার হয়ে যায়। GLSurfaceView এর সাথে GLES ব্যবহার করার জন্য বেশিরভাগ অ্যাপের EGL সম্পর্কে কিছু জানার প্রয়োজন হয় না।
বেশিরভাগ ক্ষেত্রে, GLSurfaceView GLES এর সাথে কাজ করা সহজ করে তুলতে পারে। কিছু পরিস্থিতিতে, এটি বাধাগ্রস্ত হতে পারে।
,অ্যান্ড্রয়েড অ্যাপ ফ্রেমওয়ার্ক UI হল একটি View দিয়ে শুরু হওয়া অবজেক্টের একটি শ্রেণিবিন্যাসের উপর ভিত্তি করে তৈরি। সমস্ত UI উপাদান পরিমাপের একটি সিরিজ এবং একটি লেআউট প্রক্রিয়ার মধ্য দিয়ে যায় যা তাদের একটি আয়তক্ষেত্রাকার এলাকায় ফিট করে। তারপর, ফ্রেমওয়ার্কটি সমস্ত দৃশ্যমান ভিউ অবজেক্টকে এমন একটি পৃষ্ঠে রেন্ডার করে যা WindowManager দ্বারা অ্যাপটিকে ফোরগ্রাউন্ডে আনার সময় সেট আপ করা হয়েছিল। অ্যাপের UI থ্রেড প্রতি ফ্রেমে একটি বাফারে লেআউট এবং রেন্ডারিং সম্পাদন করে।
সারফেসভিউ
সারফেসভিউ হলো এমন একটি উপাদান যা আপনার ভিউ হায়ারার্কির মধ্যে একটি অতিরিক্ত কম্পোজিট স্তর এম্বেড করতে ব্যবহার করা যেতে পারে। সারফেসভিউ অন্যান্য ভিউয়ের মতো একই লেআউট প্যারামিটার নেয়, তাই এটি অন্য যেকোনো ভিউয়ের মতোই ম্যানিপুলেট করা যেতে পারে, তবে সারফেসভিউয়ের বিষয়বস্তু স্বচ্ছ।
যখন আপনি কোন বহিরাগত বাফার সোর্স, যেমন GL কনটেক্সট বা মিডিয়া ডিকোডার দিয়ে রেন্ডার করেন, তখন স্ক্রিনে বাফার প্রদর্শনের জন্য আপনাকে বাফার সোর্স থেকে বাফার কপি করতে হবে। SurfaceView ব্যবহার করে আপনি এটি করতে পারবেন।
যখন SurfaceView-এর ভিউ কম্পোনেন্টটি দৃশ্যমান হতে থাকে, তখন ফ্রেমওয়ার্কটি SurfaceControl-কে SurfaceFlinger থেকে একটি নতুন সারফেসের অনুরোধ করতে বলে। সারফেস তৈরি বা ধ্বংস হয়ে গেলে কলব্যাক পেতে, SurfaceHolder ইন্টারফেস ব্যবহার করুন। ডিফল্টরূপে, ফ্রেমওয়ার্কটি নতুন তৈরি সারফেসটিকে অ্যাপ UI সারফেসের পিছনে রাখে। নতুন সারফেসটি উপরে রাখার জন্য আপনি ডিফল্ট Z-অর্ডারিং ওভাররাইড করতে পারেন।
SurfaceView দিয়ে রেন্ডারিং করা সেইসব ক্ষেত্রে উপকারী যেখানে আপনাকে আলাদা সারফেসে রেন্ডার করতে হবে, যেমন যখন আপনি ক্যামেরা API বা OpenGL ES কনটেক্সট ব্যবহার করে রেন্ডার করেন। যখন আপনি SurfaceView দিয়ে রেন্ডার করেন, তখন SurfaceFlinger সরাসরি স্ক্রিনে বাফার কম্পোজ করে। SurfaceView ছাড়া, আপনাকে একটি অফস্ক্রিন সারফেসে বাফার কম্পোজ করতে হবে, যা পরে স্ক্রিনে কম্পোজিট হয়ে যায়, তাই SurfaceView দিয়ে রেন্ডারিং অতিরিক্ত কাজ বন্ধ করে দেয়। SurfaceView দিয়ে রেন্ডার করার পরে, কার্যকলাপের জীবনচক্রের সাথে সমন্বয় করতে UI থ্রেড ব্যবহার করুন এবং প্রয়োজনে ভিউয়ের আকার বা অবস্থানের সাথে সামঞ্জস্য করুন। তারপর, হার্ডওয়্যার কম্পোজার অ্যাপ UI এবং অন্যান্য স্তরগুলিকে মিশ্রিত করে।
নতুন পৃষ্ঠটি হল একটি BufferQueue-এর উৎপাদক দিক, যার গ্রাহক হল একটি SurfaceFlinger স্তর। আপনি যেকোনো প্রক্রিয়া ব্যবহার করে পৃষ্ঠটি আপডেট করতে পারেন যা একটি BufferQueue-কে ফিড করতে পারে, যেমন পৃষ্ঠ-সরবরাহকৃত ক্যানভাস ফাংশন, একটি EGLSurface সংযুক্ত করা এবং GLES দিয়ে পৃষ্ঠের উপর অঙ্কন করা, অথবা পৃষ্ঠটি লেখার জন্য একটি মিডিয়া ডিকোডার কনফিগার করা।
সারফেসভিউ এবং কার্যকলাপের জীবনচক্র
সারফেসভিউ ব্যবহার করার সময়, মূল UI থ্রেড ছাড়া অন্য কোনও থ্রেড থেকে সারফেসটি রেন্ডার করুন।
সারফেসভিউ সহ একটি কার্যকলাপের জন্য, দুটি পৃথক কিন্তু পরস্পর নির্ভরশীল স্টেট মেশিন রয়েছে:
- অ্যাপ
onCreate
/onResume
/onPause
- পৃষ্ঠ তৈরি/পরিবর্তিত/ধ্বংস
যখন কার্যকলাপ শুরু হবে, আপনি এই ক্রমে কলব্যাক পাবেন:
-
onCreate()
-
onResume()
-
surfaceCreated()
-
surfaceChanged()
যদি আপনি পিছনে ক্লিক করেন, তাহলে আপনি পাবেন:
-
onPause()
-
surfaceDestroyed()
(পৃষ্ঠটি চলে যাওয়ার ঠিক আগে কল করা হয়)
যদি আপনি স্ক্রিনটি ঘোরান, তাহলে অ্যাক্টিভিটিটি ভেঙে পুনরায় তৈরি করা হবে এবং আপনি সম্পূর্ণ চক্রটি পাবেন। isFinishing()
চেক করে আপনি এটি দ্রুত পুনঃসূচনা করতে পারবেন। কোনও অ্যাক্টিভিটি এত দ্রুত শুরু/বন্ধ করা সম্ভব যে onPause surfaceCreated()
onPause()
ঘটে।
যদি আপনি স্ক্রিনটি খালি করার জন্য পাওয়ার বোতামটি ট্যাপ করেন, তাহলে আপনি surfaceDestroyed()
ছাড়াই শুধুমাত্র onPause()
পাবেন। সারফেসটি সক্রিয় থাকে এবং রেন্ডারিং চালিয়ে যেতে পারে। আপনি যদি কোরিওগ্রাফার ইভেন্টগুলি অনুরোধ করতে থাকেন তবে আপনি তাদের পেতে পারেন। যদি আপনার এমন একটি লক স্ক্রিন থাকে যা একটি ভিন্ন ওরিয়েন্টেশনকে বাধ্য করে, তাহলে ডিভাইসটি আনব্ল্যাঙ্ক করা হলে আপনার কার্যকলাপ পুনরায় চালু হতে পারে। অন্যথায়, আপনি আগের মতো একই সারফেস নিয়ে স্ক্রিন-ব্ল্যাঙ্ক থেকে বেরিয়ে আসতে পারেন।
থ্রেডের জীবনকাল পৃষ্ঠের সাথে বা কার্যকলাপের সাথে সংযুক্ত করা যেতে পারে, পর্দা ফাঁকা হয়ে গেলে আপনি কী করতে চান তার উপর নির্ভর করে। থ্রেডটি অ্যাক্টিভিটি স্টার্ট/স্টপ অথবা সারফেস তৈরি/ধ্বংসে শুরু/বন্ধ করতে পারে।
থ্রেডটি Activity start/stop-এ start/stop থাকা অ্যাপের জীবনচক্রের সাথে ভালোভাবে কাজ করে। আপনি onResume()
এ রেন্ডারার থ্রেড শুরু করেন এবং onStop()
এ এটি বন্ধ করেন। থ্রেড তৈরি এবং কনফিগার করার সময়, কখনও কখনও সারফেসটি ইতিমধ্যেই বিদ্যমান থাকে, অন্য সময় এটি থাকে না (উদাহরণস্বরূপ, পাওয়ার বোতাম দিয়ে স্ক্রিন টগল করার পরেও এটি সক্রিয় থাকে)। থ্রেডে ইনিশিয়ালাইজ করার আগে আপনাকে সারফেস তৈরি হওয়ার জন্য অপেক্ষা করতে হবে। আপনি surfaceCreate()
কলব্যাকে ইনিশিয়ালাইজ করতে পারবেন না কারণ সারফেসটি পুনরায় তৈরি না করা হলে এটি আবার চালু হবে না। পরিবর্তে, সারফেস অবস্থাটি জিজ্ঞাসা করুন বা ক্যাশে করুন এবং এটি রেন্ডারার থ্রেডে ফরোয়ার্ড করুন।
সারফেস create/destroy-তে থ্রেড স্টার্ট/স্টপ থাকা ভালো কাজ করে কারণ সারফেস এবং রেন্ডারার যৌক্তিকভাবে একে অপরের সাথে জড়িত। সারফেস তৈরি হওয়ার পরে আপনি থ্রেডটি শুরু করেন, যা কিছু ইন্টারথ্রেড যোগাযোগের সমস্যা এড়ায়; এবং সারফেস তৈরি/পরিবর্তিত বার্তাগুলি ফরোয়ার্ড করা হয়। স্ক্রিন ফাঁকা হয়ে গেলে রেন্ডারিং বন্ধ হয়ে যায় এবং খালি না হলে পুনরায় শুরু হয় তা যাচাই করার জন্য, কোরিওগ্রাফারকে ফ্রেম ড্র কলব্যাক আহ্বান করা বন্ধ করতে বলুন। রেন্ডারার থ্রেড চলমান থাকলে onResume()
কলব্যাকগুলি পুনরায় শুরু করে। তবে, আপনি যদি ফ্রেমের মধ্যে অতিবাহিত সময়ের উপর ভিত্তি করে অ্যানিমেট করেন, তাহলে পরবর্তী ইভেন্ট আসার আগে একটি বড় ব্যবধান থাকতে পারে; একটি স্পষ্ট বিরতি/রিজিউম বার্তা ব্যবহার করলে এই সমস্যাটি সমাধান হতে পারে।
থ্রেডের লাইফকাল অ্যাক্টিভিটির সাথে সংযুক্ত হোক বা সারফেসের সাথে, উভয় বিকল্পই রেন্ডারার থ্রেড কীভাবে কনফিগার করা হয়েছে এবং এটি কার্যকর হচ্ছে কিনা তার উপর ফোকাস করে। একটি সম্পর্কিত উদ্বেগ হল অ্যাক্টিভিটি বন্ধ হয়ে গেলে থ্রেড থেকে অবস্থা বের করা ( onStop()
অথবা onSaveInstanceState()
); এই ধরনের ক্ষেত্রে, থ্রেডের লাইফকাল অ্যাক্টিভিটির সাথে সংযুক্ত করা সবচেয়ে ভালো কাজ করে কারণ রেন্ডারার থ্রেড যুক্ত হওয়ার পরে, রেন্ডার করা থ্রেডের অবস্থা সিঙ্ক্রোনাইজেশন প্রিমিটিভ ছাড়াই অ্যাক্সেস করা যেতে পারে।
GLSurfaceView সম্পর্কে
GLSurfaceView ক্লাসটি EGL প্রসঙ্গ পরিচালনা, ইন্টারথ্রেড যোগাযোগ এবং কার্যকলাপের জীবনচক্রের সাথে মিথস্ক্রিয়ার জন্য সহায়ক ক্লাস প্রদান করে। GLES ব্যবহার করার জন্য আপনাকে GLSurfaceView ব্যবহার করার প্রয়োজন নেই।
উদাহরণস্বরূপ, GLSurfaceView রেন্ডারিংয়ের জন্য একটি থ্রেড তৈরি করে এবং সেখানে একটি EGL প্রসঙ্গ কনফিগার করে। কার্যকলাপ বিরতি দিলে অবস্থা স্বয়ংক্রিয়ভাবে পরিষ্কার হয়ে যায়। GLSurfaceView এর সাথে GLES ব্যবহার করার জন্য বেশিরভাগ অ্যাপের EGL সম্পর্কে কিছু জানার প্রয়োজন হয় না।
বেশিরভাগ ক্ষেত্রে, GLSurfaceView GLES এর সাথে কাজ করা সহজ করে তুলতে পারে। কিছু পরিস্থিতিতে, এটি বাধাগ্রস্ত হতে পারে।