সারফেসভিউ এবং জিএলসুরফেসভিউ

Android অ্যাপ্লিকেশান ফ্রেমওয়ার্ক UI 'তে যে বস্তু একটি দিয়ে শুরু একটি অনুক্রমের উপর ভিত্তি করে তৈরি দেখুন । সমস্ত ইউআই উপাদানগুলি পরিমাপের একটি সিরিজ এবং একটি লেআউট প্রক্রিয়া যা তাদের একটি আয়তক্ষেত্রাকার অঞ্চলে ফিট করে go তারপরে, সমস্ত দৃশ্যমান দর্শনীয় বস্তুগুলিকে এমন একটি পৃষ্ঠায় রেন্ডার করা হয় যা উইন্ডো ম্যানেজার দ্বারা সেট আপ করা হয়েছিল যখন অ্যাপ্লিকেশনটিকে সম্মুখভাগে আনা হয়েছিল। অ্যাপ্লিকেশনটির ইউআই থ্রেড লেআউট সম্পাদন করে এবং ফ্রেম প্রতি বাফারে রেন্ডারিং করে।

সারফেসভিউ

একটি সারফেসভিউ এমন একটি উপাদান যা আপনি আপনার দর্শনক্রমক্রমের মধ্যে একটি অতিরিক্ত সংমিশ্রণ স্তর এম্বেড করতে ব্যবহার করতে পারেন। একটি সারফেসভিউ অন্যান্য দর্শনগুলির মতো একই লেআউট প্যারামিটার নেয়, সুতরাং এটি অন্য যে কোনও দৃশ্যের মতো চালিত করা যায় তবে সারফেসভিউয়ের সামগ্রীগুলি স্বচ্ছ।

আপনি যখন কোনও বাহ্যিক বাফার উত্স, যেমন জিএল প্রসঙ্গ বা মিডিয়া ডিকোডার দিয়ে রেন্ডার করেন তখন আপনাকে স্ক্রিনে বাফারগুলি প্রদর্শনের জন্য বাফার উত্স থেকে বাফারগুলি অনুলিপি করতে হবে। সারফেসভিউ ব্যবহার করা আপনাকে এটি করতে সক্ষম করে।

যখন সারফেসভিউয়ের ভিউ উপাদানটি দৃশ্যমান হতে চলেছে তখন কাঠামোটি সারফেসফ্রন্টার থেকে নতুন পৃষ্ঠের জন্য অনুরোধ করতে সারফেসকন্ট্রোলকে বলে। পৃষ্ঠটি তৈরি বা ধ্বংস হয়ে গেলে কলব্যাকগুলি গ্রহণ করতে সার্ফেসহোল্ডার ইন্টারফেসটি ব্যবহার করুন। ডিফল্টরূপে, সদ্য নির্মিত পৃষ্ঠটিকে অ্যাপ্লিকেশন UI পৃষ্ঠের পিছনে রাখা হয়। নতুন পৃষ্ঠটিকে উপরে রাখার জন্য আপনি ডিফল্ট জেড-অর্ডারিংকে ওভাররাইড করতে পারেন।

সারফেসভিউয়ের সাথে রেন্ডারিং এমন ক্ষেত্রে উপকারী যেখানে আপনার পৃথক পৃষ্ঠে রেন্ডার করা দরকার, যেমন আপনি যখন ক্যামেরা এপিআই বা কোনও ওপেনজিএল ইএস প্রসঙ্গটি রেন্ডার করেন। আপনি যখন সারফেসভিউয়ের সাথে রেন্ডার করবেন তখন সার্ফেসফ্লিংগার সরাসরি স্ক্রিনে বাফারগুলি রচনা করে। কোনও সারফেসভিউ ছাড়া আপনার কোনও স্ক্রিন পৃষ্ঠে মিশ্রিত বাফার তৈরি করা দরকার যা পরে স্ক্রিনে সংমিশ্রিত হয়, সুতরাং সারফেসভিউয়ের সাথে রেন্ডারিং অতিরিক্ত কাজ সরিয়ে দেয়। সারফেসভিউয়ের সাথে রেন্ডার করার পরে, ক্রিয়াকলাপের জীবনচক্রের সাথে সমন্বয় করতে ইউআই থ্রেডটি ব্যবহার করুন এবং প্রয়োজনে দৃশ্যের আকার বা অবস্থানের সাথে সামঞ্জস্য করুন। তারপরে, হার্ডওয়্যার সুরকার অ্যাপ্লিকেশন UI এবং অন্যান্য স্তরগুলিকে মিশ্রিত করে।

