آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

نحوه صحیح بستن Thread

learnpro  11 سال پیش  11 سال پیش
0 0

سلام تویه برنامه Feedreader من از thread استفاده کردم.

مشکل اینه که وقتی از برنامه خارج میشم و دوباره میخوام برنامه رو اجرا کنم کرش میکنه چون ترد هنوز در اجراست.

سوال اینه که چه جوری این ترد رو موقعی که از برنامه میام بیرون به صورت کامل ببندم؟

از این کد هم استفاده کردم ولی جواب نداد

 if (thread.isAlive)
{
thread.stop()
}

 
  thread = new Thread(new Runnable() {

@Override
public void run() {

handler.post(new Runnable() {

@Override
public void run() {
RssParser parser = new RssParser("http://itna.ir/rssew.skj1zjyss1rhx2k4m..9ji9b7.jbgjzqg.xml";
AdapterItems adapter = new AdapterItems(parser.getItems());
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();

}
});

}
});
thread.start();

0 0
با این کد ترد بسته میشه اما کل پروسس برنامه هم همراهش بسته میشه که جالب نیست. android.os.Process.killProcess(android.os.Process.myPid()); (11 سال پیش)
0 0
شاید هنگام بستن بهتر باشه ترد رو نال کنی. (11 سال پیش)
0 0
کرش میکنه وقتی نال میکنم (11 سال پیش)
0 0
زمانی که برنامه رو میخوای ببندی ترد در چه مرحله ای هست ؟ منظورم اینه داره چه کاری انجام میده اطلاعات از سرور مخونه یا متغیری رو پر میکنه ؟ (11 سال پیش)
0 0
اطلاعات رو از سرور میخونه (11 سال پیش)
0 0
کسی نظری نداره ؟؟ (11 سال پیش)
0 0
بهتره پروسس رو ببندید ! ، ساده ترین راهش system.exit(0)z هست :) (11 سال پیش)
0 0
این طوری کل پروسس بسته میشه ؟ یعنی اگه یه alarm manager داشته باشیم که مثلا سه روز دیگه یه کاری بکنه اونم دیگه غیر فعال میشه ؟ (11 سال پیش)
0 0
حالا صحیح ترین راه برای بستن ترد چی هست ؟ فرض کنید 2 بار روی یک باتن کلیک بشه < و بعد از اون شمارش معکوس شروع بشه < این طوری روی TextView دوبار شمارش معکوس نمایش داده میشه < در حالی که با کلیک دوم ترد اول باید از بین بره و شمارش از اول شروع بشه (11 سال پیش)
+1 0
در این لینک یه چیزی نوشتم. ببینید درسته یا نه. یا اصلا به کارتون میاد؟ (11 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
مجتبی یگانه  11 سال پیش
+2 0

یک Thread تا زمانی در جریان هست ، که کاری برای انجام داشته باشه ، وقتی تمام کد ها رو اجرا کنه ، بازم یک ترد تو متغییر شما وجود داره ، اما در حال اجرا نیست :)

پس شما باید اجرای کد ها رو محدود به وضعیت یک متغییر کنید !

while(!isThreadStopped){
// Do Job !
}

حالا برای متوقف کردن این Thread کافیه isThreadStopped رو برابر True کنید

در نهایت برای آزاد کردن حافظه ی اشغال شده  به این شکل عمل کنید

 myThread = null;
0 0
این روش اصولی برای استفاده از ترد هست < که وقتی کار اون تموم میشه اون رو برابر با Null قرار بدیم که حافظه بیخود اشغال نشه < اما من نیاز دارم قبل از اینکه کار ترد قبلی تمام بشه < یک ترد جدید ادامه کار رو نادیده بگیره و کار رو از اول شروع کنه (11 سال پیش)
+1 0
من تا اونجا که می دونم ترد ها موازی پردازش می شن(اگه اشتباه می گم بگید). حالا هنوز نمی فهمم چطور دو تا ترد به هم ربط پیدا می کنن! خوب ما هر ترد را جداگانه متوق می کنیم و جداگانه هم null می کنیم. (11 سال پیش)
+1 0
اگه دوتا ترد رو یه متغییر تاثیر بزارن ، اون موقع به هم ربط پیدا میکنن آقا حامد ، دقیقا نیاز کریس هم همینه ، یعنی اون ترد قبلی رو اول باید متوقف کنید با همون روش بالا و بعد ترد جدید با متغییر ترد قبلی شروع به کار کنه (11 سال پیش)
0 0
متاسفانه توی این روش که شما بالا گذاشتید < job من خودش یک For هست !< ولی اگر بشه ازش خارج شد خوب میشه (11 سال پیش)
0 0
چرا بحث رو دو طرفه ادامه میدید _ آدم خل میشه :) _ لینک اون تاپیک لینک کاشک مدیرا < لینک تاپیک های مرتبط با هم رو توی یک پست مثلا زیر همین پست جمع می کردند !< یا حداقل تگ ها بیان زیر این تاپیک نشون داده بشه! (11 سال پیش)
+1 0
@criss ، متاسفانه نداره که ، کارت خیلی راحت تر شده ، دیگه while نمیخواد ، تو for یه شرط بزار (11 سال پیش)
0 0
نمیشه < من سورس رو توی این لینک گذاشتم لینک ترد تا زمانی که Wile وجود داره ترد تموم نمیشه و تا اخر اجرا میشه < سورس رو تغییر دادم کمی بهتر شد ! (11 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .