অ্যাক্টিভিটি.ফিনিশ () অ্যান্ড্রয়েডে কীভাবে কাজ করে?


108

যখন কেউ Activityতার finish()পদ্ধতিটি কল করে তখন কী ঘটে তার একটি বিবরণ সরবরাহ করতে পারেন ?

এটি অবিলম্বে প্রস্থান করে, বা এটি যে ফাংশনটি বলা হয়েছিল তা সম্পূর্ণ করে?


উত্তর:


123

এটি তাত্ক্ষণিকভাবে প্রস্থান করে বা যে ফাংশন থেকে ডাকা হয়েছিল তা সম্পূর্ণ করে?

যে পদ্ধতিটি ডেকেছে finish()তা সম্পূর্ণরূপে চলবে। finish()অপারেশন এমনকি শুরু হবে না যতক্ষণ না আপনি অ্যান্ড্রয়েড নিয়ন্ত্রণ ফিরে যান।


3
তারপরে কীভাবে কোনও ক্রিয়াকলাপ শেষ করবেন না যা স্টার্টএভটিভিটিফারসাল্টস () সম্পূর্ণ না করেই ডাকা হয়?
আয়ুশ পেতেরিয়া

@ কমন্সওয়্যার কীভাবে আমরা নিশ্চিত করতে পারি যে অনস্পটকে সর্বদা ডাকা হয়? আমার অ্যাপ্লিকেশন অনসটপ এবং অনডাস্ট্রয়ে কিছু ক্ষেত্রে ডাকা হয় না এবং সেই ক্ষেত্রে শিশুদের ক্রিয়াকলাপ সমাপ্ত করতে খুব বেশি সময় নেয় এবং এটি অ্যাপ্লিকেশনটিকে ফাঁসির মতো দেখায় ... অন্যদিকে যখন অনস্টপ বলা হয় তখন সবকিছু স্বাভাবিকভাবে কাজ করে। আমি অ্যান্ড্রয়েড 2.3.6 সঙ্গে গ্যালাক্সি ওয়াই আছি ... আমার প্রশ্ন দেখতে পাবেন stackoverflow.com/questions/13928591/... Plz সাহায্যের !!!
অমিত

@ কমন্সওয়্যার আমি স্যারকে খুব সত্য পরীক্ষা করেছি। আপনার জন্য +1 তবে আমি আমার ফাংশনে প্রথম বিবৃতি হিসাবে ফিনিস () সমাপ্ত লিখেছি এমন একটি প্রশ্ন জিজ্ঞাসা করতে চাই তারপরে এটি পুরো ফাংশনটি সম্পাদন করে এবং তারপরে সমাপ্তি () বলা হয় কীভাবে এটি পরিচালিত হয়।
নিখিল অগ্রওয়াল

@ নিখিলআগ্রাওয়াল, ডাকা শেষ হওয়ার পরে আপনার ফাংশনটি ফিরতে পারে।
antonio081014

(শেষ) কি ডেসট্রয়ে () কল করার আগে অনপস () এবং অন স্টপ () কল করে?
sr09

20

মত প্রতি জীবনচক্র ঘটনা onCreate, onResume, onPause.... onDestroy"মূল থ্রেড" - একটি কার্যকলাপের সবসময় একটি একক থ্রেডে বলা হয়।

সংক্ষেপে এই থ্রেডটি একটি ক্যু দ্বারা সমর্থনযুক্ত যেখানে সমস্ত ক্রিয়াকলাপ ইভেন্ট পোস্ট করা হচ্ছে। এই থ্রেডটি সন্নিবেশের ক্রমে এই সমস্ত ইভেন্টগুলি কার্যকর করতে পারে।

আপনি যদি finish()জীবন চক্রের onCreate()কোনও কলব্যাকের মতো কল করে থাকেন ... যেমন একটি "সমাপ্তি" বার্তা এই কাতারে যুক্ত হবে তবে থ্রেডটি "ফিনিস" ক্রিয়াটি বেছে নিতে এবং কার্যকর করতে পারবেন না যতক্ষণ না পদ্ধতিটি রিটার্ন সম্পাদন করে ততক্ষণ থ্রেড থেকে মুক্ত হয় না বর্তমান কাজ


13

ondestroy() আপনার ক্রিয়াকলাপটি বিনষ্ট হওয়ার আগে আপনি চূড়ান্ত কলটি পান।

কার্যকলাপটি শেষ হয়ে যাওয়ার কারণে এটি ঘটতে পারে (কেউ এটিকে ডাকেন finish() , বা কারণ স্থানটি সংরক্ষণের জন্য সিস্টেমটি ক্রিয়াকলাপের এই উদাহরণটি অস্থায়ীভাবে ধ্বংস করছে You আপনি isFinishing() পদ্ধতিটির সাহায্যে এই দুটি পরিস্থিতিতে পার্থক্য করতে পারেন ।


1

যদি এ এবং বি দুটি ক্রিয়াকলাপ হয় এবং আপনার প্রবাহ এ> বি থেকে চলছে; এবং বি = একটি কল finish()

তারপর,

আপনি যে পদ্ধতি finish()থেকে ফোন করেছেন তা মার্কের উল্লিখিত হিসাবে কার্যকর হবে। এবং কলব্যাকগুলির প্রবাহ অনুসরণ হিসাবে হবে -

  1. onPause() এর activity A
  2. onRestart()> onStart()> onResume()ভ্রমণ বি এর
  3. তারপরে, আসল পার্থক্য আসে। আপনি যদি ফোন না finish()করেন activity A; শুধুমাত্র onStop()এর Activity Aএখানে ডাকা হবে। এই ক্ষেত্রে, আমরা কোথা finish()থেকে ফোন করেছি Activity A; সুতরাং onStop()এবং onDestroy()উভয় জন্য বলা হবে activity A
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.