در برنامه نویسی اندروید برای اینکه پشت پس زمینه برنامه یک سری کارها انجام دهیم و مانع ایجاد پیغام ANR شویم از این کلاس باید استفاده کرد. در این پست در مورد نحوه دسترسی به عناصر UI اکتیویتی اصلی از کلاس ای سینک تسک بحث خواهم کرد.

بعد از کمی جستجو از سایت استک اور فلو روش هایی پیدا کردم که در اینجا خلاصه وار آن ها را بیان می کنم. استفاده از کلاس WeakReference  یکی از راه حل های پیش رو است. در کلاس AsyncTask کلاس WeakReference را تعریف کرده و اکتیویتی اصلی را به آن ارجاع می دهیم.

class MyAsyncTask extends AsyncTask<URL, Integer, Long> {

WeakReference<Activity> mWeakActivity;

public MyAsyncTask(Activity activity) {
mWeakActivity = new WeakReference<Activity>(activity);
}

در نهایت هم کافی است در بخش متد ()onProgressUpdate شی مورد نظر خود را فراخوانی کنید.  با این روش GC برای شما به طور اتوماتیک انجام نمی شود توصیه می شود از این روش استفاده نشود.

Activity activity = mWeakActivity.get();
if (activity != null) {
int id = activity.findViewById(…);
}

روش دیگر متد در اکتیویتی اصلی که کار اپدیت کردن UI را انجام می دهد تعریف کرده و در کلاس AsyncTask فراخوانی کنیم.

public void updateTextView(){

TextView state; state= (TextView)findViewById(R.id.actionBar);

state.setText(“On progress”); }

برچسب‌ها , , , , , , , , , , , , , , , , , , ,


دیدگاهتان را بنویسید

Want to see your ugly mug by your comment? Get a free custom avatar at Gravatar.