android - দ্বিধা: ফাংশন বনাম ক্রিয়াকলাপ ব্যবহার করার সময়:




android-fragments android-activity (10)

আমি জানি যে Activities আমার অ্যাপ্লিকেশনের একক স্ক্রীন প্রতিনিধিত্ব করার জন্য ডিজাইন করা হয়েছে, Fragments তাদের ভিতরে যুক্ত যুক্ত লজিকের সাথে পুনঃব্যবহারযোগ্য UI লেআউট হতে ডিজাইন করা হয়েছে।

অনেক দিন আগে পর্যন্ত, আমি একটি অ্যাপ্লিকেশন উন্নত করেছি কারণ এটি বলে যে তাদের উন্নত করা উচিত। আমি আমার অ্যাপ্লিকেশন একটি পর্দা প্রতিনিধিত্ব এবং ViewPager বা Google Maps জন্য Fragments ব্যবহৃত একটি Activity তৈরি। আমি খুব কমই একটি ListFragment বা অন্যান্য UI তৈরি করেছি যা কয়েকবার পুনঃব্যবহৃত করা যেতে পারে।

সম্প্রতি আমি এমন একটি প্রকল্পে হিংস্র হয়ে পড়েছি যা শুধুমাত্র ২ টি Activities মধ্যে একটি SettingsActivity Activities এবং অন্যটি হল মুখ্য Activities । মুখ্য MainActivity বিন্যাসটি অনেক লুকানো পূর্ণ পর্দা UI টুকরাগুলির সাথে জনবহুল এবং শুধুমাত্র একটি দেখানো হয়। Acitivty যুক্তিতে অ্যাপ্লিকেশন বিভিন্ন পর্দা মধ্যে অনেক FragmentTransitions আছে।

এই পদ্ধতি সম্পর্কে আমি যা পছন্দ করি তা হল অ্যাপ্লিকেশন ActionBar ব্যবহার করে, এটি অক্ষত থাকে এবং স্ক্রীন স্যুইচিং অ্যানিমেশনের সাথে সরাতে না পারে যা Activity স্যুইচিংয়ের সাথে ঘটে। এই যারা পর্দা সংক্রমণ একটি আরো অনুভূতি অনুভূতি দিতে।

তাই আমি অনুমান করছি যে আমি যা বলছি তা হল এই বিষয়ে আপনার বর্তমান উন্নয়ন পদ্ধতিটি ভাগ করা, আমি জানি এটি প্রথম চেহারার মত মতামত ভিত্তিক প্রশ্ন হতে পারে তবে আমি এটি একটি Android ডিজাইন এবং আর্কিটেকচারের প্রশ্ন হিসাবে দেখি ... সত্যিই কোনও মতামত ভিত্তিক এক।

আপডেট (01.05.2014): এই উপস্থাপনাটি স্কয়ার থেকে এরিক বার্কের মাধ্যমে, (যা আমি বলতে চাই তা হল Android ডেভেলপারদের জন্য অনেক দরকারী সরঞ্জামগুলির সাথে একটি দুর্দান্ত উপস্থাপনা। এবং আমি স্কয়ারে কোনওভাবে সম্পর্কিত নই)

http://www.infoq.com/presentations/Android-Design/

গত কয়েক মাস ধরে আমার ব্যক্তিগত অভিজ্ঞতা থেকে, আমি দেখেছি যে আমার অ্যাপ্লিকেশনগুলি তৈরি করার সর্বোত্তম উপায় হল অ্যাপ্লিকেশনের প্রবাহ উপস্থাপন করার জন্য এবং এমন সমস্ত টুকরাগুলি এক Activity উপস্থাপন করার জন্য এমন টুকরাগুলির গোষ্ঠী তৈরি করা। সুতরাং মূলত আপনার প্রবাহ সংখ্যা হিসাবে আপনার অ্যাপ্লিকেশন মধ্যে একই সংখ্যা থাকবে। এভাবে অ্যাকশন বার সমস্ত প্রবাহের স্ক্রিনগুলিতে অক্ষত থাকে, তবে প্রবাহকে পরিবর্তন করার জন্য পুনঃনির্মিত করা হয় যা অনেক বেশি জ্ঞান দেয়। যেমন এরিক বার্ক বলেছেন এবং আমিও এটি বুঝতে পেরেছি, যতটা সম্ভব সম্ভব কয়েকটি Activities ব্যবহার করার দর্শন সব পরিস্থিতিতেই প্রযোজ্য নয় কারণ এটি "ঈশ্বর" কার্যকলাপকে কলুষিত করে তোলে।


