আপডেট - 2016
ভাল বিকল্প ব্যবহার করা RxAndroid
(জন্য নির্দিষ্ট বাইন্ডিং RxJava
জন্য) P
মধ্যে MVP
চার্জ তথ্য ফো নিতে।
Observable
আপনার বিদ্যমান পদ্ধতি থেকে ফিরে শুরু করুন ।
private Observable<PojoObject> getObservableItems() {
return Observable.create(subscriber -> {
for (PojoObject pojoObject: pojoObjects) {
subscriber.onNext(pojoObject);
}
subscriber.onCompleted();
});
}
এটি পর্যবেক্ষণযোগ্য এর মতো ব্যবহার করুন -
getObservableItems().
subscribeOn(Schedulers.io()).
observeOn(AndroidSchedulers.mainThread()).
subscribe(new Observer<PojoObject> () {
@Override
public void onCompleted() {
// Print Toast on completion
}
@Override
public void onError(Throwable e) {}
@Override
public void onNext(PojoObject pojoObject) {
// Show Progress
}
});
}
-------------------------------------------------- -------------------------------------------------- ------------------------------
আমি জানি আমি কিছুটা দেরি করেছি তবে এখানে চলে গেছে। অ্যান্ড্রয়েড মূলত ইউআই থ্রেড এবং ব্যাকগ্রাউন্ড থ্রেড দুটি থ্রেডের উপর কাজ করে । অ্যান্ড্রয়েড ডকুমেন্টেশন অনুযায়ী -
এই সমস্যাটি সমাধানের জন্য ইউআই থ্রেডের বাইরে থেকে অ্যান্ড্রয়েড ইউআই টুলকিট অ্যাক্সেস করবেন না, অ্যান্ড্রয়েড অন্যান্য থ্রেড থেকে ইউআই থ্রেড অ্যাক্সেস করার বিভিন্ন উপায় সরবরাহ করে। এখানে সাহায্য করতে পারে এমন পদ্ধতির একটি তালিকা এখানে রয়েছে:
Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)
এখন এই সমস্যা সমাধানের জন্য বিভিন্ন পদ্ধতি রয়েছে।
আমি কোড নমুনা দ্বারা এটি ব্যাখ্যা করব:
runOnUiThread
new Thread()
{
public void run()
{
myactivity.this.runOnUiThread(new Runnable()
{
public void run()
{
//Do your UI operations like dialog opening or Toast here
}
});
}
}.start();
LOOPER
ক্লাস কোনও থ্রেডের জন্য একটি বার্তা লুপ ব্যবহার করত। ডিফল্টরূপে থ্রেডগুলির সাথে একটি বার্তা লুপ থাকে না; একটি তৈরি করতে, লুপটি চালানোর জন্য থ্রেডে প্রস্তুত () কল করুন এবং তারপরে লুপটি থামানো অবধি বার্তাগুলি প্রক্রিয়া করার জন্য লুপ () করুন।
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop();
}
}
AsyncTask
অ্যাসিঙ্কটাস্ক আপনাকে আপনার ইউজার ইন্টারফেসে অ্যাসিক্রোনাস কাজ সম্পাদন করতে দেয়। এটি কোনও কর্মী থ্রেডে ব্লকিং অপারেশনগুলি সম্পাদন করে এবং তারপরে ইউআর থ্রেডে ফলাফলগুলি প্রকাশ করে, আপনাকে নিজেরাই থ্রেড এবং / অথবা হ্যান্ডলারগুলি পরিচালনা করার প্রয়োজন ছাড়াই।
public void onClick(View v) {
new CustomTask().execute((Void[])null);
}
private class CustomTask extends AsyncTask<Void, Void, Void> {
protected Void doInBackground(Void... param) {
//Do some work
return null;
}
protected void onPostExecute(Void param) {
//Print Toast or open dialog
}
}
ক্রীড়াশিক্ষক
একটি হ্যান্ডলার আপনাকে কোনও থ্রেডের মেসেজকুইয়ের সাথে সম্পর্কিত বার্তা এবং চলমানযোগ্য বস্তু প্রেরণ এবং প্রক্রিয়া করার অনুমতি দেয়।
Message msg = new Message();
new Thread()
{
public void run()
{
msg.arg1=1;
handler.sendMessage(msg);
}
}.start();
Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if(msg.arg1==1)
{
//Print Toast or open dialog
}
return false;
}
});
compile 'com.shamanland:xdroid-toaster:0.0.5'
, এটির প্রয়োজনrunOnUiThread()
বাContext
পরিবর্তনশীল নয়, সমস্ত রুটিন চলে গেছে! শুধু ডাকাToaster.toast(R.string.my_msg);
: এখান উদাহরণ github.com/shamanland/xdroid-toaster-example