সারফেসভিউ এবং ভিউয়ের মধ্যে পার্থক্য?


211

এটি কখন প্রয়োজন, বা এর SurfaceViewপরিবর্তে একটি ব্যবহার করা ভাল View?

উত্তর:


210

ভিউগুলি সমস্ত একই জিইউআই থ্রেডে আঁকা হয় যা সমস্ত ব্যবহারকারীর মিথস্ক্রিয়াতেও ব্যবহৃত হয়।

সুতরাং আপনার যদি GUI দ্রুত আপডেট করার প্রয়োজন হয় বা যদি রেন্ডারিং খুব বেশি সময় নেয় এবং ব্যবহারকারীর অভিজ্ঞতাকে প্রভাবিত করে তবে ব্যবহার করুন SurfaceView


2
পিয়ারের উত্তরটি দেখুন যাতে আরও বিশদ রয়েছে।
হেলিন ওয়াং


এটি এখন আর এই সহজ নয়। পিয়েরের উত্তরটি পরীক্ষা করুন; এর বিশদ আর্কিটেকচার ডক ( উত্স.অ্যান্ড্রয়েড / ডিভাইস / অনুচ্ছেদ / अर्চিটেকচার এইচটিএমএল ) এর লিঙ্ক রয়েছে এবং কেন ক্যানভাস রেন্ডারিংয়ের হার্ডওয়্যার ত্বরণ কাস্টম ভিউগুলিকে আরও ভাল পছন্দ করতে পারে তা ব্যাখ্যা করে।
17

1
সারফেসভিউয়ের পরিবর্তে দৃশ্যে স্ট্যাক করার জন্য ফ্রেমলাউট কখন ব্যবহার করবেন?
ইগোরগানাপলস্কি

103

কয়েকটি জিনিস আমি উল্লেখ করেছি:

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

আরও তথ্যের জন্য (এবং দুর্দান্ত ব্যবহারের উদাহরণ) SDK এর উদাহরণ বিভাগে লুনারল্যান্ডার প্রকল্পটি দেখুন।


36
অবগতির জন্য ... একটি SurfaceView এখন স্বচ্ছ হতে পারে: stackoverflow.com/questions/5391089/...
স্টিভ

@ র‌্যালফ্লিয়ন: সারফেস ভিউগুলি স্বচ্ছ হতে পারে না তার অর্থ কী? অন্যান্য দর্শনগুলি কি পৃষ্ঠের দৃশ্যকে ওভারল্যাপ করতে পারে? উদাহরণস্বরূপ, আমি কি কোনও সারফেস ভিউতে অস্থায়ীভাবে একটি তালিকাভিউ প্রদর্শন করতে পারি?
আশ্বিন

78

05/09/2014 আপডেট হয়েছে

ঠিক আছে. আমাদের কাছে এখন অফিসিয়াল ডকুমেন্ট আছে এটি আমি উল্লেখ করেছি, আরও ভাল উপায়ে কথা বললাম।


এখানে আরও বিস্তারিত পড়ুন ।

হ্যাঁ, মূল পার্থক্যটি পৃষ্ঠতলটি ব্যাকগ্রাউন্ড থ্রেডে আপডেট করা যেতে পারে। তবে আপনি যত্ন নিতে পারেন আরও অনেক কিছু আছে।

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

  • সারফেসভিউ হার্ডওয়্যারকে ত্বরান্বিত করা যায় না (জেবি 4.2 হিসাবে) যখন সাধারণ ভিউতে 95% ক্রিয়াকলাপগুলি ওপেনজিএল ইএস ব্যবহার করে এইচডাব্লু ত্বরান্বিত হয়।

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

  • আপডেট করার সময়টি আলাদা। সাধারন দর্শন আপডেট করার পদ্ধতিটি বাধা বা ফ্রেমওয়ার্ক দ্বারা নিয়ন্ত্রিত: আপনি view.invalidateইউআই থ্রেডে বা view.postInvalidঅন্য থ্রেডে ফোনটি ফ্রেমওয়ার্কটিতে নির্দেশ করতে চান যে ভিউটি আপডেট হওয়া উচিত। তবে ভিউটি তাত্ক্ষণিকভাবে আপডেট হবে না তবে পরবর্তী ভিএসওয়াইএনসি ইভেন্টটি না আসা পর্যন্ত অপেক্ষা করুন। ভিএসওয়াইএনসি বোঝার সহজ পদ্ধতির বিষয়টি বিবেচনা করা এটি এমন একটি টাইমার হিসাবে বিবেচনা করা হয় যা 60fps স্ক্রিনের জন্য প্রতি 16 মিমি আগুন জ্বালিয়ে দেয়। অ্যান্ড্রয়েডে, সমস্ত সাধারণ ভিউ আপডেট (এবং প্রকৃতপক্ষে প্রদর্শিত হয় তবে আমি আজ এটি নিয়ে কথা বলব না), আরও মসৃণতা অর্জনের জন্য ভিএসওয়াইএনসির সাথে সিঙ্ক্রোনাইজ করা হয়েছে। এখন, পৃষ্ঠতলে ফিরে যান, আপনি এটি আপনার ইচ্ছা হিসাবে যে কোনও সময় রেন্ডার করতে পারেন। তবে, আমি খুব কমই বলতে পারি যে এটি কোনও সুবিধা কিনা, কারণ ডিসপ্লেটিও ভিএসওয়াইএনসি-র সাথে সিঙ্ক্রোনাইজ করা হয়েছে, যেমনটি আগেই বলা হয়েছিল।