আচ্ছা, গুগলের বক্তৃতা অনুসারে (সম্ভবত here , আমি মনে রাখি না), যখনই সম্ভব হয় ফ্র্যাগমেন্ট ব্যবহার করার কথা বিবেচনা করা উচিত, কারণ এটি আপনার কোডটিকে বজায় রাখা এবং নিয়ন্ত্রণ করা সহজ করে তোলে।

যাইহোক, আমি মনে করি যে কিছু ক্ষেত্রে এটি খুব জটিল হতে পারে, যেমন টুকরাগুলিকে হোস্ট করে এমন কার্যকলাপগুলি তাদের মধ্যে নেভিগেট / যোগাযোগ করতে হবে।

আমার মনে হয় আপনার নিজের জন্য সিদ্ধান্ত নেওয়া উচিত আপনার জন্য সেরা। এটি সাধারণত একটি বিভাজন এবং বিপরীত একটি কার্যকলাপ রূপান্তর কঠিন যে নয়।

যদি আপনি কিছু আরও পড়তে চান তবে আমি here এই ডিলমার সম্পর্কে একটি পোস্ট তৈরি করেছি।


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

** একটি নতুন কার্যকলাপ শুরু করুন যদি এটি মূল ক্রিয়াকলাপটি এবং এটি একই সময়ে খোলা থাকে (একাধিক উইন্ডোজের কথা মনে করে)।

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


আমার দর্শন এই হল:

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

কার্যকলাপ পরিবর্তন ব্যয়বহুল, অধিকার? অন্তত আমি বিশ্বাস করি - যেহেতু পুরাতন ক্রিয়াকলাপকে ধ্বংস / বিরতি / বন্ধ করা, স্ট্যাকের দিকে ধাক্কা দেওয়া, এবং তারপরে নতুন ক্রিয়াকলাপ তৈরি / শুরু / পুনরায় শুরু করা দরকার।

এটা শুধু আমার দর্শনের পর থেকে fragments চালু করা হয়।


আমার মতে এটা সত্যিই প্রাসঙ্গিক নয়। বিবেচনা মূল চরিত্র

  1. আপনি কখনই UI এর অংশগুলি পুনঃব্যবহার করবেন (উদাহরণস্বরূপ মেনু),
  2. ট্যাবলেট জন্য অ্যাপ্লিকেশন হয়?

টুকরাগুলির প্রধান ব্যবহারটি মাল্টিপেন কার্যকলাপগুলি তৈরি করা, যা ট্যাবলেট / ফোন প্রতিক্রিয়াশীল অ্যাপ্লিকেশনের জন্য এটি নিখুঁত করে তোলে।


আমি ভাল ব্যবহারকারীর অভিজ্ঞতা জন্য fragments ব্যবহার। উদাহরণস্বরূপ, যদি আপনার একটি বোতাম থাকে এবং আপনি চালাতে চান তবে আপনি এটি ক্লিক করার সময় একটি ওয়েব পরিষেবাদি বলুন, আমি অভিভাবক কার্যকলাপে একটি ফ্র্যাগমেন্ট সংযুক্ত করি।

if (id == R.id.forecast) {

    ForecastFragment forecastFragment = new ForecastFragment();
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.replace(R.id.main_content, forecastFragment);
    ft.addToBackStack("backstack");
    forecastFragment.setArguments(b);
    ft.commit();
}

এভাবে ব্যবহারকারীকে অন্য ক্রিয়াকলাপে যেতে হবে না।