নতুন পৃষ্ঠটি হ'ল একটি বাফেরকিউর প্রযোজক, যার গ্রাহক একটি সারফেসফ্লিনগার স্তর। আপনি কোনও সিস্টেমের সাহায্যে পৃষ্ঠকে আপডেট করতে পারেন যা কোনও বাফারকিউয়ে খাদ্য সরবরাহ করতে পারে, যেমন পৃষ্ঠ-সরবরাহিত ক্যানভাস ফাংশনগুলি, একটি EGLSurface সংযুক্ত করা এবং GLES সহ পৃষ্ঠে অঙ্কন করা, বা পৃষ্ঠটি লেখার জন্য একটি মিডিয়া ডিকোডার কনফিগার করা।

সারফেসভিউ এবং ক্রিয়াকলাপ জীবনচক্র

কোনও সারফেসভিউ ব্যবহার করার সময় মূল ইউআই থ্রেড বাদে অন্য একটি থ্রেড থেকে পৃষ্ঠটি রেন্ডার করুন।

সারফেসভিউয়ের সাথে ক্রিয়াকলাপের জন্য দুটি পৃথক তবে পরস্পর নির্ভরশীল রাষ্ট্র মেশিন রয়েছে:

  • অ্যাপ onCreate / onResume / onPause
  • পৃষ্ঠ তৈরি / পরিবর্তন / ধ্বংস

যখন ক্রিয়াকলাপ শুরু হয়, আপনি এই ক্রমে কলব্যাকগুলি পান:

  1. onCreate()
  2. onResume()
  3. surfaceCreated()
  4. surfaceChanged()

আপনি যদি পিছনে ক্লিক করেন তবে আপনি পাবেন:

  1. onPause()
  2. surfaceDestroyed() ( surfaceDestroyed() চলে যাওয়ার ঠিক আগে বলা হয়)

আপনি যদি স্ক্রিনটি ঘোরান, ক্রিয়াকলাপটি নষ্ট হয়ে যায় এবং পুনরায় তৈরি করা হয় এবং আপনি পুরো চক্রটি পান। এটি isFinishing() পরীক্ষা করে এটি দ্রুত পুনঃসূচনা করতে পারেন। এটা তোলে যাতে দ্রুত শুরু করতে / একটি কার্যকলাপ বন্ধ সম্ভব surfaceCreated() পরে কি onPause()

আপনি পর্দায় ফাঁকা করার ক্ষমতা বোতামটি আলতো চাপুন, তাহলে আপনি শুধুমাত্র পেতে onPause() ছাড়া surfaceDestroyed() । পৃষ্ঠটি সক্রিয় থাকে, এবং রেন্ডারিং চালিয়ে যেতে পারে। কোরিওগ্রাফার ইভেন্টগুলি অনুরোধ অব্যাহত রাখলে আপনি সেগুলি পেতেই পারেন। আপনার যদি লক স্ক্রিন থাকে যা অন্যরকম ঝুঁকির জন্য বাধ্য করে, ডিভাইসটি আনব্লেঙ্ক করা না থাকলে আপনার ক্রিয়াকলাপটি আবার শুরু করা যেতে পারে। অন্যথায়, আপনি আগের মতো একই পৃষ্ঠের সাথে পর্দা-ফাঁকা থেকে বেরিয়ে আসতে পারেন।

যখন পর্দা ফাঁকা হয়ে যায় তখন আপনি কী হতে চান তার উপর নির্ভর করে থ্রেডটির জীবনকাল পৃষ্ঠের সাথে বা ক্রিয়াকলাপের সাথে আবদ্ধ হতে পারে। ক্রিয়াকলাপ শুরু / থামার সময় বা পৃষ্ঠে তৈরি / ধ্বংস করতে থ্রেডটি শুরু / থামতে পারে।

ক্রিয়াকলাপের সূচনা / স্টপ থ্রোড থাকা / বন্ধ হওয়া অ্যাপ লাইফাইসাইকেলের সাথে ভাল কাজ করে। আপনি রেন্ডারার থ্রেডটি onResume() এবং এটি onStop() থামান। থ্রেড তৈরি এবং কনফিগার করার সময়, কখনও কখনও পৃষ্ঠটি ইতিমধ্যে উপস্থিত থাকে, অন্য সময় এটি হয় না (উদাহরণস্বরূপ, পাওয়ার বোতামের সাহায্যে স্ক্রিনটি টগল করার পরে এটি এখনও সক্রিয় থাকে)। থ্রেড শুরু করার আগে আপনাকে পৃষ্ঠটি তৈরি হওয়ার জন্য অপেক্ষা করতে হবে। আপনি surfaceCreate() কলব্যাকের সূচনা করতে পারবেন না কারণ যদি পৃষ্ঠটি পুনরায় তৈরি না করা হয় তবে এটি আর ফায়ার করবে না। পরিবর্তে, অনুসন্ধান পৃষ্ঠতলের অবস্থা জিজ্ঞাসা করুন বা ক্যাশে করুন এবং এটিকে রেন্ডার থ্রেডে ফরোয়ার্ড করুন।