2
আপনার উত্তর থেকে আমি অনুভূতিটি পেয়েছি যে সারফেসভিউয়ের চেয়ে ভিউ থেকে উত্পন্ন ক্লাসটি ব্যবহার করা ভাল। নাকি আমার কিছু ভুল হচ্ছে? এটি 2D গেম ডেভেলপমেন্ট টিউটোরিয়ালের সর্বাধিক বিরোধিতা করবে।
ঝড়

2
@ স্টটারম যে বিষয়টি বিবেচনায় নেবে তা হ'ল ডিজাইন অনুসারে কোনও সারফেসভিউ ইউআই থ্রেডকে ব্লক করা উচিত নয় যেখানে কেবলমাত্র ইউআই থ্রেড দ্বারা একটি ভিউ সংশোধন করা যায়। বেশিরভাগ গেমের সাথে, সারফেসভিউগুলি খুব ভাল রেন্ডারিং করবে যা সাধারণ ভিউ দিয়ে ইউআই থ্রেডকে অবরুদ্ধ করবে। সারফেসভিউয়ের আমার বোঝাপড়া থেকে এটি প্রাথমিক সুবিধা That
zgc7009

একটি রেন্ডার থ্রেড তৈরি করে আপনি কী বোঝাতে চাইছেন । আমাদের প্রত্যেকবার এটি ম্যানুয়ালি তৈরি করতে হবে?
ইগোরগানাপলস্কি

44

মূল পার্থক্যটি হ'ল SurfaceViewব্যাকগ্রাউন্ড থ্রেডগুলি দ্বারা আঁকতে পারে তবে তা Viewsপারে না। SurfaceViewsবেশি সংস্থান ব্যবহার করুন যদিও আপনার প্রয়োজন না থাকলে আপনি সেগুলি ব্যবহার করতে চান না।


"তারা আরও সংস্থান ব্যবহার করে যদিও আপনার প্রয়োজন না থাকলে আপনি সেগুলি ব্যবহার করতে চান না" " - কে বেশি সংস্থান ব্যবহার করে? ভিউ বা সারফেসভিউ?
আতঙ্ক

6
সারফেসভিউ ভিউয়ের চেয়ে বেশি সংস্থান ব্যবহার করে
রীতেশ গুন


আমরা যখন না আছে ?
ইগরগানাপলস্কি

12

SurfaceViewহ'ল অ্যান্ড্রয়েডের একটি কাস্টম ভিউ যা এর ভিতরে টানতে ব্যবহার করা যেতে পারে।

A Viewএবং a এর মধ্যে প্রধান পার্থক্য SurfaceViewহ'ল একটি ভিউ আঁকে UI Thread, যা ব্যবহারকারীর সমস্ত মিথস্ক্রিয়তার জন্য ব্যবহৃত হয়।

আপনি যদি ইউআইকে দ্রুত পর্যাপ্ত পরিমাণে আপডেট করতে চান এবং এতে একটি ভাল পরিমাণের তথ্য সরবরাহ করতে চান তবে একটি সারফেসভিউ আরও ভাল পছন্দ।

তবে কয়েকটি প্রযুক্তিগত অভ্যন্তর রয়েছে SurfaceView:

