অ্যান্ড্রয়েড: Activity.runOnUiThread এবং View.post এর মধ্যে পার্থক্য কী?


98

উত্তর:


105

সত্যিকারের কোনও পার্থক্য নেই, কেবলমাত্র View.postযখন আপনার ক্রিয়াকলাপে সরাসরি অ্যাক্সেস না থাকে তখন এটি সহায়ক।

উভয় ক্ষেত্রেই, ইউআই থ্রেডে না থাকলে, Handler#post(Runnable)পর্দার আড়ালে ডাকা হবে।

কমন্সওয়্যার মন্তব্যে যেমন উল্লেখ করেছেন, দুজনের মধ্যে পার্থক্য রয়েছে - যখন ইউআই থ্রেডে ডাকা হয়, সরাসরি পদ্ধতিটি Activity#runOnUiThreadকল করবেন run, এবং কাতারে View#postপোস্ট দেবেন runnable(যেমন কল করুন Handler#post)

আইএমওর গুরুত্বপূর্ণ বিষয়টি হ'ল উভয়েরই লক্ষ্য একই, এবং যে কেউ এটি ব্যবহার করে, তার মধ্যে কোনও পার্থক্য হওয়া উচিত নয় (এবং ভবিষ্যতে বাস্তবায়ন পরিবর্তিত হতে পারে)।


71
একটি পার্থক্য: runOnUiThread()বর্তমান থ্রেডটি পরীক্ষা করে এবং Runnableযদি আমরা মূল অ্যাপ্লিকেশন থ্রেডে থাকি তবে তত্ক্ষণাত্ কার্যকর করে। যে থ্রেডটি ডাকা হয় তা বিবেচনা post()না Runnableকরে সর্বদা কাতারে লাগায়।
কমন্সওয়্যার

আপনাকে ধন্যবাদ আমি এখন আপনার ব্যাখ্যা এবং @ কমন্সওয়্যার মন্তব্যের ভিত্তিতে পার্থক্যটি দেখতে পাচ্ছি।
আলেকজান্ডার কুলিয়াখতিন

4
@ আশ্বিন: "আপনি বলেছিলেন রানঅনুইথ্রেড () তত্ক্ষণাত্ রান্নেবলকে কার্যকর করে" - না, আমি তা করি নি। মন্তব্যটি পুনরায় পড়ুন। আমি বলেছিলাম " runOnUiThread()বর্তমান থ্রেডটি যাচাই করে এবং আমরা যদি মূল অ্যাপ্লিকেশন থ্রেডে থাকি তবে Runnableতত্ক্ষণাত্ কার্যকর করে " (জোর দেওয়া হয়েছে)। "এর অর্থ কি এই যে ইউআই থ্রেডে বর্তমানে যা রয়েছে তা এড়িয়ে চলে এবং এটিকে প্রথম অগ্রাধিকার দেওয়া হয়?" - "কি কখনও UI 'তে থ্রেডে বর্তমানে" হয়runOnUiThread() কল।
কমন্সওয়্যার

4
@ barn.gumbl: এক্ষেত্রে আমি উত্সটির দিকে নজর রেখেছি।
কমন্সওয়্যার

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

23

Activity.runOnUiThread এবং view.post () এর মধ্যে আর একটি পার্থক্য হ'ল ভিউ.পোস্ট () এ রান করা যায় উইন্ডোতে ভিউ সংযুক্ত হওয়ার পরে ডাকা হয়।


আপনি কিভাবে বোঝানো মানে? দৃশ্যমান হয়? একেবারেই অদৃশ্য দৃশ্যে ডাকা হয় না?
আলেকজান্ডার কুলিয়াখতিন

অস্পষ্টতা অ্যালেক্স সংশোধন করে।
পেরেশগোয়েল

5
এটি সবচেয়ে গুরুত্বপূর্ণ পার্থক্য IMHO। অনেক লোক ভিউ.পোস্ট () ব্যবহার করে এমন স্টাফ কার্যকর করতে যেগুলি দৃশ্য সংযুক্ত হওয়ার পরে কার্যকর করা দরকার।
সোতি

4
এটা সত্য নয়। এটি কখনই সত্য হয়নি, তবে একসময় জাভডোকের জন্য ভিউ.জভা ভুলভাবে জানিয়েছে যে "ভিউ.পোস্টটি অন্য উইন্ডোতে দৃশ্যটি সংযুক্ত করা হয় কেবল তখনই অন্য থ্রেড থেকে কাজ করে"। এটি অক্টোবর 15, 2012- এ স্থির করা হয়েছিল , তবে অ্যান্ড্রয়েড বিকাশকারীদের মনে প্রবেশ করতে কিছুটা সময় নিয়েছিল।
অ্যালেক্স কোহন

এই পার্থক্যের জন্য @pareshgoel উত্স?
এস্টেলোফিজিয়ন

17

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

প্রান্ত মামলা আমি সম্মুখীন হয়েছি সঙ্গে এক View.postআমি উল্লেখ আরেকটি তাই প্রশ্নের উত্তরView.post : View.postকেবলমাত্র তখনই কাজ অন্য থ্রেড থেকে যখন Viewএকটি উইন্ডো সংযুক্ত আছে। এটি খুব কমই একটি সমস্যা, তবে Runnableকখনও কখনও কখনও কখনও কার্যকর হয় না, বিশেষত যদি আপনি View.postনিজের onCreateপদ্ধতিতে কল করেন Activity। একটি বিকল্প হ'ল Handler.postযা ব্যবহার Activity.runOnUiThreadএবং View.postযাইহোক প্রচ্ছদের অধীনে ব্যবহার করা হয়।

(নির্ভুলতার জন্য সম্পাদিত, "অন্য থ্রেড থেকে যোগ করা হয়েছে")


4
এটি ব্যর্থ হতে পারে যখন অপরিবর্তিত onCreate()? এইচএম, আমি আশা করি এটি সেক্ষেত্রে Handlerসরবরাহকৃত পোস্টে পোস্ট করবে ViewRoot
জেনস

5
@Jens হ্যা, আমি উৎস glanced করেছি এবং View.postযোগ করা উচিত Runnableএকটি সারিতে যদি এটা এখনো সংযুক্ত না পরে নিষ্পন্ন করা হবে। উত্সটিতে আমি আরও গভীর খনন করি নি, তবে ডকগুলি বলে: "এই ভিউটি উইন্ডোতে সংযুক্ত থাকলেই এই পদ্ধতিটি ইউআই থ্রেডের বাইরের দিক থেকে শুরু করা যেতে পারে" " সুতরাং আমি মনে করি এটি যদি বর্তমান থ্রেডে থাকে তবে আপনি যা বলেছিলেন তা সত্য, যদি এটি না হয় তবে সম্ভবত এটি কেবল গ্রাস করে Runnable। আমি অবশ্যই আমার কোড এ ঘটেছে।
কাবুকো

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

4
এটা সত্য নয়। এটি কখনই সত্য হয়নি, তবে একসময় জাভডোকের জন্য ভিউ.জভা ভুলভাবে জানিয়েছে যে "ভিউ.পোস্টটি অন্য উইন্ডোতে দৃশ্যটি সংযুক্ত করা হয় কেবল তখনই অন্য থ্রেড থেকে কাজ করে"। এটি অক্টোবর 15, 2012- এ স্থির করা হয়েছিল , তবে অ্যান্ড্রয়েড বিকাশকারীদের মনে প্রবেশ করতে কিছুটা সময় নিয়েছিল।
অ্যালেক্স কোহন

0

অন্য পার্থক্য: postপ্রতি ভিউ; runOnUiThreadক্রিয়াকলাপ প্রতি।

এই উপায়ে সম্ভব হবে (ভবিষ্যতে?) করতে view.getQueue/ activity.getQueueএবং ঠিক কি আপনি আপনার নিজের ট্র্যাকিং বা ফিল্টারিং কোড ছাড়া চান পেতে।

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