এবং দ্বিতীয়ত আমি Fragments পছন্দ কারণ আপনি ঘূর্ণন সময় সহজে তাদের পরিচালনা করতে পারেন।


একটি কার্যকলাপ অ্যাপ্লিকেশন এর ব্লক / উপাদান যা শেয়ার করুন এবং উদ্দেশ্য মাধ্যমে শুরু করতে ভুলবেন না ভুলবেন না! তাই আপনার আবেদন প্রতিটি কার্যকলাপ শুধুমাত্র এক ধরনের কাজ সমাধান করা উচিত। আপনার যদি আপনার অ্যাপ্লিকেশনে কেবলমাত্র এক টাস্ক থাকে তবে মনে হয় প্রয়োজন হলে আপনাকে শুধুমাত্র একটি ক্রিয়াকলাপ এবং অনেকগুলি টুকরা দরকার। অবশ্যই আপনি অন্য কাজের সমাধান যা ভবিষ্যতে ক্রিয়াকলাপে টুকরা পুনরায় ব্যবহার করতে পারেন। এই পদ্ধতির কর্মের স্পষ্ট এবং যৌক্তিক বিচ্ছেদ হতে হবে। এবং আপনি টুকরা বিভিন্ন সেট জন্য বিভিন্ন অভিপ্রায় ফিল্টার পরামিতি সঙ্গে একটি কার্যকলাপ বজায় রাখার প্রয়োজন নেই। আপনি প্রয়োজনীয়তা উপর ভিত্তি করে উন্নয়ন প্রক্রিয়ার নকশা পর্যায়ে কর্ম নির্ধারণ।


কার্যকলাপের উপর একটি fragment এক বড় সুবিধা হল যে, যে কোডটি ফাটল জন্য ব্যবহৃত হয় সেটি বিভিন্ন ক্রিয়াকলাপের জন্য ব্যবহার করা যেতে পারে। সুতরাং, এটি অ্যাপ্লিকেশন ডেভেলপমেন্টে কোডটির পুনরায় ব্যবহারযোগ্যতা সরবরাহ করে


কেন আমি সব ক্ষেত্রে কার্যকলাপ উপর খণ্ড পছন্দ।

  • কার্যকলাপ ব্যয়বহুল। Fragment মধ্যে, মতামত এবং সম্পত্তি রাজ্যের পৃথক করা হয় - যখন একটি backstack মধ্যে backstack , তার মতামত ধ্বংস করা হবে। কাজেই আপনি কার্যকলাপের চেয়ে অনেক বেশি খণ্ড খণ্ডন করতে পারেন।

  • Backstack ম্যানিপুলেশন। FragmentManager সঙ্গে, সব Fragments মুছে ফেলা সহজ, Fragments এবং ইত্যাদি তুলনায় আরো সন্নিবেশ। কিন্তু কার্যকলাপের জন্য, এটি সেই জিনিসগুলিকে কাজে লাগাতে একটি দুঃস্বপ্ন হবে।

  • একটি অনেক প্রত্যাশিত জীবনচক্র । যতক্ষণ হোস্ট কার্যকলাপ পুনর্ব্যবহৃত করা হয় না। backstack মধ্যে fragments পুনর্ব্যবহৃত করা হবে না। সুতরাং FragmentManager::getFragments() ব্যবহার করা যায় নির্দিষ্ট ফ্র্যাগমেন্ট (উত্সাহিত নয় FragmentManager::getFragments() খুঁজে পেতে।


স্ক্রীনের জন্য fragment ব্যবহার fragment জন্য বেস প্রদানের জন্য অ্যাপ্লিকেশন প্রতি এক কার্যকলাপ ব্যবহার করুন, activites টুকরাগুলি পুনঃব্যবহারযোগ্য টুকরাগুলির তুলনায় হালকা ওজন লাইট ওজন হয় যা অ্যাপ্লিকেশনের জন্য উপযুক্ত এবং ফোন এবং ট্যাবলেট উভয়ই সমর্থন করে






architecture