1. তারা হার্ডওয়ার ত্বরান্বিত হয় না।

২. আপনি যখন পদ্ধতিগুলিতে কল করেন invalidateবা সাধারণ দর্শনগুলি রেন্ডার করা হয় postInvalidate()তবে এর অর্থ এই নয় যে ভিউটি তত্ক্ষণাত আপডেট করা হবে (এ VSYNCপ্রেরণ করা হবে, এবং ওএস আপডেট হওয়ার পরে সিদ্ধান্ত নেয়। SurfaceViewসাথে সাথে আপডেট করা যেতে পারে।

3.. একটি সারফেসভিউতে রয়েছে বরাদ্দ surface buffer, তাই এটি আরও ব্যয়বহুল


হার্ডওয়ারটি ত্বরান্বিত করা কেন গুরুত্বপূর্ণ ?
ইগোরগানাপলস্কি

8

সারফেসভিউ এবং ভিউয়ের মধ্যে অন্যতম প্রধান পার্থক্য হ'ল স্ক্রিনটিকে একটি সাধারণ দৃশ্যের জন্য রিফ্রেশ করার জন্য আমাদের একই থ্রেড থেকে অকার্যকর পদ্ধতিতে কল করতে হবে যেখানে ভিউটি সংজ্ঞায়িত হয়েছে। তবে আমরা অকার্যকর বলি, সতেজতা তত্ক্ষণাত্ ঘটে না। এটি কেবলমাত্র ভিএসওয়াইএনসি সিগন্যালের পরবর্তী আগমনের পরে ঘটে। ভিএসওয়াইএনসি সিগন্যাল হ'ল একটি কার্নেল উত্পাদিত সংকেত যা প্রতি 16.6 এমএসে ঘটে বা এটি প্রতি সেকেন্ডে 60 ফ্রেম হিসাবে পরিচিত। সুতরাং আমরা যদি পর্দা সতেজকরণের উপর আরও নিয়ন্ত্রণ চাই (উদাহরণস্বরূপ খুব দ্রুত চলমান অ্যানিমেশন), আমাদের সাধারণ দেখার শ্রেণি ব্যবহার করা উচিত নয়।

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

https://youtu.be/kRqsoApOr9U

https://youtu.be/Ji84HJ85FIQ

https://youtu.be/U8igPoyrUf8


0

ক্লাসিক ভিউ ক্লাস নয় কেন সারফেসভিউ ব্যবহার করুন ...

একটি প্রধান কারণ সারফেসভিউ দ্রুত স্ক্রিনটি রেন্ডার করতে পারে।

সহজ কথায় একটি এসভি সময় নির্ধারণ এবং অ্যানিমেশন সরবরাহ করতে আরও সক্ষম capable

সারফেসভিউ কী তা আরও ভালভাবে বোঝার জন্য আমাদের এটিকে ভিউ ক্লাসের সাথে তুলনা করতে হবে।

পার্থক্য কী ... ভিডিওতে এই সহজ ব্যাখ্যাটি দেখুন

https://m.youtube.com/watch?feature=youtu.be&v=eltlqsHSG30

ওয়েলের সাথে আমাদের একটি বড় সমস্যা রয়েছে .... অ্যানিমেশনগুলি উপস্থাপনের সময়।

সাধারণত অ্যানড্রয়ে () অ্যান্ড্রয়েড রান-টাইম সিস্টেম থেকে কল করা হয়।

সুতরাং, অ্যান্ড্রয়েড রান-টাইম সিস্টেম যখন ড্র () এ কল করে তখন অ্যাপ্লিকেশনটি নিয়ন্ত্রণ করতে পারে না

প্রদর্শনের সময়, এবং এটি অ্যানিমেশনের জন্য গুরুত্বপূর্ণ। আমাদের সময় নির্ধারণের ব্যবধান রয়েছে

অ্যাপ্লিকেশন (আমাদের গেম) এবং অ্যান্ড্রয়েড রান-টাইম সিস্টেমের মধ্যে রয়েছে।

যে এসভি এটি একটি ডেডিকেটেড থ্রেড দ্বারা অনড্রে () কল করতে পারে।

সুতরাং: অ্যাপ্লিকেশন সময় নিয়ন্ত্রণ করে। সুতরাং আমরা অ্যানিমেশনের পরবর্তী বিটম্যাপ চিত্রটি প্রদর্শন করতে পারি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.