تغییر متن TextView قبل از Sleep قابل مشاهده نیست
سلام
چرا فقط "jafar mohammadzadeh" بعد 5 ثانیه نشون داده میشه و اول "salam" نشون داده نمیشه
public class TredkhodkarActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView txtred = (TextView) findViewById(R.id.txtred);
txtred.setText("salam");
try {
Thread.sleep(5000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
txtred.setText("jafar mohammadzadeh");
}
}
تا اونجایی که من میدونم توی متد oncreat اجزای صفحه هنوز در صفحه بارگذاری نشدن(روی گوشی) و وقتی شما mainthread رو sleep میکنی برنامه متوقف میشه تا اون زمان بگذره
برای این کاری که شما میخوای انجام بدی باید از یه thread استفاده کنی :
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TextView txtred = (TextView) findViewById(R.id.txtred);
txtred.setText("salam");
final Handler handler = new Handler();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2000);
handler.post(new Runnable() {
@Override
public void run() {
txtred.setText("jafar mohammadzadeh");
}
});
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thread.start();
}
Render تصویر و پاسخ به ورودی ها توسط Main Thread یا همان UI Thread انجام میشه. اما هر چند میلی ثانیه یکبار. مثلاً وقتی قرار باشه UI در هر ثانیه 60 بار ترسیم بشه، پس هر 1000/60 میلی ثانیه یکبار دستور Render تصویر اجرا خواهد شد.
وقتی شما setText می کنید، تغییر محتوای TextView انجام میشه اما Render نمیشه. در همین حین بلافاصله دستور بعدی که Sleep هست اجرا میشه و MainThread به خواب میره. پس باز هم تصویر Render نمیشه ( چون Main Thread در خواب هست ). بعد دوباره تا بیدار میشه setText میشه و متن عوض میشه و وقتی موقع Render تصویر میرسه که setText دوم اجرا شده بوده ( یا خیلی سریع تغییر می کنه که قابل دیدن با چشم نیست ).
در کل استفاده کردن از Sleep در MainThread ممنوع است.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .