উত্তর:
ভিউগুলি সমস্ত একই জিইউআই থ্রেডে আঁকা হয় যা সমস্ত ব্যবহারকারীর মিথস্ক্রিয়াতেও ব্যবহৃত হয়।
সুতরাং আপনার যদি GUI দ্রুত আপডেট করার প্রয়োজন হয় বা যদি রেন্ডারিং খুব বেশি সময় নেয় এবং ব্যবহারকারীর অভিজ্ঞতাকে প্রভাবিত করে তবে ব্যবহার করুন SurfaceView
।
কয়েকটি জিনিস আমি উল্লেখ করেছি:
আরও তথ্যের জন্য (এবং দুর্দান্ত ব্যবহারের উদাহরণ) SDK এর উদাহরণ বিভাগে লুনারল্যান্ডার প্রকল্পটি দেখুন।
05/09/2014 আপডেট হয়েছে
ঠিক আছে. আমাদের কাছে এখন অফিসিয়াল ডকুমেন্ট আছে । এটি আমি উল্লেখ করেছি, আরও ভাল উপায়ে কথা বললাম।
এখানে আরও বিস্তারিত পড়ুন ।
হ্যাঁ, মূল পার্থক্যটি পৃষ্ঠতলটি ব্যাকগ্রাউন্ড থ্রেডে আপডেট করা যেতে পারে। তবে আপনি যত্ন নিতে পারেন আরও অনেক কিছু আছে।
সারফেসভিউতে পৃষ্ঠতল বাফারকে উত্সর্গ করা হয়েছে যখন সমস্ত দর্শন ভিউরুট দ্বারা বরাদ্দকৃত একটি পৃষ্ঠের বাফারকে ভাগ করে। অন্য কথায়, সারফেসভিউয়ের জন্য আরও সংস্থান রয়েছে।
সারফেসভিউ হার্ডওয়্যারকে ত্বরান্বিত করা যায় না (জেবি 4.2 হিসাবে) যখন সাধারণ ভিউতে 95% ক্রিয়াকলাপগুলি ওপেনজিএল ইএস ব্যবহার করে এইচডাব্লু ত্বরান্বিত হয়।
আপনার কাস্টমাইজড সারফেসভিউ তৈরি করতে আরও কাজ করা উচিত। আপনার পৃষ্ঠার ক্রেটিটেড / ডেস্ট্রয় ইভেন্টটি শ্রোতার দরকার, একটি রেন্ডার থ্রেড তৈরি করা দরকার, আরও গুরুত্বপূর্ণভাবে, রেন্ডার থ্রেড এবং প্রধান থ্রেড সিঙ্ক্রোনাইজ করা হয়েছে। তবে ভিউটি কাস্টমাইজ করতে আপনার যা করতে হবে তা হ'ল ওভাররাইড onDraw
পদ্ধতি।
view.invalidate
ইউআই থ্রেডে বা view.postInvalid
অন্য থ্রেডে ফোনটি ফ্রেমওয়ার্কটিতে নির্দেশ করতে চান যে ভিউটি আপডেট হওয়া উচিত। তবে ভিউটি তাত্ক্ষণিকভাবে আপডেট হবে না তবে পরবর্তী ভিএসওয়াইএনসি ইভেন্টটি না আসা পর্যন্ত অপেক্ষা করুন। ভিএসওয়াইএনসি বোঝার সহজ পদ্ধতির বিষয়টি বিবেচনা করা এটি এমন একটি টাইমার হিসাবে বিবেচনা করা হয় যা 60fps স্ক্রিনের জন্য প্রতি 16 মিমি আগুন জ্বালিয়ে দেয়। অ্যান্ড্রয়েডে, সমস্ত সাধারণ ভিউ আপডেট (এবং প্রকৃতপক্ষে প্রদর্শিত হয় তবে আমি আজ এটি নিয়ে কথা বলব না), আরও মসৃণতা অর্জনের জন্য ভিএসওয়াইএনসির সাথে সিঙ্ক্রোনাইজ করা হয়েছে। এখন, পৃষ্ঠতলে ফিরে যান, আপনি এটি আপনার ইচ্ছা হিসাবে যে কোনও সময় রেন্ডার করতে পারেন। তবে, আমি খুব কমই বলতে পারি যে এটি কোনও সুবিধা কিনা, কারণ ডিসপ্লেটিও ভিএসওয়াইএনসি-র সাথে সিঙ্ক্রোনাইজ করা হয়েছে, যেমনটি আগেই বলা হয়েছিল।মূল পার্থক্যটি হ'ল SurfaceView
ব্যাকগ্রাউন্ড থ্রেডগুলি দ্বারা আঁকতে পারে তবে তা Views
পারে না।
SurfaceViews
বেশি সংস্থান ব্যবহার করুন যদিও আপনার প্রয়োজন না থাকলে আপনি সেগুলি ব্যবহার করতে চান না।
এ SurfaceView
হ'ল অ্যান্ড্রয়েডের একটি কাস্টম ভিউ যা এর ভিতরে টানতে ব্যবহার করা যেতে পারে।
A View
এবং a এর মধ্যে প্রধান পার্থক্য SurfaceView
হ'ল একটি ভিউ আঁকে
UI Thread
, যা ব্যবহারকারীর সমস্ত মিথস্ক্রিয়তার জন্য ব্যবহৃত হয়।
আপনি যদি ইউআইকে দ্রুত পর্যাপ্ত পরিমাণে আপডেট করতে চান এবং এতে একটি ভাল পরিমাণের তথ্য সরবরাহ করতে চান তবে একটি সারফেসভিউ আরও ভাল পছন্দ।
তবে কয়েকটি প্রযুক্তিগত অভ্যন্তর রয়েছে SurfaceView
:
1. তারা হার্ডওয়ার ত্বরান্বিত হয় না।
২. আপনি যখন পদ্ধতিগুলিতে কল করেন invalidate
বা সাধারণ দর্শনগুলি রেন্ডার করা হয় postInvalidate()
তবে এর অর্থ এই নয় যে ভিউটি তত্ক্ষণাত আপডেট করা হবে (এ VSYNC
প্রেরণ করা হবে, এবং ওএস আপডেট হওয়ার পরে সিদ্ধান্ত নেয়। SurfaceView
সাথে সাথে আপডেট করা যেতে পারে।
3.. একটি সারফেসভিউতে রয়েছে বরাদ্দ surface buffer
, তাই এটি আরও ব্যয়বহুল
সারফেসভিউ এবং ভিউয়ের মধ্যে অন্যতম প্রধান পার্থক্য হ'ল স্ক্রিনটিকে একটি সাধারণ দৃশ্যের জন্য রিফ্রেশ করার জন্য আমাদের একই থ্রেড থেকে অকার্যকর পদ্ধতিতে কল করতে হবে যেখানে ভিউটি সংজ্ঞায়িত হয়েছে। তবে আমরা অকার্যকর বলি, সতেজতা তত্ক্ষণাত্ ঘটে না। এটি কেবলমাত্র ভিএসওয়াইএনসি সিগন্যালের পরবর্তী আগমনের পরে ঘটে। ভিএসওয়াইএনসি সিগন্যাল হ'ল একটি কার্নেল উত্পাদিত সংকেত যা প্রতি 16.6 এমএসে ঘটে বা এটি প্রতি সেকেন্ডে 60 ফ্রেম হিসাবে পরিচিত। সুতরাং আমরা যদি পর্দা সতেজকরণের উপর আরও নিয়ন্ত্রণ চাই (উদাহরণস্বরূপ খুব দ্রুত চলমান অ্যানিমেশন), আমাদের সাধারণ দেখার শ্রেণি ব্যবহার করা উচিত নয়।
অন্যদিকে সারফেসভিউয়ের ক্ষেত্রে আমরা যত দ্রুত চাই স্ক্রিনটি রিফ্রেশ করতে পারি এবং আমরা এটি ব্যাকগ্রাউন্ড থ্রেড থেকে করতে পারি। সুতরাং পৃষ্ঠভূমিটি রিফ্রেশ করা সত্যই ভিএসওয়াইএনসির উপর নির্ভর করে না এবং যদি আমরা উচ্চ গতির অ্যানিমেশনটি করতে চাই তবে এটি খুব কার্যকর। আমার কাছে কয়েকটি প্রশিক্ষণ ভিডিও এবং উদাহরণ অ্যাপ্লিকেশন রয়েছে যা এই সমস্ত বিষয় সুন্দরভাবে ব্যাখ্যা করে explain দয়া করে নীচের প্রশিক্ষণের ভিডিওগুলি দেখুন।
ক্লাসিক ভিউ ক্লাস নয় কেন সারফেসভিউ ব্যবহার করুন ...
একটি প্রধান কারণ সারফেসভিউ দ্রুত স্ক্রিনটি রেন্ডার করতে পারে।
সহজ কথায় একটি এসভি সময় নির্ধারণ এবং অ্যানিমেশন সরবরাহ করতে আরও সক্ষম capable
সারফেসভিউ কী তা আরও ভালভাবে বোঝার জন্য আমাদের এটিকে ভিউ ক্লাসের সাথে তুলনা করতে হবে।
পার্থক্য কী ... ভিডিওতে এই সহজ ব্যাখ্যাটি দেখুন
https://m.youtube.com/watch?feature=youtu.be&v=eltlqsHSG30
ওয়েলের সাথে আমাদের একটি বড় সমস্যা রয়েছে .... অ্যানিমেশনগুলি উপস্থাপনের সময়।
সাধারণত অ্যানড্রয়ে () অ্যান্ড্রয়েড রান-টাইম সিস্টেম থেকে কল করা হয়।
সুতরাং, অ্যান্ড্রয়েড রান-টাইম সিস্টেম যখন ড্র () এ কল করে তখন অ্যাপ্লিকেশনটি নিয়ন্ত্রণ করতে পারে না
প্রদর্শনের সময়, এবং এটি অ্যানিমেশনের জন্য গুরুত্বপূর্ণ। আমাদের সময় নির্ধারণের ব্যবধান রয়েছে
অ্যাপ্লিকেশন (আমাদের গেম) এবং অ্যান্ড্রয়েড রান-টাইম সিস্টেমের মধ্যে রয়েছে।
যে এসভি এটি একটি ডেডিকেটেড থ্রেড দ্বারা অনড্রে () কল করতে পারে।
সুতরাং: অ্যাপ্লিকেশন সময় নিয়ন্ত্রণ করে। সুতরাং আমরা অ্যানিমেশনের পরবর্তী বিটম্যাপ চিত্রটি প্রদর্শন করতে পারি।