thread and progress
سلام بچه ها
میخواستم برا تمرین برنامه Freaking Math رو بسازم حالا مثل همون برنامه جمع دو تا عدد رو به کار بر نشان میدادم و در بالا هم یک پروگرس بار قرار داره که به ترد متصل هست هر بار که کاربر پاسخ صحیح بدهد پروگرسس بار از اول شروع به کار می کند مشکل اینجاست که اگه کار بر زدوتر از زمان تعین شده جواب بده تردی که به پروگرس متصل هست به کار خودش ادامه می دهد و اینطور در نمایش پروگرس بعدی اختلال ایجاد می شود؟
حالا مشکلم همانطور که گفتم اینه که ترد رو چه جوری میشه استاپ کرد ؟؟؟؟( یا یه جوری از ادامه کارش قبل از به پایان رسیدن زمان استانداردی که تعیین کردم جلوگیری به عمل بیاید).
البته تو انجمن گشتم یک دو پاسخ پیدا کردم با هاشونم سرو کله زدم ولی چیزی از شون گیرم نیومد.
@Override
public void run() {
super.run();
while (seconds > 0) {
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
if (prg != null) {
ActivityMain.HANDLER.post(new Runnable() {
@Override
public void run() {
prg.setProgress(seconds);
Log.i("Log", "seconds= " + seconds);
}
});
}
seconds--;
}
}
خخخخخخخخ خدای مردم از خنده جوابش خیلی ساده بود
کلاس ترد رو آوردم پایین اکتیویتی که توش از همون ترد استفاده می کردم یه فیلد stopThread درست کردم هر وقت خواستم ترد متوقف شه از ایف پایین اسفاده می کردم که باعث می شد از حلقه مربوط به ترد بیاد بیرون.
public boolean stopThread= false;
if (stopThread) { Log.i("Log", "endThread= " + endThread); return; }
فرض کنیم که یک Thread داریم که چندین بار اجرا شده، مثلا یک کلاس نوشتیم از Thread برای دانلود کردن، زمان اجرا یا بهتر بگم استارت باید یک فیوز بیت یا یک رجیستر بیتی که بیانگر راه اندازی شدن ترد هست استفاده کنیم.
کد زیر نمونه کلاس Thread هست که با زدن دکمه Thread فعال و با زدن دوباره غیر فعال میشه.
کلاس اکتیویتی به همراه کلاس Thread.
public class ActivityMain extends Activity{
public boolean chkStatus;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ThreadRun thread = new ThreadRun();
Button btnSetTime = (Button) findViewById(R.id.btnSetTime);
btnSetTime.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(!chkStatus){
thread.start();
chkStatus = true;
}
else
chkStatus = false;
}
thread.threadDeactive(chkStatus);
});
}
}
public class ThreadRun extends Thread {
private boolean isclicked;
public void threadDeactive(boolean chkStatus){
isclicked = chkStatus;
}
@Override
public void run() {
super.run();
startProgress();
}
public void startProgress(){
if(isclicked){
//do something
threadSleep(1000);
}else{
Thread.currentThread().interrupt();
return;
}
}
public void threadSleep(int sleep){
try {
Thread.sleep(sleep);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .