ورود

View Full Version : عدم نمایش layout اولیه!!!!!!!!!!!!



CRbreeze
جمعه 14 اسفند 1394, 09:42 صبح
سلام دوستان وقتون بخیر

من یه برنامه فوق العاده ساده نوشتم ولی متاسفانه اجرای اشتباهی دارم ... نمیدونم مشکل کجاست!

کد زیر رو ببینید:

@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.start);
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
startActivity(new Intent(BookApp.this, com.example.pc1.book.Menu.class));
finish();
}

من این قطعه کد رو تو main نوشتم و میخوام اول که برنامه اجرا میشه لیوت start رو به مدت 5 ثانیه نمایش بده و بعد وارد کلاس Menu بشه ... ولی اتفاقی که میفته اینه که بعد از اجرا یه صفحه سفید میاد و پنج ثانیه روی همون میمونه بعد وارد کلاس Menu میشه!!!

کسی میدونه مشکل کد کجاست؟

msroid
جمعه 14 اسفند 1394, 13:12 عصر
سلام

اون try-catch و کدهای داخلش رو حذف کن و اینجوری عمل کن:


new Handler().postDelayed(new Runnable() {
@Override
public void run() {
startActivity(new Intent(BookApp.this, com.example.pc1.book.Menu.class));
finish();
}
}, 5000);

CRbreeze
جمعه 14 اسفند 1394, 15:17 عصر
ممنون....درست شد ...

فقط یه سوال شما میدونید چرا کد من درست جواب نمیده؟

msroid
جمعه 14 اسفند 1394, 15:32 عصر
اگر روی هر گوشی که امتحان میکنی نتیجه یکسانه به این دلیله که اون کد اجرای برنامه رو متوقف میکنه و شما این کار رو داری توی thread اصلی برنامه انجام میدی. در واقع کاری که به هیچ عنوان نباید انجام بشه. برای همین خیلی از کارها رو پیشنهاد میکنن توی thread های دیگه انجام بدین تا وقفه ای در کار main thread برنامه ایجاد نشه چون اون چیزی هست که کاربر داره میبینه و باهاش سرو کار داره.
کدی که من برات گذاشتم اجرای برنامه رو متوقف نمیکنه و کاربر میتونه هر کاری دوست داره انجام بده و وقفه ای ایجاد نمیکنه بلکه مثل یه تایمر عمل میکنه و بعد از شروع برنامه شروع میکنه به محاسبه زمان و وقتی 5 ثانیه گذشت اون موقع اجرا میشه.

ویرایش:

دقیقتر اینه که بگیم وقتی اجرای برنامه رسید به اون کد مورد نظر شروع به محاسبه زمان میکنه.