Activity.runOnUiThreadএবং এর মধ্যে পার্থক্য কী View.post, কেউ দয়া করে ব্যাখ্যা করতে পারেন?
Activity.runOnUiThreadএবং এর মধ্যে পার্থক্য কী View.post, কেউ দয়া করে ব্যাখ্যা করতে পারেন?
উত্তর:
সত্যিকারের কোনও পার্থক্য নেই, কেবলমাত্র View.postযখন আপনার ক্রিয়াকলাপে সরাসরি অ্যাক্সেস না থাকে তখন এটি সহায়ক।
উভয় ক্ষেত্রেই, ইউআই থ্রেডে না থাকলে, Handler#post(Runnable)পর্দার আড়ালে ডাকা হবে।
কমন্সওয়্যার মন্তব্যে যেমন উল্লেখ করেছেন, দুজনের মধ্যে পার্থক্য রয়েছে - যখন ইউআই থ্রেডে ডাকা হয়, সরাসরি পদ্ধতিটি Activity#runOnUiThreadকল করবেন run, এবং কাতারে View#postপোস্ট দেবেন runnable(যেমন কল করুন Handler#post)
আইএমওর গুরুত্বপূর্ণ বিষয়টি হ'ল উভয়েরই লক্ষ্য একই, এবং যে কেউ এটি ব্যবহার করে, তার মধ্যে কোনও পার্থক্য হওয়া উচিত নয় (এবং ভবিষ্যতে বাস্তবায়ন পরিবর্তিত হতে পারে)।
runOnUiThread()বর্তমান থ্রেডটি পরীক্ষা করে এবং Runnableযদি আমরা মূল অ্যাপ্লিকেশন থ্রেডে থাকি তবে তত্ক্ষণাত্ কার্যকর করে। যে থ্রেডটি ডাকা হয় তা বিবেচনা post()না Runnableকরে সর্বদা কাতারে লাগায়।
runOnUiThread()বর্তমান থ্রেডটি যাচাই করে এবং আমরা যদি মূল অ্যাপ্লিকেশন থ্রেডে থাকি তবে Runnableতত্ক্ষণাত্ কার্যকর করে " (জোর দেওয়া হয়েছে)। "এর অর্থ কি এই যে ইউআই থ্রেডে বর্তমানে যা রয়েছে তা এড়িয়ে চলে এবং এটিকে প্রথম অগ্রাধিকার দেওয়া হয়?" - "কি কখনও UI 'তে থ্রেডে বর্তমানে" হয়runOnUiThread() কল।
Activity.runOnUiThread এবং view.post () এর মধ্যে আর একটি পার্থক্য হ'ল ভিউ.পোস্ট () এ রান করা যায় উইন্ডোতে ভিউ সংযুক্ত হওয়ার পরে ডাকা হয়।
উভয় ক্ষেত্রেই সবচেয়ে পরিস্থিতিতে এবং অধিকাংশ অংশ তারা বিনিমেয় জন্য গ্রহণযোগ্য, কিন্তু তারা হয় চতুরভাবে আলাদা। অবশ্যই সবচেয়ে বড় পার্থক্য হ'ল এটি একটি থেকে Activityএবং অন্যটি এ থেকে পাওয়া যায় View। এগুলির মধ্যে প্রচুর ওভারল্যাপ রয়েছে তবে কখনও কখনও কোনওটিতে Activityআপনার অ্যাক্সেস থাকবে না Viewএবং কখনও কখনও কোনওটিতে Viewআপনার অ্যাক্সেসও থাকবে না Activity।
প্রান্ত মামলা আমি সম্মুখীন হয়েছি সঙ্গে এক View.postআমি উল্লেখ আরেকটি তাই প্রশ্নের উত্তরView.post : View.postকেবলমাত্র তখনই কাজ অন্য থ্রেড থেকে যখন Viewএকটি উইন্ডো সংযুক্ত আছে। এটি খুব কমই একটি সমস্যা, তবে Runnableকখনও কখনও কখনও কখনও কার্যকর হয় না, বিশেষত যদি আপনি View.postনিজের onCreateপদ্ধতিতে কল করেন Activity। একটি বিকল্প হ'ল Handler.postযা ব্যবহার Activity.runOnUiThreadএবং View.postযাইহোক প্রচ্ছদের অধীনে ব্যবহার করা হয়।
(নির্ভুলতার জন্য সম্পাদিত, "অন্য থ্রেড থেকে যোগ করা হয়েছে")
onCreate()? এইচএম, আমি আশা করি এটি সেক্ষেত্রে Handlerসরবরাহকৃত পোস্টে পোস্ট করবে ViewRoot।
View.postযোগ করা উচিত Runnableএকটি সারিতে যদি এটা এখনো সংযুক্ত না পরে নিষ্পন্ন করা হবে। উত্সটিতে আমি আরও গভীর খনন করি নি, তবে ডকগুলি বলে: "এই ভিউটি উইন্ডোতে সংযুক্ত থাকলেই এই পদ্ধতিটি ইউআই থ্রেডের বাইরের দিক থেকে শুরু করা যেতে পারে" " সুতরাং আমি মনে করি এটি যদি বর্তমান থ্রেডে থাকে তবে আপনি যা বলেছিলেন তা সত্য, যদি এটি না হয় তবে সম্ভবত এটি কেবল গ্রাস করে Runnable। আমি অবশ্যই আমার কোড এ ঘটেছে।
অন্য পার্থক্য: postপ্রতি ভিউ; runOnUiThreadক্রিয়াকলাপ প্রতি।
এই উপায়ে সম্ভব হবে (ভবিষ্যতে?) করতে view.getQueue/ activity.getQueueএবং ঠিক কি আপনি আপনার নিজের ট্র্যাকিং বা ফিল্টারিং কোড ছাড়া চান পেতে।