পৃষ্ঠে থ্রেড শুরু / থামানো ভাল কাজ করে / ধ্বংস করে ভাল কাজ করে কারণ পৃষ্ঠ এবং রেন্ডারারটি যৌক্তিকভাবে জড়িত। পৃষ্ঠটি তৈরি হওয়ার পরে আপনি থ্রেডটি শুরু করেন যা কিছু আন্তঃবাহিত যোগাযোগের উদ্বেগকে এড়িয়ে চলে; এবং পৃষ্ঠ তৈরি / পরিবর্তিত বার্তা সহজভাবে ফরোয়ার্ড করা হয়। স্ক্রিনটি ফাঁকা হয়ে গেলে রেন্ডারিং বন্ধ হয়ে যায় এবং খালি হয়ে গেলে পুনরায় শুরু হয় তা নিশ্চিত করতে, কোরিওগ্রাফারকে ফ্রেম ড্র কলব্যাক শুরু করা বন্ধ করতে বলুন। onResume() রেন্ডারারের থ্রেড চলমান থাকলে কলব্যাকগুলি পুনরায় শুরু করে। তবে, যদি আপনি ফ্রেমের মধ্যে অতিবাহিত সময়ের উপর ভিত্তি করে অ্যানিমেট করেন তবে পরবর্তী ইভেন্টটি আসার আগে একটি বড় ব্যবধান থাকতে পারে; একটি সুস্পষ্ট বিরতি / পুনঃসূচনা বার্তা ব্যবহার করা এই সমস্যাটি সমাধান করতে পারে।

উভয় বিকল্প, থ্রেডটির জীবনকাল ক্রিয়াকলাপ বা পৃষ্ঠের সাথে আবদ্ধ কিনা, রেন্ডারার থ্রেডটি কীভাবে কনফিগার করা হয়েছে এবং এটি কার্যকর করছে কিনা তার দিকে ফোকাস। সম্পর্কিত উদ্বেগটি ক্রিয়াকলাপটি onStop() onSaveInstanceState() বা onSaveInstanceState() ) এ মারা যাওয়ার পরে থ্রেড থেকে রাষ্ট্রটি আহরণ করছে; এই ধরনের ক্ষেত্রে, থ্রেডটির জীবনকালটি কার্যকলাপের সাথে বেঁধে রাখার কাজটি সবচেয়ে ভাল কাজ করে কারণ রেন্ডারার থ্রেড যুক্ত হওয়ার পরে, রেন্ডারযুক্ত থ্রেডের রাজ্য সিঙ্ক্রোনাইজেশন আদিমগুলি ছাড়াই অ্যাক্সেস করা যায়।

জিএলসুরফেসভিউ

GLSurfaceView বর্গ কার্যকলাপ জীবনচক্র সঙ্গে EGL প্রসঙ্গে interthread যোগাযোগ এবং মিথষ্ক্রিয়া পরিচালনার জন্য সাহায্যকারী শ্রেণীর প্রদান করে। GLES ব্যবহার করার জন্য আপনাকে একটি GLSurfaceView ব্যবহার করার দরকার নেই।

উদাহরণস্বরূপ, জিএলসুরফেসভিউ রেন্ডারিংয়ের জন্য একটি থ্রেড তৈরি করে এবং সেখানে একটি EGL প্রসঙ্গটি কনফিগার করে। ক্রিয়াকলাপ বিরতি দিলে রাষ্ট্রটি স্বয়ংক্রিয়ভাবে পরিষ্কার হয়ে যায়। বেশিরভাগ অ্যাপ্লিকেশনকে জিএলএসরফেসভিউয়ের সাথে জিএলইএস ব্যবহার করতে ইজিএল সম্পর্কে কিছু জানার দরকার নেই।

বেশিরভাগ ক্ষেত্রে, GLSurfaceView GLES এর সাথে কাজ করা আরও সহজ করে তুলতে পারে। কিছু পরিস্থিতিতে, এটি পথে যেতে পারে।